Читать STDIN для pyhon с помощью pyshark?

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

ssh root@ip tcpdump -i eth0 -w - | tshark -i - -Tjson

чтобы получить сетевой пакет из удаленной системы, потому что удаленная система имеет только tcpdump, больше нельзя установить программное обеспечение. -w - означает вывод на стандартный вывод и -i - означает чтение со стандартного ввода. Теперь я вижу вывод json в терминале в режиме реального времени, но я хотел бы получить объект json в python и обработать его. Я пытаюсь написать этот код в alpha.py:

import sys

for line in sys.stdin:
    print line

и используйте команду ниже, чтобы получить вывод:

ssh root@ip tcpdump -i eth0 -w - | tshark -i - -Tjson | python3 alpha.py

и вывод выглядит так:

[
  {
    "_index": "packets-2019-04-30",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "frame": {
          "frame.encap_type": "1",
          "frame.time": "Jan  1, 1970 08:14:05.382776000 HKT",
          "frame.offset_shift": "0.000000000",
          "frame.time_epoch": "845.382776000",
          "frame.time_delta": "0.000000000",
          "frame.time_delta_displayed": "0.000000000",
          "frame.time_relative": "0.000000000",
          "frame.number": "1",
          "frame.len": "111",

да, каждая «строка» - это просто строка вывода, а не полная строка json. Кстати, приведенный выше вывод для удобства читался не из стандартного ввода, а из файла .pcap:

tshark -r a.pcap -Tjson  | python3 alpha.py

Теперь я в замешательстве, но многие люди предлагают мне идеи. Теперь я хотел бы сделать это более ясным, поэтому я публикую этот пост. Исходное сообщение находится здесь: Как переслать обработанные данные Wireshark на python? каким методом?

и большое спасибо @Ente https://stackoverflow.com/users/3215929/ente

Жду решений. Спасибо.


person shih alex    schedule 30.04.2019    source источник
comment
Используйте -Tek, если вы хотите иметь один json в строке. Из документации: ek Формат JSON с разделителями новой строки для массового импорта в Elasticsearch.   -  person Steffen Ullrich    schedule 30.04.2019
comment
При использовании -Tek один пакет может быть декодирован в 2 формата json, один {"index" : {"_index": "packets-2019-04-30", "_type": "pcap_file"}}, а другой начинается с {"timestamp" : "1556587637021",, независимо от того, читается ли он из файла .pcap или читается из сетевого интерфейса, такого как eth0   -  person shih alex    schedule 30.04.2019
comment
И ваша проблема заключается именно в том, что вы получаете с этим строковым форматом? Почему вы не можете просто игнорировать строки JSON, которые не имеют для вас никакой ценности?   -  person Steffen Ullrich    schedule 30.04.2019
comment
Пожалуйста. Я не могу установить pyshark прямо сейчас, но вы пробовали pyshark.FileCapture('-') ? Насколько я вижу, вам также нужно будет отказаться от шага tshark. Что-то в этом духе: ssh root@ip tcpdump -i eth0 -w - | python -c "import pyshark; pyshark.FileCapture('-')"   -  person Ente    schedule 03.05.2019
comment
Также убедитесь, что вы не ssh подключаетесь к этой машине, используя тот же интерфейс, с которого вы сниффите. В противном случае вы создадите бесконечный цикл обнюхивания-декодирования, который в конечном итоге взорвет вашу машину;)   -  person Ente    schedule 03.05.2019