You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mininet中用Wireshark捕获所有主机流量至单个文件?

如何在Mininet中用Wireshark捕获所有主机的流量到单个文件

当然可行!你之前遇到的问题是因为直接在mininet>下执行sh wireshark时,要么没选对要捕获的接口,要么没有配置流量规则来集中所有主机的流量。下面给你两种可靠的解决方法:

方法一:利用Open vSwitch的端口镜像功能(推荐)

Mininet默认用Open vSwitch(OVS)作为交换机,我们可以通过OVS的流量镜像功能,把所有主机端口的双向流量都转发到一个专门的镜像端口,然后在这个端口上抓包,就能一次性获取所有主机的流量:

  1. 启动目标Mininet拓扑
    比如你有3台主机的单交换机拓扑,执行:

    sudo mn --topo single,3
    
  2. 确认主机与交换机的端口映射
    先搞清楚每台主机对应的交换机端口,执行:

    mininet> sh ovs-ofctl show s1
    

    输出里会看到类似port 1: s1-eth1(对应h1-eth0)、port 2: s1-eth2(对应h2-eth0)、port 3: s1-eth3(对应h3-eth0)的信息,记下这些端口名。

  3. 添加专门的镜像端口
    给交换机s1新增一个用于镜像流量的虚拟端口:

    mininet> sh ovs-vsctl add-port s1 mirror0
    
  4. 配置流量镜像规则
    把所有主机端口的双向流量(包括主机发送和接收的)都镜像到mirror0端口:

    mininet> sh ovs-vsctl -- set Bridge s1 mirrors=@m \
    -- --id=@p1 get Port s1-eth1 \
    -- --id=@p2 get Port s1-eth2 \
    -- --id=@p3 get Port s1-eth3 \
    -- --id=@m create Mirror name=all-traffic \
    select-src-port=@p1,@p2,@p3 \
    select-dst-port=@p1,@p2,@p3 \
    output-port=mirror0
    
  5. 用Wireshark捕获镜像端口流量
    在mininet>下执行sh wireshark &后台启动Wireshark,在接口列表中选择mirror0开始捕获,就能得到所有3台主机的完整流量,最后保存为单个文件即可。

方法二:直接捕获交换机网桥接口

如果你的拓扑是所有主机都连接到同一个OVS交换机(比如单交换机拓扑),交换机对应的网桥接口本身就会流经所有主机的流量,直接抓这个接口更简单:

  1. 启动Mininet拓扑后,执行mininet> sh wireshark &启动Wireshark。
  2. 在Wireshark的接口列表中找到对应交换机的网桥接口(比如名为s1的接口),选择它开始捕获。
  3. 这样就能抓到所有主机之间的交互流量,最终保存为单个文件即可。

注意:如果你的拓扑包含多个交换机,这种方法只能捕获单个交换机上的流量,这时就需要用方法一给每个交换机配置镜像,再汇总捕获。

内容的提问来源于stack exchange,提问作者Haniku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:10:19