¿Cómo capturar todos los paquetes TCP en la tarjeta de red en Python en Linux?
Libpcap es una buena opción, pero requiere "pruebas-> repetidas; el lenguaje C obviamente no es una buena opción para modificar el funcionamiento de este programa.
Python proporciona varios libpcapbind. En la plataforma Windows, primero debe instalar winpcap, lo cual es muy útil si ya ha instalado Ethereal
Proceso de captura de paquetes estandarizado
Importar pcap
Pc=pcap.pcap() #Tenga en cuenta que el parámetro puede ser el nombre de la tarjeta de red, como eth0
Pc.setfilter('tcp port 80. ') #Establecer filtrado de escucha
Para ptime, pdata en pc: # ptime es la hora de recepción, pdata son los datos recibidos
Imprimir ptime, pdata #...
p>
Descomprimir paquetes Ethernet V2 capturados
p=dpkt.ethernet.Ethernet(pdata)
Si p.data.__class__=='IP':
ip = ' d. d. d ' tupla(mapa(ord, lista(p.data.dst)))
if p.data.data.__class__. >Si data.dport==80:
Impreso por gashero p.data.data.data #
Algunos parámetros de visualización
nrecv, ndrop, nifdrop= pc.stats()
En la tupla devuelta, el primer parámetro es el paquete recibido y el segundo parámetro es el paquete descartado por el kernel.