我们正在做一个涉及从管理程序层(即 QEMU)监控来宾操作系统(例如 Linux)的小项目。我们要监控的一件事是进出访客操作系统的网络流量。是否可以在不修改访客操作系统的情况下这样做?
一种方法是拦截在创建套接字时进行的相关系统调用,并在执行指令时从相关寄存器中获取值。但我们不太确定这是否容易,或者它是否是正确的方法。
我们正在做一个涉及从管理程序层(即 QEMU)监控来宾操作系统(例如 Linux)的小项目。我们要监控的一件事是进出访客操作系统的网络流量。是否可以在不修改访客操作系统的情况下这样做?
一种方法是拦截在创建套接字时进行的相关系统调用,并在执行指令时从相关寄存器中获取值。但我们不太确定这是否容易,或者它是否是正确的方法。
除了@usr57368 答案 - 对于使用“-netdev”创建的设备,请使用“-object filter-dump,...”而不是-net dump:
-object filter-dump,id=id,netdev=dev,file=filename][,maxlen=len]
将 netdev dev 上的网络流量转储到 filename 指定的文件。每个数据包最多存储 len 个字节(默认为 64k)。文件格式为libpcap,因此可以使用tcpdump或Wireshark等工具进行分析。
来自QEMU 文档:
-net dump[,vlan=
n][,file=
文件][,len=
长度]
将 VLAN n上的网络流量转储到文件文件(
qemu-vlan0.pcap
默认情况下)。每个数据包最多存储len个字节(默认为 64k)。文件格式为libpcap,因此可以使用tcpdump或Wireshark等工具进行分析。
如果您--net tap
.
由于 qemu 是开源的,您可以获取源代码并将代码插入到网络设备仿真中,以捕获和记录通过设备的数据包。例如,参见 hw/virtio-net.c 中的 virtio_net_flush_tx() 例程。
使用一个名为wireshark的程序。输入搜索过滤器(ip.src eq [IP] 或 ip.dst eq [same ip]),它将告诉您进出该计算机的所有数据。有助于深入了解它与网络的交互或某些操作。