Linux Bridge的镜像端口实现

简介:
很多种交换机上都可以配置镜像端口,也就是说所有的流量都要顺便发一份到镜像端口,一般都是在镜像端口上接一个主机,上面开启抓包或者审计程序,保证时刻监控网络流量。镜像端口解决了学习型交换机无法抓包的问题。
    Linux实现了一个软件版本的Bridge,也正是一个交换机,只是可能端口少些,通过brctl  setageingtime <brname> <time>将time设置成0也可以使该软交换机退化成一个Hub。然而我没有在brctl的man手册中找到如何来配置镜像端口的任何信息,于是自己实现了一个。我的实现目前只测试了支持一个镜像端口的情形,当然很容易扩展成支持任意多个。总的来讲,对代码的修改有两处:
0.对基础数据结构的修改
net_bridge_port结构体中增加一个flag,设为M,表示该端口为镜像端口;
1.br_add_if函数增加一个参数
该新增参数表示是否为镜像端口,若是,则设置新增net_bridge_port的M标志
2.修改br_handle_frame_finish函数
此处修改最为关键,主要有下面的逻辑:
... if (skb) {     if (dst) {         if (!dst->dst->flags & M) {             struct net_bridge_port *p;             list_for_each_entry(p, &br->port_list, list) {                 if (p->flags & M) {                     struct sk_buff *skb3 = skb_clone(skb, GFP_ATOMIC);                     br_forward(dst->dst, skb3);                 }             }             }         br_forward(dst->dst, skb);     } else         br_flood_forward(br, skb); } ...

以上0,1,2基本就可以实现镜像端口了,方便了网络抓包和网络调试。对于用户态的brctl也需要修改,很简单,只需要能在addif时传入一个M标志即可以。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1268986

相关文章
|
2月前
|
运维 监控 安全
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
708 2
|
1月前
|
安全 Linux 网络安全
Linux 开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
在 Linux 系统中,端口管理至关重要。本文介绍了如何使用 `netstat`、`lsof` 和 `nmap` 等工具查找开放端口,并通过关闭相关服务、修改防火墙规则或禁用网络接口来关闭这些端口,以提高系统安全性。注意不要随意关闭重要端口,谨慎操作并备份数据。
36 3
|
2月前
|
监控 安全 网络虚拟化
|
2月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
74 1
|
2月前
|
网络协议 安全 Linux
阿里云国际上如何检查 Linux 上正在使用哪些端口
阿里云国际上如何检查 Linux 上正在使用哪些端口
|
2月前
|
运维 监控 安全
|
2月前
|
Linux
linux开机挂载镜像
【10月更文挑战第1天】在 Linux 系统中,开机挂载镜像通常涉及几个关键步骤,包括创建挂载点、编辑配置文件以及重新加载配置
96 0
|
3月前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
71 15
|
2月前
|
资源调度 JavaScript 前端开发
yarn源|yarn 国内镜像+linux删除大量文件
yarn源|yarn 国内镜像yarn源|yarn 国内镜像+linux删除大量文件
561 0
下一篇
DataWorks