scapy:修改嗅探流量TTL的正确方法

时间:2012-04-26 15:21:32

标签: icmp scapy ttl

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

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

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

...一旦我使用函数sr发送ICMP消息,我就会收到它。

另一方面,如果我拿出任何我已经嗅过的传出数据包并将其ttl值更​​改为上面使用的那个,我得不到任何答复。

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

2 个答案:

答案 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)