2012-10-27 70 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