Как заставить Python читать данные .pcap, захваченные tcpdump с pipe на Linux? - PullRequest
0 голосов
/ 22 апреля 2019

Недавно мне удалось собрать данные tcp с моей платы Raspberry Pi 3B + в Wireshark на моем локальном компьютере для обработки в реальном времени, но теперь я хотел бы в реальном времени захватить столбец «данные» в разделе «TCP» с помощью python и отправитьданные этих столбцов через TCP-порт к другому приложению, прослушивающему порт 1234.

Я думаю, что я пытаюсь неправильно.Мои попытки показаны ниже:

приведенная ниже команда make wireshark может анализировать tcp-поток другой машины в реальном времени.

ssh root@10.0.1.2 tcpdump -ns 0 -i eth0 "not port 22" | wireshark -k -i -

это работает, и wireshark может работать в режиме реального времени.Я хочу вывести и отобразить некоторые данные в каждом пакете, которые соответствуют моему требованию, в терминальной базе по этой команде, поэтому я пытаюсь отфильтровать мой требуемый столбец, начинающийся с:

ssh root@10.0.1.2 tcpdump -ns 0 -i eth0 "not port 22" | python test.py

и файла test.py, как показано ниже:

import sys
k = 0
try:
   for line in iter(sys.stdin.readline, b''):
      k = k + 1
      print(line)
except KeyboardInterrupt:
   sys.stdout.flush()
   pass
print(k)

но просто ничего не отображается.

кстати, поток tcp переносится в двоичном режиме.

Я хочу получить некоторые указанные данные вtcp данные в реальном времени (или на 90% в реальном времени) перехватывают tcpdump, но я пробую некоторые способы и не буду работать.

Я также пытаюсь использовать команду, которая позволяет wireshark проводить анализ в реальном времени.время, а затем пересылать данные в скрипты Python, я ищу в Google в течение 2 дней с нулевыми результатами.

Если кто-нибудь достаточно крутой, чтобы помочь мне с этим?Я буду очень благодарен, спасибо!

1 Ответ

1 голос
/ 22 апреля 2019

Вот простой пример того, как передать на скрипт Python.

import sys
import fileinput


incoming = fileinput.input(sys.argv[1:])
for line in incoming:
    print line.rstrip()

также python -u может помочь

-u     Force  stdin,  stdout  and  stderr to be totally unbuffered.  On
              systems where it matters, also put stdin, stdout and  stderr  in
              binary  mode.   Note  that there is internal buffering in xread‐
              lines(), readlines() and file-object  iterators  ("for  line  in
              sys.stdin")  which  is  not  influenced by this option.  To work
              around this, you will want to use "sys.stdin.readline()"  inside
              a "while 1:" loop.
...