Как преобразовать pcap в шестнадцатеричный поток с помощью tshark?

Все, что я пробовал, это в Python:

Сначала я прочитал файл pcap и использовал эту команду в Python:

with open("pcap_files/DCERPC.pcap", 'rb') as f:
    content = f.read()
binascii.hexlify(content)

Я не получаю точный шестнадцатеричный поток, так как он читает весь файл.

Следовательно, возможно ли скопировать pcap в шестнадцатеричный поток с помощью tshark?

Изменить:

На изображении захват wireshark есть много кадров, где я выбираю один и копирую его. имеет шестнадцатеричный поток. Какова команда для выполнения этого действия в tshark или xxd?


person raghhav    schedule 09.09.2019    source источник


Ответы (1)


Поскольку вы используете python, вы можете посмотреть на PyShark, который использует tshark.

Настройка: создать файл

Давайте создадим однопакетный файл для демонстрационных целей:

bash-5.0$ tshark -w temp.pcap -c 10
Capturing on 'Wi-Fi: en0'
1 
1 packet dropped from Wi-Fi: en0

Разбор шестнадцатеричного кода

Есть много способов разобрать hex. Какой метод вы выберете, будет зависеть от того, что вы пытаетесь сделать. Tshark покажет вам пакеты, а hexdump и xxd покажут вам каждый байт, включая байты формата захвата. Чтобы получить представление о разнице между байтами формата пакета и файла, эта статья о деконструкции формата pcap может оказаться полезным. Wireshark также может делать это с помощью View -> "Reload as File Format/Capture".

Получить гекс с tshark

Чтобы получить шестнадцатеричный код от tshark для каждого пакета, используйте -T json, а затем найдите поле «frame_raw».

bash-5.0$ tshark -x -r temp.pcap -T json
[
  {
    "_index": "packets-2019-09-10",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "frame_raw": ["cc65adda39706c96cfd87fe7080045000028910000004006ca3fc0a801f69765c58cc08001bb2f5a0b8169ef01ab501008001f930000",
          0,
          54,
          0,
          1
        ],
        "frame": {
          "frame.encap_type": "1",
          "frame.time": "Sep 10, 2019 18:57:29.571371000 PDT",
          "frame.offset_shift": "0.000000000",
...

Получить шестнадцатеричный код с помощью tshark в python

import json
import subprocess as sp

def get_tshark_hexstreams(capture_path: str) -> list:
    """Get the frames in a capture as a list of hex strings."""
    cmds = ["tshark", "-x", "-r", capture_path, "-T", "json"]
    frames_text = sp.check_output(cmds, text=True)
    frames_json = json.loads(frames_text)
    hexstreams = [frame["_source"]["layers"]["frame_raw"][0] for frame in frames_json]
    return hexstreams

output = get_tshark_hexstreams('temp.pcap')
print(output)
['6c96cfd87fe7cc65adda'...
 'cc65adda39706c96cfd8'...
 'ffffffffffff60a44c24'...
 ...

Изменено для рассматриваемого обновления.

person Ross Jacobs    schedule 11.09.2019
comment
Я отредактировал свой вопрос. Мне нужна шестнадцатеричная строка из захвата для одного кадра. - person raghhav; 12.09.2019
comment
Ответ обновлен. Я полагаю, вы ищете frame_raw. - person Ross Jacobs; 12.09.2019
comment
Пожалуйста, также отредактируйте свой вопрос, чтобы сформулировать это, поскольку я могу получить шестнадцатеричный поток с помощью Wireshark, выполнив XYZ. Я пытаюсь сделать то же самое в tshark, а затем прочитать результаты с помощью python. - person Ross Jacobs; 12.09.2019