Найти - Пользователи
Полная версия: Сбор IP пакетов
Начало » Python для новичков » Сбор IP пакетов
1 2
dobryak
Здравствуйте. Написал снифер на основе SOCK_RAW. Получаю с помощью recv() очередной пакет. Парсить заголовок IP пакета научился. Теперь возникла проблема в сборе IP пактов в один HTTP ответ, то есть допустим HTTP ответ разбивается на несколько IP пакетов начало его я определить могу (По наличию в data IP пакета HTTP заголовков), далее просто по порядковому id IP пакета присоединяю data. Вопрос как определить когда HTTP ответ закончился? Заранее благодарен за Ваши ответы!
Андрей Светлов
FIN флаг у IP пакета должен быть установлен.
dobryak
Андрей Светлов
А Вы могли бы поподробнее мне обьяснить. Где этот флаг мне смотреть?
Андрей Светлов
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
В структуре заголовка IP пакета есть поле флагов. И там есть такой флажок: FIN.
Это - конец соединения.
На самом деле для HTTP все чуть сложее: если клиент и сервер оба поддерживают keep-alive (http://en.wikipedia.org/wiki/HTTP_persistent_connection)
то в соединении может проскочить несколько ответов. Вам нужно научиться их обрабатывать.
dobryak
Андрей Светлов
http://en.wikipedia.org/wiki/Transmissi … l_Protocol
В структуре заголовка IP пакета есть поле флагов. И там есть такой флажок: FIN.
Это - конец соединения.
Дело в том, что я разбирал IP пакет по этой структуре http://en.wikipedia.org/wiki/IPv4. Там есть тоже флаги, они принимают значения 0-2. А где тогда искать “заголовок сегмента TCP”, чтобы его разобрать? Заранее благодарен!
Андрей Светлов
Ооо! Вы вручную парсили?
В IP пакет вкладывается TCP, еще раз привожу ссылку: http://en.wikipedia.org/wiki/Transmission_Control_Protocol
Который в ip пакете идет как data. В котором, в свою очередь, есть свой контент, флаги и прочее.
dobryak
Андрей Светлов
В IP пакет вкладывается TCP, еще раз привожу ссылку: http://en.wikipedia.org/wiki/Transmissi … l_Protocol
Который в ip пакете идет как data. В котором, в свою очередь, есть свой контент, флаги и прочее.
Так вот оказывается что за данные были в каждом IP пакете в поле дата перед HTTP заголовками. Это я так понял и есть TCP сегмент. Большое спасибо за разъяснение.

Андрей Светлов
Ооо! Вы вручную парсили?
Да, вручную. Я вообще PHP программист. Но стала задача написать простой сниффер. На PHP реализовать сниффер такого уровня “невозможно”. А Python начал изучать совсем недавно, вот решил использовать его.
Андрей Светлов
http://code.google.com/p/dpkt/
dobryak
Андрей Светлов
http://code.google.com/p/dpkt/
Спасибо!
dobryak
Распаковал с помощью dpkt TCP сегмент. Во влаге получил 24. Как теперь определить установлен FIN флаг или нет? Заранее благодарен!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB