2017-08-04 343 views
1

我的包:IPOptions在scapy3.0.0和python3.5抛出错误

a=IP(src="30.1.1.2",dst="20.1.1.2",options=IPOption('\x83\x07\x04\x00\x00\x00\x00\x00'),) 

我收到错误:

a=bytes(IP(src="30.1.1.2",dst="20.1.1.2",options=IPOption('\‌​x83\x07\x04\x00\x00\‌​x00\x00\x00'),)) 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/code.py", line 90, in runcode exec(code, self.locals) 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/scapy/base_classes.p‌​y", line 197, in call 
    cls = cls.dispatch_hook(*args, **kargs) 
    File "/usr/local/lib/python3.4/dist-packages/scapy/layers/inet.py‌​", line 161, in dispatch_hook 
    opt = pkt[0] & 0x1f 
TypeError: unsupported operand type(s) for &: 'str' and 'int' – 
+0

错误>>> a = bytes(IP(src =“30.1.1.2”,dst =“20.1.1.2”,options = IPOption('\ x83 \ x07 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00'))) Traceback (最新最后调用): 文件 “/usr/lib/python3.4/code.py”,行90,在runco​​de EXEC(代码self.locals) 文件 “”,1号线,在 文件“/usr/local/lib/python3.4/dist-packages/scapy/base_classes.py”,第197行,在__call__中 cls = cls.dispatch_hook(* args,** kargs) 文件“/ usr/local /lib/python3.4/dist-packages/scapy/layers/inet.py“,第161行,在dispatch_hook中 opt = pkt [0]&0x1f TypeError:不支持的操作数类型为&:'str'和'int' – Muralidhar

回答

1

既然你使用Python 3,你应该使用bytes而不是str作为IP选项:

a = bytes(IP(src="30.1.1.2", dst="20.1.1.2", 
      options=IPOption(b'\x83\x07\x04\x00\x00\x00\x00\x00')) 
+0

a = IP(src =“30.1.1.2”,dst =“20.1.1.2”, options = IPOption(b'\ x83 \ x07 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00')。我相信不需要将整个IP数据包转换为字节。只是将IPOption转换为字节帮助了我。谢谢皮埃尔。 – Muralidhar

+0

我刚刚修复了最后一行,它以'a = bytes(IP([...]))'开始。当然,如果你想创建一个IP Scapy包,不需要'bytes()'。但是如果你想创建将要在网络上发送的字节,你需要它。 – Pierre