Linux
ping 本地網路上不存在的主機時介面上的 tcpdump
我已經在伺服器上靜態配置了介面的 IP 地址:
ip addr add 10.40.0.6/16 broadcast 10.40.255.255 dev eth1
如果我嘗試 ping 網路上的一台機器(例如,10.40.0.1),它會失敗並顯示“無法訪問目標主機”。
當 ping 執行時,如果我執行以下操作,我根本看不到任何活動
tcpdump -i eth1 icmp
但是,如果我改為監聽環回介面:
tcpdump -i lo icmp
然後我看到類似的東西:
16:02:57.369632 IP 10.40.0.6 > 10.40.0.6: ICMP host 10.40.0.1 unreachable, length 92
我的問題是:為什麼 ICMP 數據包不顯示為通過 eth1 介面發出?
編輯:
# ip r ls 10.40.0.0/16 dev eth1 proto kernel scope link src 10.40.0.6
如果你 ping 一個不存在的主機,那麼 ARP 廣播就會失敗。Tcpdump 永遠不會看到 icmp,因為 eth1 不會在沒有第 2 層目標的情況下發送單播 IP 數據包。
試試這個:
tcpdump -i eth1 arp
您應該看到 ARP 解析失敗。