Я агрегирую соединения, проходя через собранный дамп пакетов, собранный с использованием TCPDUMP. Мой код в Ruby.
Код будет различать соединения с использованием 4-х кортежей (SrcIP, SrcPort, DstIP, DstPort)
Теперь, если соединения между одной и той же машиной имеют одинаковый IP-адрес и один и тот же порт, тогда эти соединения различаются следующим способом.
1. Если время между соединениями больше 2 часов, то это новое соединение
2. Если мы видим, что уже видели FIN или RST, то новый пакет от нового соединения
3. Если количество SYN больше двух (по одному в каждом направлении), то это новое соединение.
Ситуация, на которую я не могу ответить, следующая
Если новое соединение между теми же двумя хостами (имеющее один и тот же 4-кортеж) произошло в течение 2 часов, и TCPDUMP отбросил предыдущие пакеты RST или FIN, а также отбросил 2 или более пакетов SYN из обоих соединений. В этом случае ни одно из указанных выше условий не будет работать. И единственный набор информации, который остается, - это время нового набора пакетов, Seq Nos, Ack Nos и размер данных. Просто используя эту информацию, я могу выяснить, является ли соединение новым или старым?
Я пытался увидеть, есть ли паттерн в последовательности No или между SeqNo и AckNo, но ни один из них не является определенным.