
Wrapper Python para tshark, permitindo análise de pacotes Python usando os dissecadores do Wireshark.
Wrapper Python para tshark, permitindo análise de pacotes Python usando os dissecadores do wireshark.
Documentação estendida: http://kiminewt.github.io/pyshark
Procurando por contribuidores – por várias razões, estou com dificuldades para encontrar tempo para manter e aprimorar o pacote no momento. Todos os pull-requests serão revisados e, se alguém tiver interesse e for adequado, ficarei feliz em incluí-lo no projeto. Sinta-se à vontade para me enviar um e-mail para dorgreen1 at gmail.
Existem vários módulos de análise de pacotes Python; este é diferente porque na verdade não analisa nenhum pacote, apenas utiliza a capacidade do tshark (utilitário de linha de comando do wireshark) de exportar XMLs para usar sua análise.
Este pacote permite a análise a partir de um arquivo de captura ou de uma captura ao vivo, usando todos os dissecadores wireshark que você tiver instalados. Testado no Windows/Linux.
Python 3.7+ é suportado. Uma versão Python 2 não suportada existe como pyshark-legacy.
Suporta todas as versões modernas do tshark/wireshark, mas certos recursos podem não estar disponíveis em versões mais antigas.
Simplesmente execute o seguinte para instalar a versão mais recente do pypi
pip install pyshark
Ou instale a partir do repositório git:
git clone https://github.com/KimiNewt/pyshark.git
cd pyshark/src
python setup.py install
Talvez seja necessário instalar o libxml, o que pode ser inesperado. Se você receber um erro do clang ou uma mensagem de erro sobre o libxml, execute o seguinte:
xcode-select --install
pip install libxml
Provavelmente você terá que aceitar um EULA do XCode, então esteja pronto para clicar em um diálogo "Aceitar" na 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
Os dados podem ser acessados de várias maneiras. Os pacotes são divididos em camadas; primeiro você precisa alcançar a camada apropriada e então pode selecionar seu campo.
Todos os seguintes funcionam:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Para testar se uma camada está em um pacote, você pode usar seu nome:
>>> 'IP' in packet
True
Para ver todos os nomes de campos possíveis, use o atributo packet.layer.field_names (ou seja, packet.ip.field_names) ou a função de preenchimento automático no seu interpretador.
Você também pode obter os dados binários originais de um campo ou uma descrição bonita dele:
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# E também alguns novos atributos:
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
b'\n\x00\x00\n'
Pyshark suporta descriptografia automática de rastros usando os padrões WEP, WPA-PWD e WPA-PSK (WPA-PWD é o padrão).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
Uma tupla dos padrões de criptografia suportados, SUPPORTED_ENCRYPTION_STANDARDS, existe em cada classe de captura.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
Os filtros de exibição do Pyshark podem ser úteis na análise de tráfego focado em aplicações. Filtros BPF não oferecem tanta flexibilidade quanto os filtros de exibição do Wireshark.
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns")
>>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission")
Este projeto está licenciado sob MIT. As contribuições para este projeto são aceitas sob a mesma licença.