Следите за потоком TCP, используя python и pyshark

Когда я делаю это вручную в Wireshark, я щелкаю правой кнопкой мыши пакет -> следовать -> поток TCP, и открывается новое окно с соответствующей информацией. Есть ли способ сделать то же самое и получить эту информацию с помощью модуля pyshark и python 2.7? ПРИМЕЧАНИЕ. Я выполняю тестирование запроса, отправляя недопустимые методы HTTP, поэтому поиск слоя HTTP здесь не работает.


person Elias Shourosh    schedule 24.04.2018    source источник


Ответы (2)


Да, вы можете следить за потоком TCP с помощью python и pyshark. Ниже приведено базовое доказательство концепции.

"""
Follow a TCP stream with pyshark.

"""
import pyshark

# Change FILENAME to your pcap file's name.
FILENAME = "myfile.pcap"
# Change STREAM_NUMBER to the stream number you want to follow.
STREAM_NUMBER = 0

# open the pcap file, filtered for a single TCP stream 
cap = pyshark.FileCapture(
    FILENAME,
    display_filter='tcp.stream eq %d' % STREAM_NUMBER)

while True:
    try:
        p = cap.next()
    except StopIteration:  # Reached end of capture file.
        break
    try:
        # print data from the selected stream
        print(p.data.data.binary_value)
    except AttributeError:  # Skip the ACKs.
        pass

Я проверил, что приведенный выше код работает для python 2.7.13 и python 3.6.6.

Примечание. Поскольку более новые версии pyshark поддерживают только Python 3.5+, если вы должны использовать python 2.7, вы застряли с пакетом pip pyshark-legacy.

person amath    schedule 24.09.2018
comment
он продолжает говорить AttributeError: нет атрибута с именем data - person Elias Shourosh; 26.03.2019

Я не знаю о pyshark.

Но, возможно, https://jon.oberheide.org/pynids/ будет работать, поскольку он также использует Python. :

pynids — это оболочка python для libnids, библиотеки системы обнаружения вторжений в сеть, предлагающей анализ, дефрагментацию IP, повторную сборку потока TCP и обнаружение сканирования портов TCP. Пусть ваши собственные подпрограммы Python исследуют сетевые разговоры.

У меня нет личного опыта использования pynids, но я добился большого успеха, используя его базовую библиотеку nids, которую вы можете получить по адресу http://libnids.sourceforge.net/

Несмотря на название Network Intrusion Detection System, ее можно использовать не только для обнаружения сетевых вторжений. По сути, это библиотека, которая помогает вам повторно собирать потоки TCP, такие как Follow TCP Stream от Wireshark.

Хотя nids великолепен, он требует, чтобы начальный поток TCP был в вашем файле захвата. Если вы потеряли начало и не можете его захватить, tshark может помочь:


tshark — это утилита командной строки, которая поставляется вместе с Wireshark. Например:

tshark -r t.pcap -q -z follow,tcp,ascii,18

Он выводит на стандартный вывод то же самое, что вы видите в графическом интерфейсе Wireshark в окне «Follow TCP Stream».

18 в приведенной выше команде — это индекс потока. Чтобы определить, какое число использовать там, вы можете просто заставить свой скрипт python выполнять итерацию от 0 и вверх и распечатывать каждый поток, пока не найдет правильный.

Другой способ найти индекс потока — сначала щелкнуть пакет в Wireshark, который находится в интересующем потоке. Затем разверните раздел Протокол управления передачей, чтобы открыть индекс потока, как показано на этом изображении: Как найти индекс потока

person Jacob Burckhardt    schedule 19.05.2018