Linux
橋接介面 (virbr) 上的 tcpdump 未收到任何發往其地址之一的數據包
這是介面的配置:
# ifconfig virbr0 virbr0:標誌 = 4355 人 1500 inet 192.168.11.1 網路遮罩 255.255.255.255 廣播 255.255.255.255 乙太 52:54:00:99:e3:0d txqueuelen 0(乙太網) RX 數據包 0 字節 0 (0.0 B) RX 錯誤 0 丟棄 0 溢出 0 幀 0 TX 數據包 0 字節 0 (0.0 B) TX 錯誤 0 丟棄 0 超限 0 載波 0 衝突 0 # ip 連結顯示 virbr0 13: virbr0@NONE: mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT 連結/乙太 52:54:00:99:e3:0d brd ff:ff:ff:ff:ff:ff
我能夠 ping、建立 TCP 連接等到 192.168.11.1,但 tcpdump 報告
0 個數據包被擷取 過濾器接收到 0 個數據包 0 個被核心丟棄的數據包
更新
我發現如果我將地址分配給 veth 介面,將其放在網路命名空間中,然後將 veth 對的另一端附加到 virbr 介面,所有數據包都會顯示在 virbr 介面的 tcpdump 上。然而,原來的問題仍然存在。
tcpdump
通過打開數據包套接字在連結級別進行操作$$ 1 $$. 它位於介面的正下方,因此它攔截來自硬體的入站數據包和來自介面的出站數據包。當您將數據包發送到核心中的該介面時,該數據包已到達其目的地並且不會通過該介面發送出去。對於好奇,這裡是相關程式碼$$ 2 $$. $$ 1 $$ http://man7.org/linux/man-pages/man7/packet.7.html
$$ 2 $$ https://github.com/the-tcpdump-group/libpcap/blob/master/pcap-linux.c#L3281