
Wrapper de Python para tshark, permitiendo el análisis de paquetes en Python usando los disectores de Wireshark
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.
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
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.
>>> 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
...
>>> 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)
>>> 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)
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
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
Para ver todos los nombres de campo posibles, usa el atributo packet.layer.field_names (por ejemplo, packet.ip.field_names) o la función de autocompletado en tu intérprete.
También puedes obtener los datos binarios originales de un campo, o una descripción legible del mismo:
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# And some new attributes as well:
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
b'\n\x00\x00\n'
Pyshark admite el descifrado automático de trazas utilizando los estándares WEP, WPA-PWD y WPA-PSK (WPA-PWD es el predeterminado).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
Una tupla de estándares de cifrado admitidos, SUPPORTED_ENCRYPTION_STANDARDS, existe en cada clase de captura.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
Los filtros de visualización de Pyshark pueden ser útiles para analizar tráfico enfocado en aplicaciones. Los filtros BPF no ofrecen tanta flexibilidad como los filtros de visualización de Wireshark.
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns")
>>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission")
Este proyecto está licenciado bajo MIT. Las contribuciones a este proyecto se aceptan bajo la misma licencia.