2008-11-26 214 views
1

驗證ping回顯時,似乎公用程序/庫通常只檢查數據包的校驗和,並不真正確認發送的有效內容與返回的有效內容是否匹配。例如,Wireshark的ICMP解析器只檢查錯誤的校驗和,這也是Ruby的net-ruby所檢查的。如何檢查ICMP Ping/Echo中的返回數據包內容?

我正在調試低級網絡驅動程序問題,我需要確認數據在收到時未被破壞,所以我想使用低級請求(如ICMP Echo)來測試我的驅動程序。但是,我現有的Ping工具不足,因爲我擔心雖然校驗和可能與echo響應中包含的數據相匹配,但echo響應中的數據與echo請求中的數據不匹配。因此,即使它們都有有效的校驗和(校驗碼中沒有錯誤),數據接收部分也會出現錯誤,這樣我的驅動程序就不會收到主機認爲它正在發送的內容。

我該如何檢查迴音有效載荷以確認它與我發出的相同?如果我可以使用獨立的「偏執ping」實用程序,那也可以 - 我只需要能夠改變ping的長度和頻率,因爲我只在網絡氾濫時纔看到問題。

我更喜歡Ruby庫/ Snippet的形式,但任何語言或獨立應用程序都是可以接受的,只要我可以在Windows上運行它即可。

謝謝!

回答

0

@Tom:謝謝你的回答。你說:

接收器從數據中重新計算校驗和並將其與發送的校驗和進行比較。

但你也說:

的ICMP校驗和不包括TCP報頭,只有ICMP類型,代碼,校驗和數據字段。

回聲請求/響應(一個是0,另一個是我認爲是8)的ICMP類型不同。因此,根據定義(實際上,如果用Wireshark查看),ICMP校驗和在發送請求和回顯響應之間不匹配。

我的問題是,如果ping實用程序/庫檢查任何東西(通常他們沒有),他們只檢查以確保校驗和匹配數據。似乎很少有人真正使用echo'd響應檢查發送的數據,以確保兩個有效負載是相同的。有可能請求和響應都可以有有效的校驗和,但是有不同的有效載荷,並且我見過的大多數Ping例程都沒有檢查這種情況(但它恰好是我對我的錯誤設備)。

感謝您查看我的問題並作出迴應 - 非常感謝。

@All:

在回答我自己的問題,我可以使用強大的.Net Ping類,因爲它給了我接收到的響應緩衝區準備訪問(不像其他大多數坪圖書館,我發現)。

1

我認爲你錯過了校驗和的要點。校驗和的目的是驗證數據是否完整。發送方根據數據計算校驗和並將其與數據一起傳輸。接收方根據數據重新計算校驗和並將其與發送的校驗和進行比較。如果它們不匹配,那麼數據並不完整,或者其中一個計算錯誤。大多數情況下,錯誤校驗和不會導致數據包丟失,因爲存在很多破損的協議棧,當然還有數據包破壞程序,並且不會修復校驗和,但是如果雙方確實恰當地執行了校驗和,那麼校驗和檢查告訴你數據完好無損。

您正在查看TCP校驗和還是ICMP校驗和? ICMP校驗和不包括TCP頭,僅包括ICMP類型,代碼,校驗和和數據字段。 TCP校驗和失敗並不一定意味着ICMP內容不完整,它可能意味着TCP頭部被弄亂了(可能是由於一個壞的NAT)。