天天看點

Linux下網卡的混雜模式淺談

Linux下網卡的混雜模式淺談

混雜模式就是接收所有經過網卡的資料包,包括不是發給本機的包,即不驗證MAC位址。普通模式下網卡隻接收發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丢棄。

一般來說,混雜模式不會影響網卡的正常工作,多在網絡監聽工具上使用。

網卡具有如下的幾種工作模式:

1) 廣播模式(Broad Cast Model):它的實體位址(MAC)位址是 0Xffffff 的幀為廣播幀,工作在廣播模式的網卡接收廣播幀。

2)多點傳播傳送(MultiCast Model):多點傳播傳送位址作為目的實體位址的幀可以被組内的其它主機同時接收,而組外主機卻接收不到。但是,如果将網卡設定為多點傳播傳送模式,它可以接收所有的多點傳播傳送幀,而不論它是不是組内成員。

3)直接模式(Direct Model):工作在直接模式下的網卡隻接收目位址是自己 Mac位址的幀。

4)混雜模式(Promiscuous Model):工作在混雜模式下的網卡接收所有的流過網卡的幀,信包捕獲程式就是在這種模式下運作的。

網卡的預設工作模式包含廣播模式和直接模式,即它隻接收廣播幀和發給自己的幀。如果采用混雜模式,一個站點的網卡将接受同一網絡内所有站點所發送的資料包這樣就可以到達對于網絡資訊監視捕獲的目的。

Linux下設定把網卡設定成混雜模式的指令也很簡單

ifconfig eth0 promisc

Linux下網卡的混雜模式淺談

取消混雜模式

ifconfig eth0 -promisc

Linux下網卡的混雜模式淺談

小知識:使用tcpdump抓包時網卡會進入混雜模式,可以在/var/log/messages裡看到

如下圖,開啟tcpdump抓包後,在新視窗克隆會話tail -f /var/log/messages可以看到系統日志

kernel: device eth0 entered promiscuous mode

Linux下網卡的混雜模式淺談

實際上網卡是否處于混雜模式并不能根據ifconfig檢視是否有PROMISC字段來判斷,

例如開啟tcpdump抓包,這時ifconfig檢視并沒有PROMISC字段

實際上,網卡是否處于PROMISC模式,ifconfig并不是最直接的判斷依據,換句話說就是ifconfig能看到PROMISC标記表示一定處于混雜模式,但處于混雜模式并不一定能看到PROMISC标記。核心判斷網卡是否處于混雜模式是看/sys/class/net/eth0/flags的值,如果置位了0x100,則處于混雜模式

Linux下網卡的混雜模式淺談

[root@CentOS_DIY ~]# cat /usr/include/linux/if.h | grep -i promisc

#define IFF_PROMISC 0x100 /* receive all packets */

Linux下網卡的混雜模式淺談

google查到的相關解釋

Linux下網卡的混雜模式淺談