Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Восстановить TCP соединение по списку пакетов


Автор: Leksey 12.3.2009, 22:54
Есть следующая задача - 

Дамп файл , созданный программой tcpdump, нужно проанализировать и выдать следующую информацию - 
Для каждого tcp соединения выдать набор пар размер пакета и сколько раз пакеты такого размера были отправлены/приняты.
 
  Собственно мне не совсем понятна формулировка и что такое tcp соединение. В моем понимании это канал который устанавливается при открытии сокета. Но как эту информацию можно получить из списка пакетов?

Автор: jonie 13.3.2009, 09:09
C++ никогда не слышал про TCP, каналы и сокеты. Может быть вам стоит почитать учебник по сетям?

Автор: mrbrooks 13.3.2009, 09:48
Как я пологаю автор собирается писать что то типа снифера. Ну дык по этому и поиск в гугл. Но для начала автор должен учесть замечания 
jonie  smile 

Автор: azesmcar 13.3.2009, 09:52
Для сниффера могу посоветовать pcap lib. Если это конечно не спортивный интерес.

Автор: Leksey 13.3.2009, 10:39
Снифер как раз мне не надо писать. 
Учебник по сетям я читал как-то несколько лет назад.
Просто интересно было узнать может кто-нибудь сталкивался с похожей задачей, какие поля tcp пакетов можно использовать чтобы понять что они из одного соединения и тп.

Автор: vinick 13.3.2009, 11:19
Цитата(Leksey @  13.3.2009,  10:39 Найти цитируемый пост)
, какие поля tcp пакетов можно использовать чтобы понять что они из одного соединения и тп. 

TCP соединение однозначно определяется по 4 параметрам - адрес и порт отправителя, адрес и порт получателя.

Автор: Leksey 13.3.2009, 11:48
Спасибо. 

Но dump может содержать несколько tcp соединений по одним адресам и порту. Такая информация может быть восстановлена?

Автор: vinick 13.3.2009, 12:39
Цитата(Leksey @  13.3.2009,  11:48 Найти цитируемый пост)
Но dump может содержать несколько tcp соединений по одним адресам и порту.

Если дамп достаточно большой, то такая ситуация в теории возможна. Можно анализировать поток на наличие спец-пакетов означающих разрыв соединения, типа FIN или RST. Подробнее лучше посмотреть в спецификации протокола.

Автор: Олег2005 13.3.2009, 21:10
Для TCP имеется понятие TCP-сессия.
Нормальная сессия всегда начинается сегментом с флагом SYN и заканчивается флагом FIN.
Сессию можно восстановить с помощью сниффера -  что и делают профессиональные сниффера, такие как CommView.
Вам как видно восстанавливать не надо - тогда просто парсить текст дампа.
Флаги S и F видны в тексте дампа. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)