Как получить HTTP заголовки с помощью WireShark

Шаг нулевой. Вступительный

Для того, чтобы получить заголовки HTTP запросов и ответов нам понадобится две вещи. Первое — это снифер WireShark. Второе — браузер который наиболее всего соответсвует вашему вкусу. В моем случае выбор пал на FireFox.

Но прежде чем начнем, давайте усвоим несколько вещей:

RFC 2616 (равно как и все остальные RFC) — лучше всего использовать как справочник, а не как учебник по HTTP протоколу.


Большая часть информации, описанной в RFC 2616 никогда Вам не понадобится.


Лучший способ научиться писать программы использующие HTTP-протокол — это посмотреть какие заголовки (и в каких случаях) используют другие аналогичные программы.


Суть всего сказанного сводится к тому, что если ты хочешь начать работу с HTTP-протоколом, то не забивай себе голову ерундой, а просто посмотри как эту же работу делают FireFox, Opera или IE.

Шаг первый. Теоретический

Для того, чтобы браузер мог получать информацию с веб-сервера используется протокол который называется HTTP (Hypertext Transfer Protocol). Данный протокол создавался для решения широкого круга задач, поэтому содержит некоторую избыточность. Например, кроме наиболее часто используемых в вебе методов "GET" и "POST", есть такие методы как "PUT", "DELETE" и другие. Которые, повторюсь, никогда вам не понадобятся.

При обращении к серверу программа-клиент (браузер) направляет запрос, который по сути является обычным текстом и состоит из нескольких строк. Первая строка — это метод, который нужно применить к ресурсу.

Например:
GET http://www.phptips.ru/pages/about HTTP/1.1

Далее идут параметры указанного метода. Так как теоретически параметров может быть очень много, давайте посмотрим какие реально используются браузером.

Шаг второй. Практический

Для того, чтобы не приводить все возможные варианты запросов браузера к веб-серверу. Опишу способ как их можно получить самостоятельно.

Первым делом запускаем снифер WireShark и выбираем устройство которое будем «нюхать». В большенстве случаев — это сетевая карта, через которую идет работа с Интернетом. В появившемся окне сразу начнет сыпаться куча сообщений. Это все запросы которые отправляет и получает ваш компьютер. В зависимости от того сколько запущено сетевых приложений их может быть как очень много, так и очень мало:

Чтобы ограничить этот список в строке «Filter:» вводит аббревиатуру «http» и нажимаем «enter». В итоге у нас остаются только HTTP запросы:


Сейчас снифер собирает все HTTP запросы, которые получает компьютер. Для того, чтобы понять какие запросы уходят на конкретный адрес. Переходим в FireFox и набираем строку «www.phptips.ru», после чего смело жмем на «Enter».

Переключившись обратно на WireShark мы видим кучу сообщений направленных и полученных по HTTP запросу.

Для того, чтобы понять что было отправлено и получено браузером щелкаем правой кнопкой мыши по любому из сообщений и выбираем пункт «Follow TCP Stream». В итоге WireShark анализирует весь трафик и выдает нам ответ в отдельном окне. Где красным помечен запрос, который был отправлен на сервер, а синим ответ, полученный с сервера:

Теперь, когда заголовки получены остается понять, что с ними делать.

Шаг третий. Завершающий

Для начала посмотрим, на запрос, который был направлен на сервер:

GET / HTTP/1.1

Host: www.phptips.ru

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ru,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive


здесь наиболее важны первые две строки: GET и HOST именно по ним, сервер понимает какую страницу нужно отдать клиенту. В данном случае — это корневая страница сайта www.phptips.ru.

Все остальное уже менее важно, в том смысле, что запрос скорее всего был бы корректно обработан и без оставшихся строк. Здесь браузер указывает информацию о себе (User-agent), в каком виде браузер готов принять ответ (accept), на каком языке может быть выдан контент (accept-language), как закодировать ответ (Accept-Encoding), в какой кодировке должно быть содержимое страницы (Accept-Charset), что соединение может быть не разорвано после передачи страницы (keep-alive).

Чтобы узнать о данных параметрах более подробно можно воспользоваться RFC.

Теперь об ответе сервера на данный запрос. Первой строкой идет информация о том, что страница найдена (HTTP/1.1 200 OK), а дальше параметры ответа. В качестве задания для самопроверки, рекомендую самостоятельно узнать, что это за параметры.

Вроде с одним запросом более или менее разобрались, что же делать дальше? А дальше нужно попробовать выполнить разные запросы в браузере — сходить на разные сайты или страницы, заполнить поисковую форму или форму регистрации. После чего внимательно проанализировать какие заголовки используются браузером в том или ином случае. В итоге их окажется не так, много. И работать с этим набором будет легко.
  • 0
  • 6 января 2010, 02:24
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.