pyshark
Questo repository è per la versione legacy di pyshark, che funziona su Python 2.7+. Riceve solo correzioni di bug dopo la versione 0.3.8. Per la nuova versione supportata solo su Python 3.5+, usa il repository principale

Wrapper Python per tshark, che consente l'analisi dei pacchetti Python utilizzando i dissector di Wireshark.
Documentazione estesa: http://kiminewt.github.io/pyshark
Esistono diversi moduli Python per l'analisi dei pacchetti, questo è diverso perché non analizza effettivamente alcun pacchetto, ma utilizza semplicemente la capacità di tshark (utility a riga di comando di Wireshark) di esportare XML per utilizzare la sua analisi.
Questo pacchetto consente l'analisi da un file di cattura o da una cattura live, utilizzando tutti i dissector di Wireshark che hai installato. Testato su Windows/Linux.
Installazione
Esegui semplicemente il seguente comando per installare l'ultima versione da pypi
pip install pyshark-legacy
Oppure installa dal repository git:
git clone https://github.com/KimiNewt/pyshark-legacy.git
cd pyshark/src
python setup.py install
Mac OS X
Potrebbe essere necessario installare libxml, cosa che può essere inaspettata. Se ricevi un errore da clang o un messaggio di errore riguardante libxml, esegui quanto segue:
xcode-select --install
pip install libxml
Probabilmente dovrai accettare un EULA per XCode, quindi preparati a fare clic su una finestra di dialogo "Accetta" nell'interfaccia grafica.
Utilizzo
Lettura da un file di cattura:
>>> 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
...
Altre opzioni
- param keep_packets: Se mantenere i pacchetti dopo averli letti tramite next(). Utilizzato per conservare memoria durante la lettura di grandi catture.
- param input_file: Un percorso o un oggetto simile a file contenente un file di cattura di pacchetti (PCAP, PCAP-NG..) o un xml di TShark.
- param display_filter: Un filtro di visualizzazione (wireshark) da applicare sulla cattura prima di leggerla.
- param only_summaries: Produce solo riepiloghi di pacchetti, molto più veloce ma include pochissime informazioni.
- param disable_protocol: Disabilita il rilevamento di un protocollo (tshark > versione 2)
- param decryption_key: Chiave utilizzata per cifrare e decifrare il traffico catturato.
- param encryption_type: Standard di cifratura utilizzato nel traffico catturato (deve essere 'WEP', 'WPA-PWD' o 'WPA-PWK'. Il valore predefinito è WPA-PWK.
- param tshark_path: Percorso del binario tshark
Lettura da un'interfaccia live:
>>> 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
Altre opzioni
- param interface: Nome dell'interfaccia su cui sniffare. Se non specificato, viene presa la prima disponibile.
- param bpf_filter: Filtro BPF da utilizzare sui pacchetti.
- param display_filter: Filtro di visualizzazione (wireshark) da usare.
- param only_summaries: Produce solo riepiloghi di pacchetti, molto più veloce ma include pochissime informazioni.
- param disable_protocol: Disabilita il rilevamento di un protocollo (tshark > versione 2)
- param decryption_key: Chiave utilizzata per cifrare e decifrare il traffico catturato.
- param encryption_type: Standard di cifratura utilizzato nel traffico catturato (deve essere 'WEP', 'WPA-PWD' o 'WPA-PWK'. Il valore predefinito è WPA-PWK).
- param tshark_path: Percorso del binario tshark
- param output_file: Inoltre salva i pacchetti catturati in questo file.
Lettura da un'interfaccia live tramite ring buffer
>>> 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
Altre opzioni
- param ring_file_size: Dimensione del file ad anello in kB, il valore predefinito è 1024
- param num_ring_files: Numero di file ad anello da mantenere, il valore predefinito è 1
- param ring_file_name: Nome del file ad anello, il valore predefinito è /tmp/pyshark.pcap
- param interface: Nome dell'interfaccia su cui sniffare. Se non specificato, viene presa la prima disponibile.
- param bpf_filter: Filtro BPF da utilizzare sui pacchetti.
- param display_filter: Filtro di visualizzazione (wireshark) da usare.
- param only_summaries: Produce solo riepiloghi di pacchetti, molto più veloce ma include pochissime informazioni.
- param disable_protocol: Disabilita il rilevamento di un protocollo (tshark > versione 2)
- param decryption_key: Chiave utilizzata per cifrare e decifrare il traffico catturato.
- param encryption_type: Standard di cifratura utilizzato nel traffico catturato (deve essere 'WEP', 'WPA-PWD' o 'WPA-PWK'. Il valore predefinito è WPA-PWK).
- param tshark_path: Percorso del binario tshark
- param output_file: Inoltre salva i pacchetti catturati in questo file.
Lettura da un'interfaccia remota live:
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
Altre opzioni
- param remote_host: L'host remoto su cui catturare (IP o nome host). Dovrebbe eseguire rpcapd.
- param remote_interface: L'interfaccia remota sulla macchina remota su cui catturare. Nota che su Windows non è il nome visualizzato del dispositivo ma il vero nome dell'interfaccia (es. \Device\NPF_..).
- param remote_port: La porta remota su cui il servizio rpcapd è in ascolto.
- param bpf_filter: Un filtro BPF (tcpdump) da applicare sulla cattura prima di leggerla.
- param only_summaries: Produce solo riepiloghi di pacchetti, molto più veloce ma include pochissime informazioni.
- param disable_protocol: Disabilita il rilevamento di un protocollo (tshark > versione 2)
- param decryption_key: Chiave utilizzata per cifrare e decifrare il traffico catturato.
- param encryption_type: Standard di cifratura utilizzato nel traffico catturato (deve essere 'WEP', 'WPA-PWD' o 'WPA-PWK'. Il valore predefinito è WPA-PWK).
- param tshark_path: Percorso del binario tshark
Accesso ai dati dei pacchetti:
I dati possono essere acceduti in diversi modi. I pacchetti sono divisi in layer, prima devi raggiungere il layer appropriato e poi puoi selezionare il tuo campo. Tutti i seguenti funzionano:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Per verificare se un layer è presente in un pacchetto, puoi usare il suo nome:
>>> 'IP' in packet
True