phaethon/kamene

summary() of group of IPv6 packets results in "TypeError: inet_pton() argument 2 must be str, not map"

Opened this issue · 0 comments

dkg commented

try this reproducer (tested against 0.23):

from scapy.all import IP, IPv6, TCP, sr, conf

examples = {
    'v4single': IP(dst='192.0.2.1',ttl=(1,5))/TCP(dport=80,flags='S'),
    'v4dual': IP(dst=['192.0.2.1','192.0.2.2'],ttl=(1,5))/TCP(dport=80,flags='S'),
    'v6single': IPv6(dst='2001:db8::1',hlim=(1,5))/TCP(dport=80,flags='S'),
    'v6dual': IPv6(dst=['2001:db8::1','2001:db8::2'],hlim=(1,5))/TCP(dport=80,flags='S')
}
for ex in ['v4single', 'v4dual', 'v6single', 'v6dual']:
    print(ex)
    print(examples[ex].summary())

i see as output:

v4single
IP / TCP 192.0.2.254:ftp_data > 192.0.2.1:http S
v4dual
IP / TCP 192.0.2.254:ftp_data > ['192.0.2.1', '192.0.2.2']:http S
v6single
IPv6 / TCP 2001:db8::fffe:ftp_data > 2001:db8::1:http S
v6dual
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/dkg/test.py in <module>()
     11 for ex in ['v4single', 'v4dual', 'v6single', 'v6dual']:
     12     print(ex)
---> 13     print(examples[ex].summary())
     14 

/usr/lib/python3/dist-packages/scapy/packet.py in summary(self, intern)
   1016     def summary(self, intern=0):
   1017         """Prints a one line summary of a packet."""
-> 1018         found,s,needed = self._do_summary()
   1019         return s
   1020 

/usr/lib/python3/dist-packages/scapy/packet.py in _do_summary(self)
    992 
    993     def _do_summary(self):
--> 994         found,s,needed = self.payload._do_summary()
    995         if s:
    996             s = " / "+s

/usr/lib/python3/dist-packages/scapy/packet.py in _do_summary(self)
    997         ret = ""
    998         if not found or self.__class__ in needed:
--> 999             ret = self.mysummary()
   1000             if type(ret) is tuple:
   1001                 ret,n = ret

/usr/lib/python3/dist-packages/scapy/layers/inet.py in mysummary(self)
    581             return self.underlayer.sprintf("TCP %IP.src%:%TCP.sport% > %IP.dst%:%TCP.dport% %TCP.flags%")
    582         elif conf.ipv6_enabled and isinstance(self.underlayer, scapy.layers.inet6.IPv6):
--> 583             return self.underlayer.sprintf("TCP %IPv6.src%:%TCP.sport% > %IPv6.dst%:%TCP.dport% %TCP.flags%")
    584         else:
    585             return self.sprintf("TCP %TCP.sport% > %TCP.dport% %TCP.flags%")

/usr/lib/python3/dist-packages/scapy/packet.py in sprintf(self, fmt, relax)
    975                         val = getattr(self,fld)
    976                         if fld in self.fieldtype:
--> 977                             val = self.fieldtype[fld].i2repr(self,val)
    978                 else:
    979                     val = self.payload.sprintf("%%%s%%" % sfclsfld, relax)

/usr/lib/python3/dist-packages/scapy/layers/inet6.py in i2repr(self, pkt, x)
    214             return self.i2h(pkt,x)
    215         elif not isinstance(x, Net6) and not type(x) is list:
--> 216             if in6_isaddrTeredo(x):   # print Teredo info
    217                 server, flag, maddr, mport = teredoAddrExtractInfo(x)
    218                 return "%s [Teredo srv: %s cli: %s:%s]" % (self.i2h(pkt, x), server, maddr,mport)

/usr/lib/python3/dist-packages/scapy/utils6.py in in6_isaddrTeredo(x)
    535     format.
    536     """
--> 537     our = inet_pton(socket.AF_INET6, x)[0:4]
    538     teredoPrefix = inet_pton(socket.AF_INET6, conf.teredoPrefix)[0:4]
    539     return teredoPrefix == our

TypeError: inet_pton() argument 2 must be str, not map