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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是支持向量机(Support vector machine)和其原理

作为机器学习的基础算法&#xff0c;SVM被反复提及&#xff0c;西瓜书、wiki都能查到详细介绍&#xff0c;但是总是觉得还差那么点&#xff0c;于是决定自己总结一下。 一、什么是SVM&#xff1f; 1、解决什么问题&#xff1f; SVM&#xff0c;最原始的版本是用于最简单的线…

蓝桥杯备赛第五篇(动态规划)

1.数位dp public class Main {static long[] limit;static int length;static long[][] dp;public static long dfs(int pos, int pre, boolean flag, boolean lead) {if (pos length) return 1;if (!flag && !lead && dp[pos][pre] ! -1) return dp[pos][pr…

总结 HashTable, HashMap, ConcurrentHashMap 之间的区别

1.多线程环境使用哈希表 HashMap 不行,线程不安全 更靠谱的,Hashtable,在关键方法上加了synchronized 后来标准库又引入了一个更好的解决方案;ConcurrentHashMap 2.HashMap 首先HashMap本身线程不安全其次HashMap的key值可以为空&#xff08;当key为空时&#xff0c;哈希会…

【Java数据结构】——五道算法题让你灵活运用Map和Set

目录 一.只出现一次的数字 二.宝石与石头 三.旧键盘 四.给定一个数组&#xff0c;统计每个元素出现的次数 五.前K个高频单词 一.只出现一次的数字 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a;我们将nums中每个元素都存入到set中…

C/C++嵌入式开发环境搭建,Qt交叉编译,cmake交叉编译,clion/vscode远程开发

目录 交叉编译简介cmake 交叉编译clion 交叉编译vscode 远程嵌入式开发Qt交叉编译1.安装交叉编译工具2.交叉编译qt库3.将交叉编译的Qt库复制到板子上4.安装和配置 Qt Creator&#xff0c;支持交叉编译5.QT嵌入式开发6.QT嵌入式开发报错解决QIconvCodec::convertToUnicode: usin…

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号&#xff1a; FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接&#xff1a;https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码&#xff1a;0d46 原厂系统自带所有驱动、…

TypeScript中 “ <> “ 语法 和 “ : “ 怎么使用

在 TypeScript 中&#xff0c;尖括号语法(<Type>)和as关键字(value as Type)都是用于类型断言&#xff0c;而冒号(:)用于类型注解。这三种语法在不同的场景下使用&#xff1a; 尖括号语法和as关键字&#xff1a; 尖括号语法(<Type>value)&#xff1a; 这种语法在…

[LeetBook]【学习日记】链表反转

来源于「Krahets」的《图解算法数据结构》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 链表反转的递归要点 递归终止条件为当前节点为空&#xff0c;表明遍历到了链表尾部递归函数传入参数为当前节点的下一个节点按照是否重新开辟存储空间分类下面只写…

python自动化学习--3.8python操作EXCEL文件python日志收集处理

1、Excel文件处理 安装 openpxl 第三方库 openpxl 模块三大组件: 1、工作簿 &#xff08;包含多个sheet工作表&#xff09; 2、工作表 &#xff08;某个数据包含在某个工作表&#xff09; 3、单元格 1、创建excel工作簿 import openpyxl"""Excel表格的创建…

【简说八股】Spring事务失效可能是哪些原因?

Spring事务介绍 Spring事务是指在Spring框架中对数据库操作进行管理的一种机制&#xff0c;它确保一组数据库操作要么完全执行成功&#xff08;提交&#xff09;&#xff0c;要么完全不执行&#xff08;回滚&#xff09;&#xff0c;从而保持数据一致性和完整性。 Spring框架…

GotoXy控制台光标的位置更新

光标控制解释 控制台的光标更新方法, 用于控制数据输出位置 void gotoXY(int x, int y)//新函数&#xff1a;更新光标 {COORD c;c.X x;c.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); }代码解释 这段代码定义了一个名为 gotoXY 的函数&#xff0c;…

设计模式-装饰者模式应用实践

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许动态地向一个现有的对象添加新的功能&#xff0c;同时不改变其结构。这种模式通过创建一个装饰类来包装原有的类&#xff0c;提供额外的行为。 下面是一个使用 Java 实现装饰者模式…

【Spring Boot】实现全局异常处理

1.定义基础异常接口类 /*** description: 服务接口类* author: MrVK* date: 2021/4/19 21:39*/ public interface BaseErrorInfoInterface {/*** 错误码* return*/String getResultCode();/*** 错误描述* return*/String getResultMsg(); } 2.定义错误处理枚举类 /*** desc…

小伙伴询问AI该怎么学习?本人的一点总结,以思维导图呈现

如有需要思维导图的在后台请留邮箱&#xff0c;相关知识结构目录 部分导图

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样&#xff0c;就看第二个维度的数值&#xff0c;今天才知道&#xff0c;它是只看最后一个维度的数值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

git使用merge命令把dev分支的mian.js文件和src下面的vuex文件夹以及config文件夹单独合并到master分支上

使用 git merge 命令来单独合并特定文件或文件夹到另一个分支通常不是最直接的方法&#xff0c;因为 merge 命令是用来合并两个分支的所有更改的。然而&#xff0c;你可以通过 git cherry-pick 命令或者通过创建临时补丁&#xff08;patch&#xff09;来实现这一点。 下面是一个…

秒杀的时候怎么使用Redis?

商品信息存储&#xff1a;在Redis中存储秒杀商品的库存信息。可以使用Redis的Hash数据类型&#xff0c;将商品ID作为字段&#xff0c;库存数量作为值存储在Hash中。例如&#xff0c;HSET seckill_goods stock_1 100表示商品ID为stock_1的商品库存数量为100。 秒杀订单存储&…

如何使用“Ubuntu 20.04桌面版,安装MariaDB数据库“?win10系统?

1、更新软件包 sudo apt update 2、 安装MariaDB服务器和客户端 sudo apt install mariadb-server mariadb-client 3、 查看MeriaDB是否运行 service mysql status :q"退回命令行状态 4、 设置MariaDB root用户的密码 sudo mysql_secure_installation 5、 MariaD…

斐波那契数列模型----三步问题

面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 1、状态表示&#xff1a; 题目要求&#xff1a;上到n阶台阶&#xff0c;有多少种方法。那么n逐渐简化&#xff0c;上1阶台阶有多少种方法&#xff1b;上2阶台阶有多少种方法……直到上n阶台阶有多少种方法。 …

c++ [[nodiscard]]关键字详解

如果一个函数声明了[[nodiscard]]&#xff0c;则该函数的返回值不能没有承接&#xff0c;如果没有承接&#xff0c;就会编译报warning [[nodiscard]]是c17新特性&#xff0c;但本地用c11标准编译也能编译过&#xff0c;尚不清楚原因&#xff0c;c20加入了warning后的额外文字描…