Welcome 微信登录

首页 / 操作系统 / Linux / 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函数此处修改最为关键,主要有下面的逻辑:
  1. ...  
  2. if (skb) {  
  3.     if (dst) {  
  4.         if (!dst->dst->flags & M) {  
  5.             struct net_bridge_port *p;  
  6.             list_for_each_entry(p, &br->port_list, list) {  
  7.                 if (p->flags & M) {  
  8.                     struct sk_buff *skb3 = skb_clone(skb, GFP_ATOMIC);  
  9.                     br_forward(dst->dst, skb3);  
  10.                 }  
  11.             }      
  12.         }  
  13.         br_forward(dst->dst, skb);  
  14.     } else  
  15.         br_flood_forward(br, skb);  
  16. }  
  17. ...
以上0,1,2基本就可以实现镜像端口了,方便了网络抓包和网络调试。对于用户态的brctl也需要修改,很简单,只需要能在addif时传入一个M标志即可以。update manager indicator(更新管理指示器)显示面板上的更新数量Linux下scp命令详解相关资讯      Linux资料 
  • Linux触发连锁反应,惠及全球  (04/25/2012 05:49:29)
  • 【Linux】pam常用模块及意义  (04/18/2012 09:42:50)
  • 【Linux】配置Apache的别名的pam认  (04/18/2012 09:40:21)
  • 如何挂载只读的Linux文件系统  (04/19/2012 06:10:57)
  • 【Linux】ftp服务的ftpusers黑名单  (04/18/2012 09:42:02)
  • Linux 0.11 在Ubuntu-11和gcc-4.6.  (04/14/2012 11:06:44)
本文评论 查看全部评论 (0)
表情: 姓名: 字数