
Wrapper Python pour tshark, permettant l'analyse de paquets en Python à l'aide des dissecteurs de Wireshark.
Wrapper Python pour tshark, permettant l'analyse de paquets Python à l'aide des dissecteurs de Wireshark.
Documentation détaillée : http://kiminewt.github.io/pyshark
À la recherche de contributeurs – pour diverses raisons, j'ai du mal à trouver du temps pour maintenir et améliorer le package en ce moment. Toute pull-request sera examinée et si quelqu'un est intéressé et convient, je serai ravi de l'inclure dans le projet. N'hésitez pas à m'écrire à dorgreen1 at gmail.
Il existe plusieurs modules d'analyse de paquets Python, celui-ci est différent car il n'analyse en réalité aucun paquet, il utilise simplement la capacité de tshark (l'utilitaire en ligne de commande de Wireshark) à exporter des XML pour utiliser son analyse.
Ce package permet l'analyse à partir d'un fichier de capture ou d'une capture en direct, en utilisant tous les dissecteurs Wireshark que vous avez installés. Testé sur Windows/Linux.
Python 3.7+ est supporté. Une version Python 2 non supportée existe sous pyshark-legacy.
Supporte toutes les versions modernes de tshark / Wireshark, mais certaines fonctionnalités peuvent être indisponibles sur les versions plus anciennes.
Exécutez simplement la commande suivante pour installer la dernière version depuis pypi
pip install pyshark
Ou installez depuis le dépôt git :
git clone https://github.com/KimiNewt/pyshark.git
cd pyshark/src
python setup.py install
Vous devrez peut-être installer libxml, ce qui peut être inattendu. Si vous recevez une erreur de clang ou un message d'erreur à propos de libxml, exécutez ceci :
xcode-select --install
pip install libxml
Vous devrez probablement accepter un CLUF pour XCode, soyez prêt à cliquer sur une boîte de dialogue "Accepter" dans l'interface graphique.
>>> 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
Les données peuvent être consultées de plusieurs façons. Les paquets sont divisés en couches, vous devez d'abord atteindre la couche appropriée, puis sélectionner votre champ.
Tous les éléments suivants fonctionnent :
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Pour tester si une couche est présente dans un paquet, vous pouvez utiliser son nom :
>>> 'IP' in packet
True
Pour voir tous les noms de champs possibles, utilisez l'attribut packet.layer.field_names (par exemple packet.ip.field_names) ou la fonction d'autocomplétion de votre interpréteur.
Vous pouvez également obtenir les données binaires originales d'un champ, ou une description agréable :
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# Et aussi quelques nouveaux attributs :
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
b'\n\x00\x00\n'
Pyshark prend en charge le déchiffrement automatique des traces en utilisant les normes WEP, WPA-PWD et WPA-PSK (WPA-PWD est la valeur par défaut).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
Un tuple des normes de chiffrement supportées, SUPPORTED_ENCRYPTION_STANDARDS, existe dans chaque classe de capture.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
Les filtres d'affichage de Pyshark peuvent être utiles pour analyser le trafic axé sur les applications. Les filtres BPF n'offrent pas autant de flexibilité que les filtres d'affichage de Wireshark.
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns")
>>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission")
Ce projet est sous licence MIT. Les contributions à ce projet sont acceptées sous la même licence.