网站首页 > 技术教程 正文
混杂模式介绍:
混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。
一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。
网卡的几种模式:
网卡具有如下的几种工作模式:
1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。
2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。
设置与取消网卡混杂模式:
Linux下设置把网卡设置成混杂模式的命令也很简单。
设置成混杂模式:[root@master ~]# ifconfig enp0s3f0 promisc 注意:此时flag=4355
取消混杂模式:[root@master ~]# ifconfig enp0s3f0 -promisc 注意:此时flag=4099
注意:设置成混杂模式flag=4355,取消混杂模式f
lag=4099
dmesg或/var/log/kern.log
Sep 8 15:24:18 master kernel: device enp0s3f0 entered promiscuous mode
Sep 8 15:25:05 master kernel: device enp0s3f0 left promiscuous mode
小知识:使用tcpdump抓包时网卡会进入混杂模式,可以在/var/log/messages里看到
如下图,开启tcpdump抓包后,在新窗口克隆会话tail -f /var/log/messages可以看到系统日志
kernel: device eth0 entered promiscuous mode
判断网卡是否混杂模式
实际上网卡是否处于混杂模式并不能根据ifconfig查看是否有PROMISC字段来判断,
例如开启tcpdump抓包,这时ifconfig查看并没有PROMISC字段
实际上,网卡是否处于PROMISC模式,ifconfig并不是最直接的判断依据。原因:有PROMISC一定是混杂模式,没有时也可能是混杂模式。
内核判断网卡是否处于混杂模式是看/sys/class/net/eth0/flags的值,如果置位了0x100,则处于混杂模式
方法一:cat /sys/class/net/enp0s3f0/flags
非混杂模式是0x1003
[root@master ~]# cat /sys/class/net/enp0s3f0/flags
0x1003
混杂模式是0x1103
[root@master ~]# ifconfig enp0s3f0 promisc
[root@master ~]# cat /sys/class/net/enp0s3f0/flags
0x1103
方法二:cat /usr/include/linux/if.h | grep -i promisc
非混杂模式:
[root@master ~]# cat /usr/include/linux/if.h | grep -i promisc
* @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
IFF_PROMISC = 1<<8, /* sysfs */
#define IFF_PROMISC IFF_PROMISC
混杂模式:
[root@master ~]# ifconfig enp0s3f0 promisc
[root@master ~]# cat /usr/include/linux/if.h | grep -i promisc
* @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
IFF_PROMISC = 1<<8, /* sysfs */
#define IFF_PROMISC IFF_PROMISC
好像没有区别???
google查到的相关解释
内核代码(4.19):
定义在
linux-4.19.167/include/uapi/linux/if.h中,
* @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
enum net_device_flags {
/* for compatibility with glibc net/if.h */
#if
__UAPI_DEF_IF_NET_DEVICE_FLAGS
...
IFF_PROMISC = 1<<8, /* sysfs */
...
#endif /*
__UAPI_DEF_IF_NET_DEVICE_FLAGS */
...
};
/* for compatibility with glibc net/if.h */
#if
__UAPI_DEF_IF_NET_DEVICE_FLAGS
...
#define IFF_PROMISC IFF_PROMISC
...
#endif /*
__UAPI_DEF_IF_NET_DEVICE_FLAGS */
猜你喜欢
- 2025-06-24 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 2025-06-24 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- 2025-06-24 Linux 网络命令知多少(linux 网络 命令)
- 2025-06-24 Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 2025-06-24 linux操作知识,CentOS 7对虚拟网卡virbr0的处理
- 2025-06-24 VMware Kali无线WIFI密码破解(kali vmware wifi)
- 2025-06-24 Linux系统常用命令总结笔记8---网络管理和状态查看
- 2025-06-24 在shell中重启网卡(重启网卡的命令linux7)
- 2025-06-24 Linux route命令详解和使用示例(查看和操作IP路由表)
- 2025-06-24 记录使用Kali Linux(rtl8812au网卡)暴力破解wifi密码详细步骤
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)