Linux Bridge的镜像端口实现
来源:互联网 发布:华3 网络行为管理 编辑:程序博客网 时间:2024/05/30 05:22
很多种交换机上都可以配置镜像端口,也就是说所有的流量都要顺便发一份到镜像端口,一般都是在镜像端口上接一个主机,上面开启抓包或者审计程序,保证时刻监控网络流量。镜像端口解决了学习型交换机无法抓包的问题。
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函数
此处修改最为关键,主要有下面的逻辑:
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标志即可以。- Linux Bridge的镜像端口实现
- Linux如何实现镜像端口
- Linux如何实现镜像端口
- Linux如何实现镜像端口
- Linux下的虚拟Bridge实现
- Linux下的虚拟Bridge实现
- Linux下的虚拟Bridge实现
- Linux下的虚拟Bridge实现
- Linux下的虚拟Bridge实现 ###############3
- Linux下的虚拟Bridge实现
- Linux下的虚拟Bridge实现
- Linux Bridge实现
- 交换机端口镜像的设置
- 各种交换机的端口镜像配置
- 端口镜像详解
- 端口镜像详解
- 端口镜像
- 交换机端口镜像
- 第五周任务3
- OpenCV學習心得(4) -- 色彩空間的轉
- 研究SLAM网站和有用站点-sourcecode+测试数据
- linux内存分配及内存管理
- 如何让iframe的高度自适应父窗口的高度
- Linux Bridge的镜像端口实现
- 【Android Training - Performance】提高显示布局文件的性能[Lesson 4 - 使用ViewHolder提升ListView的性能]
- Eclipse颜色设置
- STP是一个需要众力协作的协议
- poj1723
- PHP中的ob_start用法详解
- C#获取系统版本信息
- win7更改磁盘驱动号
- Eclipse插件:Eclipse Color Theme