Linux 网络接口的混杂模式(Promiscuous mode)认知

举报
山河已无恙 发表于 2024/03/19 01:56:06 2024/03/19
【摘要】 写在前面博文内容为 混杂模式的简单认知理解不足小伙伴帮忙指正 认定一件事,即使拿十分力气都无法完成,也要拿出十二分力气去努力。 ---《剑来》网络接口的混杂模式混杂模式(Promiscuous mode),简称 Promisc mode,俗称监听模式。混杂模式通常被网络管理员用来诊断网络问题,但也会被无认证的、想偷听网络通信的人利用。根据维基百科的定义,混杂模式是指一个网卡会把它接收的所...

写在前面


  • 博文内容为 混杂模式的简单认知
  • 理解不足小伙伴帮忙指正

认定一件事,即使拿十分力气都无法完成,也要拿出十二分力气去努力。 ---《剑来》


网络接口的混杂模式

混杂模式(Promiscuous mode),简称 Promisc mode,俗称监听模式

混杂模式通常被网络管理员用来诊断网络问题,但也会被无认证的、想偷听网络通信的人利用。根据维基百科的定义,混杂模式是指一个网卡会把它接收的所有网络流量都交给CPU,而不是只把它想转交的部分交给CPU

IEEE 802 定的网络规范中,每个网络帧都有一个目的MAC地址。在非混杂模式下,网卡只会接收目的MAC地址是它自己的单播帧,以及多播及广播帧;在混杂模式下,网卡会接收经过它的所有帧!

使用ifconfig或者netstat-i命令查看一个网卡是否开启了混杂模式,当输出包含 PROMISC 时,表明该网络接口处于混杂模式

liruilonger@cloudshell:~$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255
        ether d2:54:95:f4:14:99  txqueuelen 0  (Ethernet)
        RX packets 21025  bytes 162169296 (154.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14137  bytes 20181898 (19.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
liruilonger@cloudshell:~$ 

netstat -i 命名查看

liruilonger@cloudshell:~$ netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0   1460        0      0      0 0             0      0      0      0 BMU
eth0      1500    43104      0      0 0         31581      0      0      0 BMRU
lo       65536    28020      0      0 0         28020      0      0      0 LRU
tap0      1500        0      0      0 0             0      0      0      0 BMU
tap1      1500        0      0      0 0             0      0      0      0 BMU

启用网卡的混杂模式,可以使用下面这条命令:ifconfig eth0 promisc

liruilonger@cloudshell:~$ sudo ifconfig eth0 promisc
liruilonger@cloudshell:~$ ifconfig eth0
eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255
        ether d2:54:95:f4:14:99  txqueuelen 0  (Ethernet)
        RX packets 21123  bytes 162180935 (154.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14208  bytes 20193050 (19.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到多了一个 PROMISC 状态

使网卡退出混杂模式,可以使用下面这条命令:ifconfig eth0 -promisc

liruilonger@cloudshell:~$ sudo ifconfig eth0 -promisc
liruilonger@cloudshell:~$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255
        ether d2:54:95:f4:14:99  txqueuelen 0  (Ethernet)
        RX packets 23908  bytes 162504555 (154.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16406  bytes 20537953 (19.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

liruilonger@cloudshell:~$ netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0   1460        0      0      0 0             0      0      0      0 BMU
eth0      1500    43352      0      0 0         31769      0      0      0 BMPRU
lo       65536    28233      0      0 0         28233      0      0      0 LRU
tap0      1500        0      0      0 0             0      0      0      0 BMU
tap1      1500        0      0      0 0             0      0      0      0 BMU
liruilonger@cloudshell:~$ 

将网络设备加入 Linux bridge 后,会自动进入混杂模式: 把一个 veth 虚拟设备添加到网桥

liruilonger@cloudshell:~$ sudo ip link add veth5 type veth
liruilonger@cloudshell:~$ sudo brctl addbr br5
liruilonger@cloudshell:~$ sudo brctl addif br5 veth5
liruilonger@cloudshell:~$ sudo dmesg | grep promiscuous
[ 2100.855052] device veth5 entered promiscuous mode
liruilonger@cloudshell:~$ 

如上所示,veth5 设备加入Linux bridge后,可以通过查看内核日志看到 veth5 自动进入混杂模式,而且无法退出,直到将 veth5Linux bridge 中移除。即使手动将网卡设置为非混杂模式,实际上还是没有退出混杂模

liruilonger@cloudshell:~$ sudo brctl delif br5 veth5 
liruilonger@cloudshell:~$ sudo dmesg | grep promiscuous
[ 2100.855052] device veth5 entered promiscuous mode
[ 2868.672747] device veth5 left promiscuous mode
liruilonger@cloudshell:~$ 

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知 :)


《 Kubernetes 网络权威指南:基础、原理与实践》


© 2018-2024 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。