Обнаружение TCP-соединений путем анализа трафика - PullRequest
0 голосов
/ 02 октября 2018

У меня есть программа C ++, работающая в Windows 7, которая перехватывает весь трафик сетевого уровня и возвращает его обратно в сетевой стек Windows.Теперь мне нужно отслеживать каждый текущий сеанс / соединение TCP и назначать каждый пакет TCP (входящий и исходящий) одному из этих подключений.Обнаружение начала нового соединения не так сложно.Мне просто нужно сканировать каждый пакет TCP и проверить, установлен ли его флаг SYN.Однако я не совсем уверен, как обработать конец соединения, и у меня есть три вопроса:

1.) Обычный способ завершить соединение tcp - это 4-х стороннее рукопожатие с использованием флага FIN.После того, как сторона, которая первой отправила пакет FIN, получает последний ACK другой стороны, ей нужно подождать некоторое время, пока соединение не будет окончательно разорвано.Как долго должен быть этот тайм-аут?Является ли это время ожидания специфичным для Windows?

2.) Как обнаружить полуоткрытые соединения, которые возникают, например, при сбое одной стороны и, следовательно, при невозможности отправки пакета FIN?

3.)Есть ли возможность спросить Windows, если определенное соединение все еще активно или нет?

...