【问题标题】:In QEMU, is it possible to intercept packets being sent/received by the Linux Guest OS?在 QEMU 中,是否可以拦截 Linux 客户操作系统发送/接收的数据包?
【发布时间】:2011-08-09 00:39:27
【问题描述】:

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

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

【问题讨论】:

  • 有趣的问题。 +1

标签: linux sockets virtualization system-calls qemu


【解决方案1】:

除了@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。

【讨论】:

    【解决方案2】:

    来自QEMU documentation

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

    将 VLAN n 上的网络流量转储到文件 file (qemu-vlan0.pcap by 默认)。最多 len 个字节(64k 默认)存储每个数据包。这 文件格式是libpcap,所以可以 使用 tcpdump 或 Wireshark。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 但是,如果您使用默认的 NAT 网络,您将无法在 Wireshark 中轻松区分来自主机的流量和来自 VM 的流量。因此,正如另一个答案所说,您需要使用不同类型的网络。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多