在QEMU中,是否可以拦截Linux Guest OS发送/接收的数据包?

时间:2011-04-19 21:08:34

标签: linux sockets virtualization system-calls qemu

我们正在做一个涉及从虚拟机管理程序层(即QEMU)监控来宾操作系统(例如Linux)的小项目。我们要监控的一件事是进出客户操作系统的网络流量。是否可以在不修改Guest OS的情况下这样做?

执行此操作的一种方法是拦截在创建套接字时创建的相关系统调用,并在执行指令时从相关寄存器中获取值。但是我们不太确定它是否容易,或者它是否是正确的方法。

4 个答案:

答案 0 :(得分:6)

除了@ usr57368答案 - 对于使用'-netdev'创建的设备,请使用'-object filter-dump,...'而不是-net dump:

-object filter-dump,id=id,netdev=dev,file=filename][,maxlen=len]
  

将netdev dev上的网络流量转储到指定的文件   文件名。每个数据包最多存储len个字节(默认为64k)。   文件格式为libpcap,因此可以使用诸如的工具进行分析   tcpdump或Wireshark。

答案 1 :(得分:5)

来自QEMU documentation

  

-net dump[,vlan= 名词 ][,file= 文件 ][,len= len个 ]

     

将VLAN n 上的网络流量转储到文件文件qemu-vlan0.pcap   默认)。最多 len 字节(64k by   存储每个数据包的默认值。该   文件格式是libpcap,所以它可以   使用tcpdump等工具进行分析   Wireshark的。

如果--net tap,您还应该能够通过在主机上运行Wireshark来实时监控。

答案 2 :(得分:1)

由于qemu是开源的,因此您可以获取源代码并将代码插入到网络设备仿真中,以便在数据包通过设备时捕获并记录数据包。例如,请参阅hw / virtio-net.c中的virtio_net_flush_tx()例程。

答案 3 :(得分:0)

使用名为wireshark的程序。输入搜索过滤器(ip.src eq [IP]或ip.dst eq [same ip]),它将告诉您进出该计算机的所有数据。看起来很有用 更深入地了解它与网络的交互,或某些行为。