You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Hyper-V环境下Linux虚拟机抓取物理网络全量流量的配置方案咨询

Hyper-V环境下Linux虚拟机抓取物理网络全量流量的配置方案咨询

嗨,我之前也踩过Hyper-V这个坑!默认情况下Hyper-V的外部交换机是做了流量隔离的,所以你的Linux VM只能抓到和自己相关的包(还有广播包),想要抓取整个物理网络的流量,得调整几个关键设置,我给你分享几个可行的方案:

方案一:开启Hyper-V交换机与VM网卡的混杂模式

Hyper-V的混杂模式不能直接在图形界面设置,得用PowerShell操作,步骤如下:

  1. 打开管理员权限的PowerShell,先找到你的外部交换机名称:
    Get-VMSwitch
    
    从输出里找到你给VM用的外部交换机(比如名字是"External Switch")
  2. 开启交换机的混杂模式允许:
    Set-VMSwitch -Name "External Switch" -AllowPromiscuous $true
    
  3. 给你的Linux VM网卡开启混杂模式权限:
    Set-VMNetworkAdapter -VMName "你的Linux虚拟机名称" -AllowPromiscuous $true
    
  4. 最后登录Linux VM,给本地网卡开启混杂模式:
    # 先查看网卡名称,比如eth0或者ens33
    ip addr
    # 开启混杂模式
    sudo ip link set eth0 promisc on
    

方案二:开启物理网卡的混杂模式(部分场景需要)

有些物理网卡默认会限制混杂模式,这时候得在Windows主机上调整:

  • 打开设备管理器,找到你的物理网卡(就是绑定Hyper-V外部交换机的那块)
  • 右键点击网卡 → 属性 → 切换到「高级」标签页
  • 找到「混杂模式」(英文是Promiscuous Mode)选项,设置为「启用」
  • 注:不是所有网卡都支持这个选项,得看网卡驱动是否兼容

方案三:使用Hyper-V端口镜像(更稳定的专业抓包方案)

如果混杂模式不好使,端口镜像是更可靠的选择,它能把指定源的所有流量转发到你的VM网卡:

  1. 先确定两个关键对象:
    • 源:你要抓取流量的物理网卡(或者其他VM的网卡)
    • 目标:你的Linux VM的网卡
  2. 用PowerShell配置目标VM网卡为镜像接收端:
    Set-VMNetworkAdapter -VMName "你的Linux虚拟机名称" -Name "VM网卡名称" -PortMirroring Destination
    
  3. 配置物理网卡为镜像源(这里以主机的物理网卡为例,名字用Get-NetAdapter查看):
    Set-VMNetworkAdapter -ManagementOS -Name "物理网卡名称" -PortMirroring Source
    
    配置完成后,你的Linux VM就能收到物理网卡的所有流量,直接用sudo tcpdump抓包即可

几个注意事项

  • 开启混杂模式或端口镜像后,可能会小幅影响网络性能,抓包完成后记得恢复设置(把参数改回$false或者「禁用」)
  • 部分企业级安全软件或防火墙可能会拦截混杂模式的流量,需要临时放行
  • 一定要用sudo运行tcpdump,普通用户权限抓不到全量流量

备注:内容来源于stack exchange,提问作者Shmoopy

火山引擎 最新活动