我们正在做一个涉及从虚拟机管理程序层(即QEMU)监控来宾操作系统(例如Linux)的小项目。我们要监控的一件事是进出客户操作系统的网络流量。是否可以在不修改Guest OS的情况下这样做?
执行此操作的一种方法是拦截在创建套接字时创建的相关系统调用,并在执行指令时从相关寄存器中获取值。但是我们不太确定它是否容易,或者它是否是正确的方法。
答案 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)
-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]),它将告诉您进出该计算机的所有数据。看起来很有用 更深入地了解它与网络的交互,或某些行为。