为什么我可以嗅探来自桥接虚拟机的单播数据包?

为什么我可以嗅探来自桥接虚拟机的单播数据包?

我有一个以桥接方式运行的 Ubuntu VM,这意味着它在网络方面充当单独的机器。

我嗅了嗅主持人对于使用 scapy(默认以混杂模式运行)的 ICMP 数据包,并且由于某种原因能够检测到从我的 VM 发送的 ICMP 数据包:

from scapy.all import *
p = sniff(count=5, 
      filter="host 192.168.1.37 and icmp", #my vm's ip
      prn=print_pkt)

我从虚拟机中获取了一些数据包。为什么我能看到这些数据包?

答案1

桥接并不意味着虚拟机会获得物理以太网接口的一块。它是一个软件桥接器——它通过分发以太网帧来工作它们已经被操作系统本身接收。(当然,除非 MAC 地址匹配,否则它们不会向上传递到 IP/TCP,但它们仍然由以太网层的主机操作系统处理。)

因此,由于操作系统已经有了数据包,如果您要求的话,它可以简单地将它们提供给您(通过启用混杂模式)。

这同样适用于本机操作系统级桥接(Linux br0)和基于 VirtualBox 驱动程序的桥接。


(然而,在你实际上想要将部分硬件 NIC 专用于虚拟机,这也是可能的——您可以使用“SR-IOV”功能,该功能通常由服务器级以太网 NIC 支持。)

相关内容