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