Вот еще один способ сделать это с помощью 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 от предыдущей команды.
Милая? Я думаю, нет.
Быстро? Нет ...