2012-04-26 113 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)