2012-04-26 112 views
2

我正在玩Scapy,我发现有些奇怪的东西。scapy:修改嗅探流量的TTL的正确方法

如果我为了触发ICMP时间超过了错误信息创建一个包:

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

...我得到的ICMP报文有一次我与功能sr发送。另一方面,如果我接收到任何传出的数据包,并且已将其ttl值更​​改为上面所用的相同值,则我将不会收到任何回复。

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

+0

瑞奇,有一种可能性,即第三跳路由器可能下探TTL超时数据包默默地,尝试TTL 4和2又是您在Scapy的traceroute的显示了在3跳了缺失的一环? – dc5553 2012-04-27 08:17:23

+0

是的,我尝试了从1到20的值,但我仍然没有收到ICMP消息。我真的不知道发生了什么事。 – 2012-04-27 09:26:21

+0

尝试用-i 3 ping,只是嗅探一下,看看你是否在scapy之外得到任何东西? – dc5553 2012-04-27 09:36:49

回答

1

好吧,数据包被丢弃,因为一旦我改变ttl值校验和不再是正确的。我只需要强制校验和再次通过删除其值来计算:

del(mypacket.getlayer(IP).chksum) 
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)