pyshark
Este repositorio es para la versión heredada de pyshark, que funciona con Python 2.7+. Solo recibe correcciones de errores
después de la versión 0.3.8.
Para la nueva versión que solo es compatible con Python 3.5+, use el repositorio principal

Wrapper de Python para tshark, que permite el análisis de paquetes de Python utilizando los disectores de wireshark.
Documentación extendida: http://kiminewt.github.io/pyshark
Existen bastantes módulos de análisis de paquetes en Python; este es diferente porque en realidad no analiza ningún paquete, simplemente utiliza la capacidad de tshark (utilidad de línea de comandos de wireshark) de exportar XMLs para usar su análisis.
Este paquete permite el análisis desde un archivo de captura o una captura en vivo, utilizando todos los disectores de wireshark que tenga instalados.
Probado en Windows/Linux.
Instalación
Simplemente ejecute lo siguiente para instalar la última versión desde pypi
pip install pyshark-legacy
O instale desde el repositorio git:
git clone https://github.com/KimiNewt/pyshark-legacy.git
cd pyshark/src
python setup.py install
Mac OS X
Es posible que deba instalar libxml, lo cual puede ser inesperado. Si recibe un error de clang o un mensaje de error sobre libxml, ejecute lo siguiente:
xcode-select --install
pip install libxml
Probablemente tendrá que aceptar un CLUF de XCode, así que esté preparado para hacer clic en un cuadro de diálogo "Aceptar" en la GUI.
Uso
Lectura desde un archivo de captura:
>>> import pyshark
>>> cap = pyshark.FileCapture('/tmp/mycapture.cap')
>>> cap
<FileCapture /tmp/mycapture.cap (589 packets)>
>>> print cap[0]
Packet (Length: 698)
Layer ETH:
Destination: BLANKED
Source: BLANKED
Type: IP (0x0800)
Layer IP:
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
Total Length: 684
Identification: 0x254f (9551)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: UDP (17)
Header checksum: 0xe148 [correct]
Source: BLANKED
Destination: BLANKED
...
Otras opciones
- parámetro keep_packets: Si se deben conservar los paquetes después de leerlos mediante next().
Se usa para ahorrar memoria al leer capturas grandes.
- parámetro input_file: Una ruta o un objeto similar a un archivo que contenga un
archivo de captura de paquetes (PCAP, PCAP-NG..) o un xml de TShark.
- parámetro display_filter: Un filtro de visualización (wireshark) para aplicar a la captura
antes de leerla.
- parámetro only_summaries: Solo produce resúmenes de paquetes, mucho más rápido pero incluye
muy poca información.
- parámetro disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2)
- parámetro decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- parámetro encryption_type: Estándar de cifrado utilizado en el tráfico capturado (debe
ser 'WEP', 'WPA-PWD' o 'WPA-PWK'. El valor predeterminado es WPA-PWK).
- parámetro tshark_path: Ruta del binario tshark
Lectura desde una interfaz en vivo:
>>> capture = pyshark.LiveCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
Otras opciones
- parámetro interface: Nombre de la interfaz para capturar. Si no se indica, toma
la primera disponible.
- parámetro bpf_filter: Filtro BPF para usar en los paquetes.
- parámetro display_filter: Filtro de visualización (wireshark) para usar.
- parámetro only_summaries: Solo produce resúmenes de paquetes, mucho más rápido pero
incluye muy poca información.
- parámetro disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2)
- parámetro decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- parámetro encryption_type: Estándar de cifrado utilizado en el tráfico capturado
(debe ser 'WEP', 'WPA-PWD' o 'WPA-PWK'. El valor predeterminado es WPA-PWK).
- parámetro tshark_path: Ruta del binario tshark
- parámetro output_file: Opcionalmente, guardar los paquetes capturados adicionalmente en este archivo.
Lectura desde una interfaz en vivo usando un búfer circular
>>> capture = pyshark.LiveRingCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
Otras opciones
- parámetro ring_file_size: Tamaño del archivo del anillo en kB, el valor predeterminado es 1024
- parámetro num_ring_files: Número de archivos del anillo a mantener, el valor predeterminado es 1
- parámetro ring_file_name: Nombre del archivo del anillo, el valor predeterminado es /tmp/pyshark.pcap
- parámetro interface: Nombre de la interfaz para capturar. Si no se indica, toma
la primera disponible.
- parámetro bpf_filter: Filtro BPF para usar en los paquetes.
- parámetro display_filter: Filtro de visualización (wireshark) para usar.
- parámetro only_summaries: Solo produce resúmenes de paquetes, mucho más rápido pero
incluye muy poca información.
- parámetro disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2)
- parámetro decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- parámetro encryption_type: Estándar de cifrado utilizado en el tráfico capturado
(debe ser 'WEP', 'WPA-PWD' o 'WPA-PWK'. El valor predeterminado es WPA-PWK).
- parámetro tshark_path: Ruta del binario tshark
- parámetro output_file: Opcionalmente, guardar los paquetes capturados adicionalmente en este archivo.
Lectura desde una interfaz remota en vivo:
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
Otras opciones
- parámetro remote_host: El host remoto para capturar (IP o nombre de host).
Debe estar ejecutando rpcapd.
- parámetro remote_interface: La interfaz remota en la máquina remota para
capturar. Tenga en cuenta que en Windows no es el nombre de visualización del dispositivo, sino el
nombre de interfaz real (es decir, \Device\NPF_..).
- parámetro remote_port: El puerto remoto en el que el servicio rpcapd está escuchando.
- parámetro bpf_filter: Un filtro BPF (tcpdump) para aplicar a la captura antes
de leer.
- parámetro only_summaries: Solo produce resúmenes de paquetes, mucho más rápido pero
incluye muy poca información.
- parámetro disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2)
- parámetro decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- parámetro encryption_type: Estándar de cifrado utilizado en el tráfico capturado
(debe ser 'WEP', 'WPA-PWD' o 'WPA-PWK'. El valor predeterminado es WPA-PWK).
- parámetro tshark_path: Ruta del binario tshark
Acceso a los datos del paquete:
Los datos se pueden acceder de múltiples formas.
Los paquetes se dividen en capas; primero debe llegar a la capa adecuada y luego puede seleccionar su campo.
Todo lo siguiente funciona:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100