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

2024-03-03 14:28

本文主要是介绍Linux 网络接口的混杂模式(Promiscuous 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 1500inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255ether 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 0TX 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 1500inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255ether 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 0TX 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 1500inet 10.88.0.3  netmask 255.255.0.0  broadcast 10.88.255.255ether 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 0TX packets 16406  bytes 20537953 (19.5 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0liruilonger@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)

这篇关于Linux 网络接口的混杂模式(Promiscuous mode)认知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769893

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE