Tcpdump - как фильтровать на основе времени/продолжительности соединения tcp

Есть ли возможность фильтровать tcpdump (live или после создания дампа) на основе времени соединения tcp (продолжительность соединения)?

Я записываю трафик http json rpc. Я хочу записать только те соединения, длина которых превышает 1000 мс.

В wirehark есть инструмент в меню- > Статистика- > Разговоры (вкладка TCP), и там я могу сортировать по "Длительность". Но я хочу записывать (или фильтровать) долгоживущие соединения раньше (не в wirehark).

В псевдо-командах я хочу сделать что-то вроде этого:

tcpdump -i eth0 port 80 and connectionTime>1000ms -w data.pcap

или после записи:

cat data.pcap | SOMETOOL -connectionTime>1000ms > dataLongConnections.pcap

SOMETOOL должен экспортировать отфильтрованные данные в формат, который будет понимать Wireshark. Потому что после фильтрации я хочу проанализировать эти данные в Wireshark.

Как я могу это сделать?

Ответ 1

SplitCap может работать для вас. Это займет PCAP в качестве входа и вывода отдельных PCAP для каждого сеанса TCP/UDP. После раскола вы можете фильтровать из выходных PCAP интересных, чтобы сохранить.

Ответ 2

Вам необходимо учитывать ваш трафик на уровне потока вместо уровня пакета.

Если вы работали с NetFlow, вы могли бы использовать flow-tools и flow-nfilter для фильтрации потоков по длительности. Таким образом, вы можете конвертировать ваш pcap в NetFlow и позже фильтровать его.

Недостатком является то, что на выходе вы получаете NetFlow, а не PCAP. Для построения некоторых показателей достаточно, но проверить пакеты - не обязательно.

Вы также можете создать собственный инструмент с libpcap в C (жесткий) или scapy в python (более простой способ). Последний вариант не должен быть слишком сложным (если вы работаете с python)