linux網卡混雜
『壹』 linux 查看 網卡介面是否為混雜模式
ifconfig 可以看到網卡是否混雜模式,如:
ifconfig eth0 看是否有「PROMISC」標志
ifconfig eth0 promisc #設置混雜模式
ifconfig eth0 -promisc #取消混雜模式
『貳』 混雜模式的linux下通過C設置混雜模式(以eth0舉例)
char *eth_name = eth0; //對網卡eth0進行混雜設置
struct ifreq ethreq; //網路介面結構
strncpy(ethreq.ifr_name, eth_name, IFNAMSIZ); //指定網卡名稱if(-1 == ioctl(sock_raw_fd, SIOCGIFFLAGS, ðreq)) //獲取網路介面{perror(ioctl);close(sock_raw_fd);exit(-1);}
/*此處用 | 是因為必須在保留原來設置的情況下,在標志位中加入「混雜」方式*/ ethreq.ifr_flags |= IFF_PROMISC;if(-1 == ioctl(sock_raw_fd, SIOCSIFFLAGS, ðreq)) //將標志位設置寫入{perror(ioctl);close(sock_raw_fd);exit(-1);}
『叄』 linux 下怎樣查看網卡是否支持混雜模式
ifconfig 可以看到網卡是否混雜模式,如:
ifconfig eth0 看是否有「PROMISC」標志
ifconfig eth0 promisc #設置混雜模式
ifconfig eth0 -promisc #取消混雜模式
『肆』 linux網卡混雜模式有ip嗎
使用ifconfig命令可查看當前網卡是否設置為混雜模式
[zhaihf@localhost~]$ ifconfig
eth0 Linkencap:Ethernet HWaddr 00:16:31:FF:A6:2E
inet addr:192.168.9.1 Bcast:192.168.9.255 Mask:255.255.255.0
UPBROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Memory:98420000-98440000
eth1 Link encap:Ethernet HWaddr 00:16:31:FF:A6:2F
inet addr:192.168.8.48 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: fe80::216:31ff:feff:a61f/64 Scope:Link
UPBROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:28011022 errors:0 dropped:0 overruns:0 frame:0
TX packets:18408510 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31733322503 (29.5 GiB) TX bytes:21092798216 (19.6GiB)
Memory:98400000-98420000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8873 errors:0 dropped:0 overruns:0 frame:0
TX packets:8873 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3140421 (2.9 MiB) TX bytes:3140421 (2.9 MiB)
usb0 Link encap:Ethernet HWaddr 5E:F3:FC:E1:D2:19
inet addr:169.254.95.120 Bcast:169.254.95.255 Mask:255.255.255.0
inet6 addr: fe80::5cf3:fcff:fee1:d217/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXpackets:220031 errors:0 dropped:0 overruns:0 frame:0
TX packets:110230 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14862206 (14.1 MiB) TX bytes:5251125 (5.0 MiB)
其中UPBROADCAST RUNNING PROMISC MULTICAST的PROMISC說明網卡eth1已經設置成混雜模式。
欄位含義說明:
eth0/eth1: 分別表示第一塊網卡和第二塊網卡;
lo: 表示回環測試介面,注意,這個虛擬的interface一定要存在!
usb0: 表示USB介面的網卡;
Linkencap: 表示位於OSI物理層的名稱,即連接類型Ethernet(乙太網)
HWaddr: 表示網卡的硬體地址,即MAC地址
inetaddr: 表示網卡IP;
Bcast: 表示廣播(broadcast ) 的地址;
Mask: 表示子網掩碼;
UP: 表示網卡開啟狀態;
BROADCAST: 表示支持廣播;
MULTICAST: 表示網卡混雜模式;
RUNNING: 表示網卡的網線被接上;
MULTICAST: 表示支持組播;
MTU: 表示MaximumTrasmission Unit 最大傳輸單元(位元組),即此介面一次所能傳輸的最大封包;
Metric: 表示路由度量值,預設值是0;
RX: 表示網路由激活到目前為止接收的數據包;
TX: 表示網路由激活到目前為止發送的數據包;
collisions: 表示網路信號沖突的情況;
txqueuelen: 表示傳輸緩沖區長度大小;
Memory: 表示佔用內存范圍。
『伍』 linux程序怎麼設置無線網卡的混雜模式
linux程序可以通過以下步驟設置無線網卡的混雜模式
:
1、打開「我的電腦」,然後右鍵「屬性」;
2、點擊「硬體」,再點擊「設備管理器」,打開設備管理器後,雙擊「網路適配器」;
3、找到無線網卡突變,右擊「屬性」,再高級,在右邊的值選結尾是FULL
DUPLEX,此時linux程序已成功設置成功無線網卡的混雜模式。
『陸』 有沒有可能在linux內核和網卡驅動中做修改簡單的實現網卡的混雜模式下抓包,並且把包給存入一個文件中
設置混雜模式什麼的,這些我只曉得可以做sniffer。不過具體我沒做過,所以過程我不太清楚,這個部分我沒法說。
你說創建文件的話,直接從內核創建以及讀寫文件大概會比較麻煩吧。可以使用一個用戶態程序,然後你的內核模塊中可以注冊一個可讀寫的char設備,用戶程序讀寫這個內核模塊的/dev/下面對應的char設備。可以讀這個設備文件獲得內核的數據,寫這個文件進行一些設置,比如網卡模式,抓包過濾選項等等。
當然,你也可以去找找源碼裡面文件系統那部分,open、read、write調用等是如何根據用戶的操作來創建並且實際讀寫文件的,你可以直接引用這些函數來搞定文件讀寫。這樣的話,因為沒有用戶程序的參與,從抓數據到寫文件都是內核搞定的化,不好跟你的內核模塊交互,沒法控制了...這樣做的好處是可以直接修改哪些最終提交數據的函數,提交之前拷貝一份數據就OK了。
要是想找點靠譜的答案,還是盡量去些論壇問吧...
我也在看內核,ldd3還好多沒看...
『柒』 linux下網卡混雜模式如何設置
那就每次開機登錄時自動修改唄~~~
這個修改重啟後會丟失,因此你要自己去修改~~修改mac地址也是重啟就失效了
echo "ifconfig eth0 promisc " >>/root/.bash_profile
或者
echo "ifconfig eth0 promisc " >>/root/.bashrc
/root/.bashrc是進入root時自動會執行的一個腳本~~
『捌』 linux 下怎麼把網卡設置成混雜模式
你還能想到libpcap?厲害~
你想做
嗅探器
還不簡單,直接寫原始
套接字
,抓所有包不就完了。
你理解的
混雜模式
是什麼?所有收到的包都不丟棄?建議你看看原始套接字~
『玖』 linux下如何把網卡設為混雜模式
將eth0設置成混雜模式
ifconfig eth0 promisc
取消混雜
ifconfig eth0 -promisc
在交換環境下面設為混雜模式網卡也收不到所有的包,因為交換機分割了沖突域。只能收到廣播包。
附:
網卡一般有四種模式:
◆廣播方式:該模式下的網卡能夠接收網路中的廣播信息。
◆組播方式:設置在該模式下的網卡能夠接收組播數據。
◆直接方式:在這種模式下,只有目的網卡才能接收該數據。
◆混雜模式:在這種模式下的網卡能夠接收一切通過它的數據,而不管該數據是否
是傳給它的。
『拾』 Linux c 如何才能在網卡處於混雜模式下不接收自己發出的數據
網卡驅動里有xx_rx_filter的函數,可以通過解析幀格式,添加代碼判斷,
if(這個幀的發送地址 == 自己的地址)
{
return;
}
這樣這個幀在混雜模式下就不會去接受了
還有的方法是改配置命令,去配置,配置命令手冊上應該有
記得有個是:
./iwpriv delmac XX.XX.XX.XX.XX.XX
類似的去翻翻手冊