2

У меня есть огромный файл pcap, который содержит большое количество отдельных потоков TCP.Но из них есть несколько недопустимых потоков, которые не имеют окончательной последовательности fin/ack. Есть ли способ, которым я могу найти только эти потоки, используя wireshark? Есть ли другие инструменты, которые позволяют мне искать pcaps таким образом?

Любая помощь будет оценена.

2 ответа2

0

Вот еще один способ сделать это с помощью tshark . Идея такая же, как и в ответе @artistoex - разница в том, что он не смотрит на каждое половинное соединение для себя, а на выходе получается номер потока TCP (из Wireshark/tshark), с которым легче работать, когда Вы хотите открыть этот поток в Wireshark и продолжить размещать его там.

tshark -r pcap_file.pcap -R "tcp.flags & 0x03" -Tfields -etcp.stream | 
sort -n | uniq -c | awk -F ' ' '{ if ($1<4) print $1," ", $2 }'

Фильтр отображения делает то же самое, что и фильтр захвата из другого ответа, он использует тот факт, что биты SYN и FIN являются двумя из младших битов в поле флагов TCP, поэтому, если установлены оба, это будет 0b11 или 0x3 , И-в поле tcp.flags с 0x3 даст ненулевые значения, если установлен любой флаг.

tshark выводит номер потока TCP для каждого пакета. Мы сортируем их и подсчитываем уникальные числа. Последний шаг печатает только те строки, в которых количество пакетов для этого потока меньше 4 (1 SYN и 1 FIN для каждого полу-направления).

Затем вы можете открыть Wireshark с

wireshark -r pcap-file -R "tcp.stream eq 1234"

где 1234 от предыдущей команды.

Милая? Я думаю, нет. Быстро? Нет ...

0

Следующая команда печатает каждое неполное половинное соединение.

tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0' | 
sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort|uniq -u

Подход предполагает, что каждая пара сокетов используется только один раз в течение всей трассировки.

объяснение

Для связи между

IP_A:PORT_A <--> IP_B:PORT_B

tcpdump содержит половинки

IP_A:PORT_A > IP_B:PORT_B, and
IP_B:PORT_B > IP_A:PORT_A

Для каждой половины дамп должен содержать два сегмента с флагом SYN или FIN. Итак, что делает команда:

  1. Соберите сегменты, которые несут флаг SYN или FIN

    tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0

  2. Агрегировать результат по половинному соединению, независимо от фактического флага (SYN или FIN)

    2.1. Сортировать по половинному соединению

    sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort

    2.2. Подсчитайте сегменты, участвующие в каждом половинном соединении, и отфильтруйте все половинные соединения, которые правильно включают два сегмента

    uniq -u

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .