2

我正在和 Scapy 玩耍,我注意到一些奇怪的事情。

如果我创建一个数据包以触发 ICMP 超时错误消息:

myPacket = IP(dst="www.google.com", ttl=3)/TCP()

...一旦我使用该功能发送 ICMP 消息,我就会收到它sr

另一方面,如果我获取任何已嗅探的传出数据包并将其 ttl 值更改为上面使用的相同值,我将得不到任何回复。

这里有什么问题?我以为我可以通过使用虚拟流量而不是真实流量来体验这一点!我什至尝试使用其他 TTL 值,但无济于事。

4

2 回答 2

1

好的,数据包被丢弃了,因为一旦我更改了 ttl 值,校验和就不再正确了。我只需要通过删除它的值来强制重新计算校验和:

del(mypacket.getlayer(IP).chksum) 
于 2012-04-27T10:19:17.630 回答
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)
于 2012-05-16T14:39:27.100 回答