2011-04-19 11 views
6

Estamos realizando un pequeño proyecto que implica supervisar el sistema operativo invitado (por ejemplo, Linux) desde la capa del hipervisor (es decir, QEMU). Una de las cosas que queremos controlar es el tráfico de la red entrando/saliendo del sistema operativo invitado. ¿Es posible hacerlo sin modificar el sistema operativo invitado?En QEMU, ¿es posible interceptar paquetes enviados/recibidos por el sistema operativo invitado de Linux?

Una forma de hacerlo es interceptar las llamadas de sistema relevantes que se realizan cuando se crean los sockets y obtener los valores de los registros relevantes a medida que se ejecutan las instrucciones. Pero no estamos muy seguros de si es fácil o si es la forma correcta de hacerlo.

+0

Interesante pregunta. +1 – 0xC0000022L

Respuesta

0

usa un programa llamado wireshark. Ingrese el filtro de búsqueda (ip.src eq [IP] o ip.dst eq [misma ip]) y le dirá todos los datos que van desde y hacia esa computadora. Útil para buscar más profundo en su interacción con la red, o ciertas acciones.

+0

Sin embargo, si utiliza la red NAT predeterminada, no podrá distinguir fácilmente entre el tráfico que se origina en el host y el tráfico que se origina en la VM en wireshark. Por lo tanto, necesitaría usar un tipo diferente de red, como dice la otra respuesta. –

2

Desde el QEMU documentation:

-net dump[,vlan=n][,file=archivo][,len=len]

volcado tráfico de red en la VLAN n para presentar archivo (qemu-vlan0.pcap por def ault). A lo más len bytes (64k por por defecto) por paquete se almacenan. El formato de archivo es libpcap, por lo que puede ser analizado con herramientas como tcpdump o Wireshark.

También debe poder controlar en tiempo real ejecutando Wireshark en el host si --net tap.

0

Dado que qemu es de código abierto, puede obtener el código fuente e insertar en la emulación del dispositivo de red para capturar y registrar los paquetes de datos a medida que pasan por el dispositivo. Por ejemplo, vea la rutina virtio_net_flush_tx() en hw/virtio-net.c.

2

Además de @ usr57368 respuesta - Para los dispositivos creados con '-netdev', utilice '-objeto filtro de volcado, ...' volcado en lugar -net:

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

volquete de la red tráfico en netdev dev al archivo especificado por nombre de archivo. En la mayoría de los bytes len (64k por defecto) por paquete se almacenan. El formato de archivo es libpcap, por lo que se puede analizar con herramientas como tcpdump o Wireshark.

Cuestiones relacionadas