2014-01-16 29 views
1

我一直在用Python中的scapy搞乱,但更具体地说,我一直在创建数据包并尝试设置TCP层的选项。如何在scapy中取消TCP数据包中的EOL选项

我知道我可以创建

>>> a = IP()/TCP() 

包我也知道我可以

>>> a[TCP].options=[('MSS',1200),('NOP',None)] 

或者

>>> a[TCP].options=('MSS',1200),('NOP',None) 

的问题我将在TCP层的选项在我发送数据包并以wireshark观察它之后,我已经有了。 Wireshark总是显示列表结束(EOL)选项设置在我的数据包中时,我没有设置它。我不认为这个选项总是被设置,不管怎样,因为我看过很多没有显示该选项的TCP数据包。有没有办法在scapy中设置TCP选项,而不包括EOL选项?

谢谢。

回答

2

这是我认为的一致性问题。 Wireshark无需检查。从scapy中,您可以使用TCP(str(TCP(options=...)))来强制Scapy生成数据包并解析结果字节,或者使用.show2()数据包方法。

('MSS', 1200)选项需要单独4个字节,所以不会需要任何额外的选项添加:

>>> TCP(str(TCP(options=[('MSS',1200)]))).options 
WARNING: No IP underlayer to compute checksum. Leaving null. 
[('MSS', 1200)] 

('NOP', None)选择适合于仅1个字节,因此3个空字节将被添加。第一个将显示为('EOL', None),当然,因为EOL表示End Of List,则不会考虑下两个字节。

>>> TCP(str(TCP(options=[('NOP', None)]))).options 
WARNING: No IP underlayer to compute checksum. Leaving null. 
[('NOP', None), ('EOL', None)] 

之所以需要4个字节对准的是,数据偏移字段(dataofs)的意思是“从TCP层到数据的开头的开头4字节字的数目”。