想在Wireshark里看到虚拟机的网络数据包,核心不是怎么点按钮,而是先把虚拟机的网络模式搞清楚。 桥接模式抓物理网卡,NAT模式抓VMnet8,仅主机模式抓VMnet1,这个对应关系决定你能否成功抓包。
虚拟机网络配置教程:三种模式决定抓包入口
很多朋友在虚拟机里折腾Wireshark,结果打开软件后一片茫然列表里只有宿主机的物理网卡,虚拟机内部的eth0根本看不到,原因很简单:Wireshark运行在宿主机上,它只能看到宿主机的网络接口,而虚拟机的流量必须通过虚拟网卡或物理网卡“透”出来,先理解虚拟机的网络模式,比学任何抓包技巧都重要。
桥接模式:虚拟机像宿主机旁边的一台独立主机
桥接模式下,虚拟机直接连到物理网络,和宿主机共享同一个交换机,从网络上看,虚拟机就像一台真实电脑,有自己的IP、自己的MAC地址,此时Wireshark抓包,直接选宿主机正在使用的物理网卡(以太网”或“WLAN”),就能看到虚拟机的全部流量。
操作路径:在VMware中,打开“虚拟机 → 设置 → 网络适配器”,勾选“桥接模式”,在VirtualBox中,选择“桥接网卡”,并指定物理网卡名称,然后打开Wireshark,主接口列表里找到你的物理网卡,双击即可开始抓包。
需要留意的是:如果宿主机用的是无线网卡,桥接模式很容易出问题,无线网卡通常不允许同一链路上出现多个MAC地址,虚拟机的包可能发不出去,建议在有线网络环境里使用桥接,或者改用NAT模式。
NAT模式:必须抓VMnet8虚拟网卡
NAT模式是VMware和VirtualBox默认推荐的方式,虚拟机通过宿主机上的一个虚拟网卡(VMware中是VMnet8)共享宿主机IP上网,虚拟机发出的包,会先到达VMnet8,再由宿主机转发到物理网卡,在Wireshark中要选 VMnet8 接口,而不是物理网卡。
具体操作:打开Wireshark,在接口列表中找到名称类似“VMnet8”的项,VirtualBox中通常显示为“VirtualBox Host-Only Network”或带有NAT的虚拟网卡,双击这个接口开始抓包后,在虚拟机里执行待测操作,例如打开网页、ping外网、访问数据库,Wireshark里就能看到对应的TCP或UDP包。
有一点需要知道:通过NAT抓到的包,源地址已经是宿主机IP(例如192.168.1.10),而不是虚拟机自己的内部IP(例如192.168.56.101),这是因为NAT在转发时会改写地址,想区分哪条流量来自虚拟机,可以在虚拟机里发起一个特定端口的请求,然后在Wireshark里用 udp.port == 9999 或 tcp.port == 8080 过滤。
仅主机模式:抓VMnet1就够了
仅主机模式不提供外网访问,虚拟机只能和宿主机通信,比如要抓本机与虚拟机之间的MySQL流量、Redis流量,这种模式非常干净,Wireshark里选 VMnet1 接口即可。
下面这张表直接总结三种模式的选择逻辑:
| 虚拟机网络模式 | Wireshark应选接口 | 虚拟机能否访问外网 | 典型应用场景 |
|---|---|---|---|
| 桥接模式 | 物理网卡(以太网/WLAN) | 能 | 模拟真实服务器,抓公网通信 |
| NAT模式 | VMnet8(或VirtualBox NAT接口) | 能,但经宿主机转发 | 日常开发,抓HTTP/HTTPS等应用层数据 |
| 仅主机模式 | VMnet1(Host-Only接口) | 不能 | 内网服务调试,安全分析 |
Wireshark抓取虚拟机网络数据包:桥接与NAT实操
理解了接口对应关系,接下来就是动手,以VMware Workstation为例,分别演示桥接和NAT两种最常用场景下的完整抓包过程。
桥接模式下抓取虚拟机流量
- 在VMware里确认虚拟机网络适配器为“桥接模式”。
- 用
ipconfig(Windows)或ifconfig(Linux)确认宿主机当前使用的物理网卡名称,例如Windows下叫“以太网”,macOS下叫“en0”。 - 打开Wireshark,双击对应物理网卡接口,如果有多个接口,不确定时先看每个接口的实时流量波形,有活动数据的通常就是。
- 在虚拟机里执行网络操作,
curl http://example.com或ping 8.8.8.8。 - 回到Wireshark,在过滤栏输入
ip.addr == 虚拟机的IP,因为桥接模式下虚拟机IP与宿主机在同一网段,直接用这个过滤就能快速定位。
提示:桥接模式下,虚拟机发出的广播包(如ARP、DHCP)也会出现在Wireshark里,如果噪音太大,可以改成 tcp.port == 80 或者 http 过滤。
NAT模式下抓取虚拟机流量
- 在VMware中,把虚拟机网络模式改为“NAT模式”。
- 打开Wireshark,在接口列表中找到 VMnet8,如果找不到,先打开终端执行
ipconfig /all或ifconfig -a,确认系统里是否已有VMnet8这个虚拟网卡,没有的话,打开VMware的“虚拟网络编辑器”,点击“更改设置”,恢复默认网络或手动添加NAT网段。 - 双击VMnet8开始抓包。
- 在虚拟机里发起流量,这里有个小技巧:为了快速识别虚拟机的流量,可以先用
nc -u 目标IP 9999发一段UDP数据,或者用wget --bind-address=虚拟IP 目标URL指定源地址。 - 在Wireshark过滤栏输入
udp.port == 9999,就能看到从宿主机IP转发出去的包。
实际操作中,很多朋友会犯一个错误:在NAT模式下选择了物理网卡,导致抓了一堆宿主机自身的无关流量,却看不到虚拟机的半个包,记住一句话:NAT模式下,VMnet8才是虚拟机的“门”。
用tshark命令行抓包备选
如果你在服务器上做排查,没有图形界面,可以先用tshark(Wireshark的命令行版本)直接指定接口和过滤条件:
tshark -i VMnet8 -f "port 80" -w vm-http.pcap
这条命令会把经过VMnet8的80端口流量保存到 vm-http.pcap 文件,之后再拖回本地用Wireshark分析,tshark的安装路径一般在Wireshark的bin目录下,需要把该目录加入系统PATH。
为什么wireshark抓不到虚拟机流量?排查方法
新手最常见的报错就是:Wireshark打开了,接口也选了,但就是静悄悄,一般有下面几个原因。
虚拟网卡接口选错了
Wireshark运行在宿主机上,只能看到宿主机的接口,虚拟机内部的网卡不会出现在宿主机Wireshark列表里,选错接口是最大的坑。
混杂模式没有开启
如果你选对了接口,还是抓不到虚拟机的包,试着开启混杂模式,在Wireshark的捕获选项窗口(Ctrl+K),勾选“对所有接口使用混杂模式”,但要注意,无线网卡在混杂模式下经常丢包,所以最好用有线网络。
桥接模式 + 无线网卡
如前所述,无线网卡无法稳定支持多个MAC地址,常见现象是虚拟机ping不通外网,宿主机Wireshark也抓不到虚拟机的包,解决办法:换成有线网络,或改用NAT模式。
权限不足导致接口不可用
在Windows上,Wireshark需要管理员权限才能访问虚拟网卡,右键Wireshark图标,选择“以管理员身份运行”,在Linux上,可能要用 sudo wireshark。
虚拟网卡驱动被安全软件拦截
部分杀毒软件会把VMnet1/VMnet8当成可疑网卡,导致接口无法正常收发数据,可以先暂停防火墙或相关安全软件,再测试抓包,如果恢复正常,就把Wireshark加入白名单。
Q&A:虚拟机网络配置常见问题
问:桥接模式下虚拟机怎么设置固定IP?
桥接模式下,虚拟机要和宿主机在同一网段,并且网关、DNS都指向物理网络的对应设备,以Ubuntu为例,编辑 /etc/netplan/00-installer-config.yaml,设置静态IP为 168.x.x,网关为路由器地址,DNS设为 8.8.8,注意不要和局域网内其他设备IP冲突,否则网络会中断。
问:NAT模式下虚拟机为什么无法访问宿主机上的服务?
NAT模式默认不允许虚拟机直接访问宿主机上未映射的端口,因为虚拟机的网关是VMnet8的虚拟IP,而非物理网卡,解决办法:在VMware“虚拟网络编辑器”里选择NAT模式,点击“NAT设置”,添加端口转发规则,比如把宿主机的8080端口映射到虚拟机的80端口,之后在虚拟机里访问 宿主机IP:8080 就能打通。
问:仅主机模式可以访问外网吗?
不可以,仅主机模式只提供宿主机和虚拟机之间的隔离网络,没有NAT网关,也没有物理网络出口,它适合做纯内网测试或恶意样本分析,如果你的目标是抓外网流量,请回到桥接或NAT模式。
说到底,虚拟机抓包就是一个“对接口”的过程,先看虚拟机的网络模式,然后选择正确的宿主机接口,开启混杂模式,再用过滤条件锁定目标流量,把这几个步骤记熟,Wireshark抓虚拟机数据包就不再是谜题了。