我正在和Scapy玩耍,我注意到一些奇怪的东西。
如果我创建数据包以触发ICMP超时错误消息:
myPacket = IP(dst="www.google.com", ttl=3)/TCP()
...一旦我使用函数sr
发送ICMP消息,我就会收到它。
另一方面,如果我拿出任何我已经嗅过的传出数据包并将其ttl值更改为上面使用的那个,我得不到任何答复。
这里有什么问题?我以为我可以通过使用虚拟交通,而不是真正的交通来体验这一点!我甚至尝试过其他TTL值,但无济于事。
答案 0 :(得分:1)
好的,数据包被丢弃了,因为一旦我更改了ttl值,校验和就不再正确了。我只需要通过删除它的值来强制校验和再次计算:
del(mypacket.getlayer(IP).chksum)
答案 1 :(得分:1)
另一种选择是使用sendp()函数。 Scapy自动计算IP和TCP校验和。
myPacket = IP(dst="www.google.com", ttl=3)/TCP()
sendp(myPacket)
def dissect(pck):
if pck.haslayer("ICMP"): # Filter out all but ICMP packets. You could do additional filtering
pck.show() # Display response packets
sniff(iface="eth0", prn=lambda x:dissect(x), store=0)