2011-04-19 32 views
6

我们正在做一个小项目,涉及从虚拟机管理程序层(即QEMU)监控Guest OS(例如Linux)。我们希望监控的一件事是网络流量进出Guest OS。是否可以在不修改客户操作系统的情况下这样做?在QEMU中,是否可以拦截Linux Guest OS发送/接收的数据包?

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

+0

有趣的问题。 +1 – 0xC0000022L 2011-04-20 01:15:56

回答

0

使用一个叫wireshark的程序。输入搜索过滤器(ip.src eq [IP]或ip.dst eq [相同的ip]),它会告诉你所有的数据去往和来自那台计算机。对于查看 更深入的与网络的交互或某些操作很有用。

+0

但是,如果使用默认的NAT网络,则无法轻松区分源自主机的流量和源自wireshark中VM的流量。所以你需要使用不同类型的网络,正如其他答案所述。 – 2011-04-24 08:14:08

2

QEMU documentation

-net dump[,vlan=ň][,file=文件][,len=LEN]

转储网络流量在VLAN ň由 DEF文件文件qemu-vlan0.pcap奥尔特)。每个数据包最多存储len个字节(64k由 默认值)。 文件格式是libpcap,因此可以使用tcpdump或 Wireshark等工具分析 。

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

0

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

2

除了@ usr57368答案 - 对于 '-netdev',创建的设备使用 '-object过滤突降,......',而不是-net转储:

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

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

相关问题