pyshark
Envoltorio de Python para tshark, que permite el análisis de paquetes en Python utilizando los disectores de Wireshark.
Documentación extendida: http://kiminewt.github.io/pyshark
Buscando contribuyentes - por varias razones me resulta difícil encontrar tiempo para mantener y mejorar el paquete en este momento. Cualquier pull-request será revisado y si alguien está interesado y es adecuado, estaré encantado de incluirlo en el proyecto. No dudes en enviarme un correo a dorgreen1 at gmail.
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 (la utilidad de línea de comandos de Wireshark) para exportar XMLs y usar su análisis.
Este paquete permite analizar desde un archivo de captura o una captura en vivo, utilizando todos los disectores de Wireshark que tengas instalados. Probado en Windows/Linux.
Installation
Soporte de versiones
Se admite Python 3.7+. Existe una versión no soportada de Python 2 como pyshark-legacy.
Admite todas las versiones modernas de tshark/Wireshark, pero ciertas funciones pueden no estar disponibles en versiones antiguas.
Simplemente ejecuta lo siguiente para instalar la última versión desde pypi
pip install pyshark
O instala desde el repositorio de git:
git clone https://github.com/KimiNewt/pyshark.git
cd pyshark/src
python setup.py install
Mac OS X
Puede que necesites instalar libxml, lo cual puede ser inesperado. Si recibes un error de clang o un mensaje de error sobre libxml, ejecuta lo siguiente:
xcode-select --install
pip install libxml
Probablemente tengas que aceptar un EULA de XCode, así que prepárate para hacer clic en un diálogo de "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
- param keep_packets: Si mantener los paquetes después de leerlos mediante next(). Se usa para conservar memoria al leer capturas grandes.
- param 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.
- param display_filter: Un filtro de visualización (Wireshark) para aplicar sobre la captura antes de leerla.
- param only_summaries: Solo producir resúmenes de paquetes, mucho más rápido pero incluye muy poca información.
- param disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2).
- param decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- param 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).
- param tshark_path: Ruta del binario de 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
- param interface: Nombre de la interfaz a escuchar. Si no se especifica, toma la primera disponible.
- param bpf_filter: Filtro BPF a usar en los paquetes.
- param display_filter: Filtro de visualización (Wireshark) a usar.
- param only_summaries: Solo producir resúmenes de paquetes, mucho más rápido pero incluye muy poca información.
- param disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2).
- param decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- param 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).
- param tshark_path: Ruta del binario de tshark.
- param output_file: Además, guardar los paquetes capturados 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
- param ring_file_size: Tamaño del archivo circular en kB, el valor predeterminado es 1024.
- param num_ring_files: Número de archivos circulares a mantener, el valor predeterminado es 1.
- param ring_file_name: Nombre del archivo circular, el valor predeterminado es /tmp/pyshark.pcap.
- param interface: Nombre de la interfaz a escuchar. Si no se especifica, toma la primera disponible.
- param bpf_filter: Filtro BPF a usar en los paquetes.
- param display_filter: Filtro de visualización (Wireshark) a usar.
- param only_summaries: Solo producir resúmenes de paquetes, mucho más rápido pero incluye muy poca información.
- param disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2).
- param decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- param 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).
- param tshark_path: Ruta del binario de tshark.
- param output_file: Además, guardar los paquetes capturados 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
- param remote_host: El host remoto en el que capturar (IP o nombre de host). Debe estar ejecutando rpcapd.
- param remote_interface: La interfaz remota en la máquina remota para capturar. Ten en cuenta que en Windows no es el nombre de visualización del dispositivo, sino el nombre real de la interfaz (es decir, \Device\NPF_..).
- param remote_port: El puerto remoto en el que el servicio rpcapd está escuchando.
- param bpf_filter: Un filtro BPF (tcpdump) para aplicar sobre la captura antes de leer.
- param only_summaries: Solo producir resúmenes de paquetes, mucho más rápido pero incluye muy poca información.
- param disable_protocol: Deshabilitar la detección de un protocolo (tshark > versión 2).
- param decryption_key: Clave utilizada para cifrar y descifrar el tráfico capturado.
- param 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).
- param tshark_path: Ruta del binario de tshark.
Acceso a los datos del paquete:
Los datos se pueden acceder de múltiples formas. Los paquetes se dividen en capas; primero debes llegar a la capa adecuada y luego puedes seleccionar tu campo.
Todos los siguientes funcionan:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Para probar si una capa está en un paquete, puedes usar su nombre:
>>> 'IP' in packet
True