Linux 網絡接口混雜模式(Promiscuous mode)認知
網絡接口的混雜模式
混雜模式(Promiscuous mode),簡稱 Promisc mode,俗稱監聽模式。混雜模式通常被網絡管理員用來診斷網絡問題,但也會被無認證的、想偷聽網絡通信的人利用。混雜模式是指一個網卡會把它接收的所有網絡流量都交給CPU,而不是只把它想轉交的部分交給CPU。
使用ifconfig 或者 netstat-i命令查看一個網卡是否開啟了混雜模式,當輸出包含 PROMISC 時,表明該網絡接口處于混雜模式。
啟用網卡的混雜模式,可以使用下面這條命令:ifconfig eth0 promisc
# ifconfig eth0 promisc
# ifconfig eth0
eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
可以看到多了一個 PROMISC 狀態
使網卡退出混雜模式,可以使用下面這條命令:ifconfig eth0 -promisc
# ifconfig eth0 -promisc
# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 43352 0 0 0 31769 0 0 0 BMPRU
將網絡設備加入 Linux bridge 后,會自動進入混雜模式: 把一個 veth 虛擬設備添加到網橋
# ip link add veth5 type veth
# brctl addbr br5
# brctl addif br5 veth5
# dmesg | grep promiscuous
device veth5 entered promiscuous mode
如上所示,veth5 設備加入Linux bridge后,可以通過查看內核日志看到 veth5 自動進入混雜模式,而且無法退出,直到將 veth5 從 Linux bridge 中移除。即使手動將網卡設置為非混雜模式,實際上還是沒有退出混雜模。
# ip link set eth1 promisc on
The flag will be updated to BMPRU. Flag details are as follows:
- B flag is for broadcast
- M flag is for multicast
- P flag is for promisc mode
- R is for running
- U is for up
netstat 輸出的狀態BMPRU包含了狀態P就是混雜模式。