2012-06-05 67 views
6

我正在使用Scapy來重放一些在其中更改TTL值的轉儲數據包。即使TTL = 1,我也會得到非常奇怪的結果。沒有得到所有ICMP超時消息:爲什麼?

當我將測試時間彼此分開時,我可以從大約40%到95%的數據包中收到ICMP超時消息。然後,我可以遞歸地重播未答覆的數據包,並且每次或多或少地獲得與以前一樣的答覆數據包百分比。

這是爲什麼?

我一直在發送數據包之間的時間間隔爲0.1秒。這應該沒問題吧?我的超時值是10秒,這應該是非常保守的。

這裏有什麼問題?

回答

5

你所說的基本上,你只能在給定的時間範圍內測試如此多的不可達主機。一個可能的原因是:許多路由器限速ICMP消息。

在做其他事情之前測試主機的ping成功要好得多,通過這種方式,您可以獲得可達性的肯定確認。缺點是MS Windows默認阻止ping。

如果首先不能ping,那麼您需要增加探測之間的時間,或者在返回ICMP消息的路由器上提高ICMP不可達速率。

編輯:

基礎上的評論,它看起來像你打的scapy的處理流量的能力牆上。我通過在後臺發送scapy和產生tcpdump來改善吞吐量,以接收流量。

+0

ICMP速率限制也是我的猜測,但今天我試圖再次發送一切,甚至5秒的數據包間隔時間,並且我仍然沒有得到至少6-7個數據包的回覆我的50(小測試)。 我在Scapy中使用'sr'函數。所以我想我一次只能傳遞一個數據包,然後暫停1秒鐘。那麼,這一次*每個*單個數據包都可以得到答案。我想這是執行'sr'的問題。 –

+1

我看到'scapy'類似的問題,它對發送/接收流量很慢;在一個項目中,我實際上開始使用'tcpdump'作爲寫入'.pcap'文件的後臺進程,然後在'scapy'中解析文件以查看我是否得到了正確的響應。 –

+0

我明白了。你知道scapy的sr'函數有什麼替代嗎?我真的只需要發送修改後的TTL值的數據包,並將它們與相應的ICMP消息配對。它在Scapy中看起來很/很簡單,但爲每個數據包調用sr'需要很長時間。 –

相關問題