2011-05-24 56 views
6

可能重复:
How to calculate a packet checksum without sending it?如何用scapy重新计算IP校验和?

我欺骗在捕获数据包源IP和MAC地址,但现在我需要重新计算校验和,以便它检查出来,一旦其(被注入网络之后)。我并不是真的想要自己执行校验和,而且我认为scapy可以为我做到这一点。我读过show2()函数应重新计算校验和,但我似乎无法使其工作。

那么,我怎样才能使用scapy重新计算(并替换)一个捕获的+欺骗数据包的校验和?

谢谢!

+0

此外,如果有另一个易于使用的Python库,在这种情况下很好地工作 - 我都是耳朵(眼睛)。 – 2011-05-24 15:37:46

回答

7

由于shown here,你必须调用从scapy

+1

我选择了这个答案,因为关键是我必须“去除”chksum字段。以前我在校验和字段中用空字节手动重建数据包。这样做,然后调用'show2()'没有重新计算校验和。先用'del'删除字段提供了正确的行为。 – 2011-05-24 18:18:36

3

show2()方法比方说,为了便于讨论,我们正在处理的IP报头,并希望下一跳后,重新计算校验和之前删除.chksum属性:

>>> iph = IP(import_hexcap()) 
0000 4500 0064 000f 0000 fe01 3726 c0a8 0108 
0010 c0a8 030b 
>>> iph.ttl = iph.ttl - 1 
>>> del iph.chksum 
>>> iph.show2() 
###[ IP ]### 
version= 4L 
ihl= 5L 
tos= 0x0 
len= 100 
id= 15 
flags= 
frag= 0L 
ttl= 253 
proto= icmp 
chksum= 0x3826 
src= 192.168.1.8 
dst= 192.168.3.11 
options= 

.chksum字段有你的答案。