2013-11-22 72 views
0

我正在學習Linux上的datalink原始套接字編程,並且我發現這些幫助examples。我編譯了icmp4_ll.c,並用它將ICMP數據包發送到同一局域網中的另一臺計算機。我可以收到目標計算機的回覆。但是,當我使用它向本地計算機發送ICMP數據包時,即將源和目標以太網MAC和IP地址設置爲eth0的MAC和IP地址時,我無法在eth0或lo上收到ICMP應答接口(在Wireshark中,我只注意到通過eth0發送的ICMP請求,但在任何接口上都沒有ICMP回覆。) 我認爲ICMP請求消息組成正確,否則遠程目標不會回覆。但我不知道爲什麼操作系統沒有回覆請求。任何幫助或暗示讚賞。通過本地接口發送和接收帶有數據鏈路原始套接字的ICMP

+0

如果您沒有得到回覆,迴應請求可能是錯誤的,或者有其他地方阻止了回覆。 – nos

+0

我正在考慮這種可能性,但是當使用同一個程序向遠程計算機發送ICMP請求時,我可以看到遠程計算機的答覆表單。只有當程序用於向本地接口發送請求時,回覆纔會丟失。 – user2975098

回答

0

RFC 792定義的ICMP消息的特殊條件:

  • 否ICMP錯誤消息響應於ICMP錯誤消息發送到避免無限重複。

  • 對於零碎的IP數據報,ICMP消息僅針對分片零(第一個片段)上的錯誤發送。

  • ICMP錯誤消息永遠不會發送以響應發往廣播或多播地址的數據報。

  • ICMP錯誤消息從不響應作爲鏈路層廣播發送的數據報而發送。

  • ICMP錯誤消息從不響應發送到一個數據報的源地址不表示一個唯一的主機(源地址 不能爲零,環回地址,廣播地址或組播 地址)。

  • ICMP錯誤消息不會響應任何類型的IGMP消息發送。當接收到一個未知類型的ICMP消息時,必須丟棄它,並且默認爲 。

路由器將幾乎總是產生ICMP消息,但是當它涉及到一個目標主機,產生ICMP消息的數量與實現有關。

相關問題