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
类似的去翻翻手册