
Python-Wrapper für tshark, der die Paketanalyse in Python mithilfe von Wireshark-Dissectoren ermöglicht.
Python-Wrapper für tshark, der Python-Paketanalyse mit Wireshark-Dissectoren ermöglicht.
Erweiterte Dokumentation: http://kiminewt.github.io/pyshark
Suche Mitwirkende – aus verschiedenen Gründen habe ich derzeit Schwierigkeiten, Zeit für die Wartung und Verbesserung des Pakets zu finden. Alle Pull-Requests werden überprüft, und wenn jemand interessiert und geeignet ist, werde ich ihn gerne in das Projekt einbeziehen. Sie können mich gerne unter dorgreen1 at gmail kontaktieren.
Es gibt einige Python-Paketanalyse-Module, dieses unterscheidet sich dadurch, dass es eigentlich keine Pakete analysiert, sondern lediglich die Fähigkeit von tshark (Wireshark-Befehlszeilentool) nutzt, XMLs zu exportieren, um dessen Analyse zu verwenden.
Dieses Paket ermöglicht das Parsen aus einer Capture-Datei oder einem Live-Capture unter Verwendung aller installierten Wireshark-Dissectoren. Getestet unter Windows/Linux.
Python 3.7+ wird unterstützt. Eine nicht unterstützte Python-2-Version existiert als pyshark-legacy.
Unterstützt alle modernen Versionen von tshark / wireshark, aber bestimmte Funktionen können in älteren Versionen nicht verfügbar sein.
Führen Sie einfach den folgenden Befehl aus, um die neueste Version von pypi zu installieren:
pip install pyshark
Oder aus dem Git-Repository installieren:
git clone https://github.com/KimiNewt/pyshark.git
cd pyshark/src
python setup.py install
Möglicherweise müssen Sie libxml installieren, was unerwartet sein kann. Wenn Sie einen Fehler von clang oder eine Fehlermeldung über libxml erhalten, führen Sie Folgendes aus:
xcode-select --install
pip install libxml
Sie müssen wahrscheinlich eine EULA für XCode akzeptieren, seien Sie also bereit, im GUI auf einen „Akzeptieren“-Dialog zu klicken.
>>> 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
Auf Daten kann auf verschiedene Weise zugegriffen werden. Pakete sind in Schichten unterteilt; zuerst müssen Sie die entsprechende Schicht erreichen und dann können Sie Ihr Feld auswählen.
Alle folgenden funktionieren:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Um zu testen, ob eine Schicht in einem Paket vorhanden ist, können Sie ihren Namen verwenden:
>>> 'IP' in packet
True
Um alle möglichen Feldnamen zu sehen, verwenden Sie das Attribut packet.layer.field_names (z.B. packet.ip.field_names) oder die Autocomplete-Funktion Ihres Interpreters.
Sie können auch die ursprünglichen Binärdaten eines Feldes oder eine schöne Beschreibung davon erhalten:
>>> 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 unterstützt die automatische Entschlüsselung von Spuren mit den Standards WEP, WPA-PWD und WPA-PSK (WPA-PWD ist die Voreinstellung).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
Ein Tupel der unterstützten Verschlüsselungsstandards, SUPPORTED_ENCRYPTION_STANDARDS, existiert in jeder Capture-Klasse.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
Pyshark-Anzeigefilter können bei der Analyse von anwendungsorientiertem Datenverkehr hilfreich sein. BPF-Filter bieten nicht so viel Flexibilität wie die Anzeigefilter von Wireshark.
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns")
>>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission")
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Beiträge zu diesem Projekt werden unter derselben Lizenz akzeptiert.