захват pyshark в реальном времени с фильтром отображения

Я нашел хороший модуль pyshark для Python, который, насколько мне известно, можно использовать так же, как tshark с фильтрацией bpf. На самом деле я ищу вариант захвата в реальном времени с фильтрацией bpf и фильтрацией отображения, чтобы сделать что-то еще с этими данными и сохранить их в БД для последующего анализа. Согласно документации, pyshark может выполнять захват в реальном времени, но я не знаю, как отображать и отправлять в файл или данные БД для каждого полученного пакета. Я запускаю лабораторную сеть IPv6. Это пример скрипта Python:

import pyshark
capture = pyshark.LiveCapture(interface='eth1',bpf_filter="tcp and port 80")
capture.sniff(timeout=20)

после тайм-аута я могу печатать время и время эпохи, но только для каждого пакета. Другие части пакета я не могу видеть

print capture[1].sniff_time
print capture[1].sniff_timestamp

я был бы признателен за любую помощь и направление, чтобы получить живой захват и данные на пакет для отправки в БД


person user1627588    schedule 03.06.2014    source источник


Ответы (2)


Вы не можете получить доступ к необработанным данным пакета, но вы можете получить доступ к полям пакета, обратившись к соответствующему уровню, такому как package.udp.src_port. Вы можете легко просмотреть все поля, распечатав пакет.

person KimiNewt    schedule 04.06.2014
comment
Вы автор пакета, поэтому я предполагаю, что вы, вероятно, знаете, что этот ответ устарел. Я просто указываю, что когда-то между тем, когда вы это написали, и сейчас, вы можете получить доступ к пакетам из объекта LiveCapture() с атрибутом _packets как arunkumarreddy упоминается в этом ответе - person This; 30.07.2018

Надеюсь, это поможет, перехватывая пакеты с тайм-аутом в 1 секунду и извлекая их.

import pyshark
capture = pyshark.LiveCapture(interface=r'\Device\NPF_{D41D8EE1-2739-4FA1-8873-024D3F68E9E1}',
                              output_file=r'C:\Temp\samp1.pcap')
capture.sniff(timeout=1)
pkts = [pkt for pkt in capture._packets]
print(len(capture))
capture.close()

Но с capture.close(), похоже, есть какое-то асинхронное исключение. Что никак не влияет на наш код. Выход, как показано ниже

94

taking long time to close proactor

Task exception was never retrieved

future: <Task finished coro=<_close_async() done, defined at C:\Python34\lib\site-packages\pyshark\capture\capture.py:409> exception=RuntimeError('Set changed size during iteration',)>

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\trollius\tasks.py", line 255, in _step
    result = next(coro)
  File "C:\Python34\lib\site-packages\pyshark\capture\capture.py", line 411, in _close_async
    for process in self.running_processes:

RuntimeError: Set changed size during iteration

Task was destroyed but it is pending!

task: <Task pending coro=<packets_from_tshark() running at C:\Python34\lib\site-packages\pyshark\capture\capture.py:261> wait_for=<Task finished coro=<_close_async() done, defined at C:\Python34\lib\site-packages\pyshark\capture\capture.py:409> exception=RuntimeError('Set changed size during iteration',)>>

Process finished with exit code 0
person arunkumarreddy    schedule 17.10.2017