2012-10-27 51 views
3

我正在用Python编写我的第一个程序。 我正在使用第三方工具包与网络数据包进行交互(Scapy)。访问Scapy的内部协议层

当我用这个方法:

p=sr1(IP(dst="google.com")/TCP()) 

结果是:

<IP version=4L ihl=5L tos=0x0 len=44 id=18972 flags= frag=0L ttl=44 
proto=tcp chksum=0x25bd src=173.194.39.134 dst=192.168.137.2 
options=[] |<TCP sport=www dport=ftp_data seq=1295300429 ack=1 
dataofs=6L reserved=0L flags=SA window=14300 chksum=0x3c7e urgptr=0 
options=[('MSS', 1430)] |<Padding load='\x00\x00' |>>> 

我可以简单地通过p.chksum访问的IPchksum,但我怎么能访问的TCPchksum

+0

我不知道Scapy,但是当你不知道如何使用对象时,在交互式解释器中使用'help'通常很有用。 – Bakuriu

+0

'dir(sr1(IP(dst =“google.com”)/ TCP()))'给了你什么? – Eric

回答

2

作为一般准则,你是因为校验和是在发射计算应使用

>>> p[TCP].chksum 

但是这只适用于接收的数据包。您可以使用show2()方法检索未发送的数据包的校验和。

+1

谢谢,它的工作原理。另一个解决方案是'p.getlayer(TCP).chksum' – deepmax