Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 23, 2011 20:07:57

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Здравствуйте. Написал снифер на основе SOCK_RAW. Получаю с помощью recv() очередной пакет. Парсить заголовок IP пакета научился. Теперь возникла проблема в сборе IP пактов в один HTTP ответ, то есть допустим HTTP ответ разбивается на несколько IP пакетов начало его я определить могу (По наличию в data IP пакета HTTP заголовков), далее просто по порядковому id IP пакета присоединяю data. Вопрос как определить когда HTTP ответ закончился? Заранее благодарен за Ваши ответы!



Офлайн

#2 Июнь 23, 2011 21:16:31

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сбор IP пакетов

FIN флаг у IP пакета должен быть установлен.



Офлайн

#3 Июнь 23, 2011 21:24:44

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Андрей Светлов
А Вы могли бы поподробнее мне обьяснить. Где этот флаг мне смотреть?



Офлайн

#4 Июнь 23, 2011 21:46:07

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сбор IP пакетов

http://en.wikipedia.org/wiki/Transmission_Control_Protocol
В структуре заголовка IP пакета есть поле флагов. И там есть такой флажок: FIN.
Это - конец соединения.
На самом деле для HTTP все чуть сложее: если клиент и сервер оба поддерживают keep-alive (http://en.wikipedia.org/wiki/HTTP_persistent_connection)
то в соединении может проскочить несколько ответов. Вам нужно научиться их обрабатывать.



Офлайн

#5 Июнь 23, 2011 22:52:08

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Андрей Светлов
http://en.wikipedia.org/wiki/Transmissi … l_Protocol
В структуре заголовка IP пакета есть поле флагов. И там есть такой флажок: FIN.
Это - конец соединения.
Дело в том, что я разбирал IP пакет по этой структуре http://en.wikipedia.org/wiki/IPv4. Там есть тоже флаги, они принимают значения 0-2. А где тогда искать “заголовок сегмента TCP”, чтобы его разобрать? Заранее благодарен!



Офлайн

#6 Июнь 23, 2011 23:46:17

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сбор IP пакетов

Ооо! Вы вручную парсили?
В IP пакет вкладывается TCP, еще раз привожу ссылку: http://en.wikipedia.org/wiki/Transmission_Control_Protocol
Который в ip пакете идет как data. В котором, в свою очередь, есть свой контент, флаги и прочее.



Офлайн

#7 Июнь 23, 2011 23:58:18

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Андрей Светлов
В IP пакет вкладывается TCP, еще раз привожу ссылку: http://en.wikipedia.org/wiki/Transmissi … l_Protocol
Который в ip пакете идет как data. В котором, в свою очередь, есть свой контент, флаги и прочее.
Так вот оказывается что за данные были в каждом IP пакете в поле дата перед HTTP заголовками. Это я так понял и есть TCP сегмент. Большое спасибо за разъяснение.

Андрей Светлов
Ооо! Вы вручную парсили?
Да, вручную. Я вообще PHP программист. Но стала задача написать простой сниффер. На PHP реализовать сниффер такого уровня “невозможно”. А Python начал изучать совсем недавно, вот решил использовать его.



Офлайн

#8 Июнь 24, 2011 00:33:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сбор IP пакетов

Офлайн

#9 Июнь 24, 2011 01:35:57

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Андрей Светлов
http://code.google.com/p/dpkt/
Спасибо!



Офлайн

#10 Июнь 24, 2011 14:33:43

dobryak
От:
Зарегистрирован: 2011-06-10
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор IP пакетов

Распаковал с помощью dpkt TCP сегмент. Во влаге получил 24. Как теперь определить установлен FIN флаг или нет? Заранее благодарен!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version