Ответ 1
SplitCap может работать для вас. Это займет PCAP в качестве входа и вывода отдельных PCAP для каждого сеанса TCP/UDP. После раскола вы можете фильтровать из выходных PCAP интересных, чтобы сохранить.
Есть ли возможность фильтровать 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.
Как я могу это сделать?
SplitCap может работать для вас. Это займет PCAP в качестве входа и вывода отдельных PCAP для каждого сеанса TCP/UDP. После раскола вы можете фильтровать из выходных PCAP интересных, чтобы сохранить.
Вам необходимо учитывать ваш трафик на уровне потока вместо уровня пакета.
Если вы работали с NetFlow, вы могли бы использовать flow-tools и flow-nfilter для фильтрации потоков по длительности. Таким образом, вы можете конвертировать ваш pcap в NetFlow и позже фильтровать его.
Недостатком является то, что на выходе вы получаете NetFlow, а не PCAP. Для построения некоторых показателей достаточно, но проверить пакеты - не обязательно.
Вы также можете создать собственный инструмент с libpcap в C (жесткий) или scapy в python (более простой способ). Последний вариант не должен быть слишком сложным (если вы работаете с python)