pyshark
Этот репозиторий предназначен для устаревшей версии pyshark, которая работает на Python 2.7+. После версии 0.3.8 он получает только исправления ошибок.
Для новой версии, поддерживаемой только на Python 3.5+, используйте основной репозиторий

Обёртка Python для tshark, позволяющая разбирать пакеты Python с помощью анализаторов wireshark.
Расширенная документация: http://kiminewt.github.io/pyshark
Существует несколько модулей для разбора пакетов на Python, но этот отличается тем, что на самом деле не анализирует пакеты, а просто использует способность tshark (утилиты командной строки wireshark) экспортировать XML для выполнения разбора.
Этот пакет позволяет выполнять разбор из файла захвата или из захвата в реальном времени, используя все установленные у вас анализаторы wireshark.
Протестировано на Windows/Linux.
Установка
Все платформы
Просто выполните следующее, чтобы установить последнюю версию из pypi
pip install pyshark-legacy
Или установите из git-репозитория:
git clone https://github.com/KimiNewt/pyshark-legacy.git
cd pyshark/src
python setup.py install
Mac OS X
Возможно, вам потребуется установить libxml, что может быть неожиданным. Если вы получите ошибку от clang или сообщение об ошибке о libxml, выполните следующее:
xcode-select --install
pip install libxml
Вероятно, вам придётся принять лицензионное соглашение для XCode, так что будьте готовы нажать на диалог «Принять» в графическом интерфейсе.
Использование
Чтение из файла захвата:
>>> 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
...
Другие параметры
- param keep_packets: Следует ли сохранять пакеты после их чтения через next(). Используется для экономии памяти при чтении больших захватов.
- param input_file: Путь или файлоподобный объект, содержащий либо файл захвата пакетов (PCAP, PCAP-NG..), либо XML-файл TShark.
- param display_filter: Фильтр отображения (wireshark), применяемый к захвату перед его чтением.
- param only_summaries: Создавать только сводки пакетов, что намного быстрее, но содержит очень мало информации.
- param disable_protocol: Отключить обнаружение протокола (tshark > версии 2).
- param decryption_key: Ключ, используемый для шифрования и расшифровки захваченного трафика.
- param encryption_type: Стандарт шифрования, используемый в захваченном трафике (должен быть либо 'WEP', 'WPA-PWD', либо 'WPA-PWK'. По умолчанию используется WPA-PWK).
- param tshark_path: Путь к бинарному файлу tshark.
Чтение из активного интерфейса:
>>> 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
Другие параметры
- param interface: Имя интерфейса для захвата. Если не указано, берётся первый доступный.
- param bpf_filter: BPF-фильтр, применяемый к пакетам.
- param display_filter: Фильтр отображения (wireshark) для использования.
- param only_summaries: Создавать только сводки пакетов, что намного быстрее, но содержит очень мало информации.
- param disable_protocol: Отключить обнаружение протокола (tshark > версии 2).
- param decryption_key: Ключ, используемый для шифрования и расшифровки захваченного трафика.
- param encryption_type: Стандарт шифрования, используемый в захваченном трафике (должен быть либо 'WEP', 'WPA-PWD', либо 'WPA-PWK'. По умолчанию используется WPA-PWK).
- param tshark_path: Путь к бинарному файлу tshark.
- param output_file: Дополнительно сохранить захваченные пакеты в этот файл.
Чтение из активного интерфейса с использованием кольцевого буфера
>>> 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
Другие параметры
- param ring_file_size: Размер файла кольца в кБ, по умолчанию 1024.
- param num_ring_files: Количество хранимых файлов кольца, по умолчанию 1.
- param ring_file_name: Имя файла кольца, по умолчанию /tmp/pyshark.pcap.
- param interface: Имя интерфейса для захвата. Если не указано, берётся первый доступный.
- param bpf_filter: BPF-фильтр, применяемый к пакетам.
- param display_filter: Фильтр отображения (wireshark) для использования.
- param only_summaries: Создавать только сводки пакетов, что намного быстрее, но содержит очень мало информации.
- param disable_protocol: Отключить обнаружение протокола (tshark > версии 2).
- param decryption_key: Ключ, используемый для шифрования и расшифровки захваченного трафика.
- param encryption_type: Стандарт шифрования, используемый в захваченном трафике (должен быть либо 'WEP', 'WPA-PWD', либо 'WPA-PWK'. По умолчанию используется WPA-PWK).
- param tshark_path: Путь к бинарному файлу tshark.
- param output_file: Дополнительно сохранить захваченные пакеты в этот файл.
Чтение из удалённого активного интерфейса:
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
Другие параметры
- param remote_host: Удалённый хост для захвата (IP или имя хоста). Должен запускать rpcapd.
- param remote_interface: Удалённый интерфейс на удалённой машине для захвата. Обратите внимание, что в Windows это не отображаемое имя устройства, а реальное имя интерфейса (т.е. \Device\NPF_..).
- param remote_port: Удалённый порт, на котором прослушивается служба rpcapd.
- param bpf_filter: BPF-фильтр (tcpdump), применяемый к захвату перед чтением.
- param only_summaries: Создавать только сводки пакетов, что намного быстрее, но содержит очень мало информации.
- param disable_protocol: Отключить обнаружение протокола (tshark > версии 2).
- param decryption_key: Ключ, используемый для шифрования и расшифровки захваченного трафика.
- param encryption_type: Стандарт шифрования, используемый в захваченном трафике (должен быть либо 'WEP', 'WPA-PWD', либо 'WPA-PWK'. По умолчанию используется WPA-PWK).
- param tshark_path: Путь к бинарному файлу tshark.
Доступ к данным пакета:
Данные могут быть получены несколькими способами. Пакеты разделены на уровни, сначала необходимо перейти к нужному уровню, а затем выбрать поле.
Все следующие способы работают:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
Чтобы проверить, присутствует ли уровень в пакете, можно использовать его имя:
>>> 'IP' in packet
True
Чтобы увидеть все возможные имена полей, используйте атрибут packet.layer.field_names (например, packet.ip.field_names) или функцию автодополнения вашего интерпретатора.