написание http сниффера - PullRequest
       33

написание http сниффера

2 голосов
/ 15 января 2010

Я хотел бы написать программу для извлечения URL-адресов веб-сайтов, посещаемых системой (IP-адрес) с помощью захвата пакета. Я думаю, что этот URL будет находиться в разделе данных (т.е. не в заголовках - ethernet). / ip / tcp-udp) .. (Такие программы иногда называют http sniffers, я не должен использовать какой-либо доступный инструмент). Как новичок, я только что прошел через эту базовую программу-сниффер: sniffex.c .. Может кто-нибудь сказать, пожалуйста, в каком направлении мне следует двигаться ..

Ответы [ 6 ]

4 голосов
/ 15 января 2010

Примечание. В приведенной ниже информации предположим, что GET также включает в себя POST и другие методы HTTP.

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

Попробуйте посмотреть заголовок Host, если он есть, а также то, что фактически запрашивается GET. GET может быть либо полным URL, либо просто именем файла на сервере.

Также обратите внимание, что это не имеет ничего общего с получением доменного имени с IP-адреса. Если вы хотите доменное имя, вы должны копаться в данных.

Быстрый пример на моей машине от Wireshark:

GET http://www.google.ca HTTP/1.1
Host: www.google.ca
{other headers follow}

Другой пример, не из браузера, а только с путем в GET:

GET /ccnet/XmlStatusReport.aspx HTTP/1.1
Host: example.com

Во втором примере фактический URL-адрес http://example.com/ccnet/XmlStatusReport.aspx

4 голосов
/ 15 января 2010

Нет, информации недостаточно. Один IP-адрес может соответствовать любому числу доменных имен, и каждый из этих доменов может иметь буквально бесконечное количество URL-адресов.

Тем не менее, посмотрите на gethostbyaddr (3), чтобы узнать, как выполнить обратный просмотр DNS на ip, чтобы хотя бы получить каноническое имя для этого ip.

Обновление: по мере того как вы редактировали вопрос, @aehiilrs имеет намного лучший ответ r.

0 голосов
/ 08 июля 2011

Я искал что-то подобное и наткнулся на это. Надеюсь, что это может быть хорошим началом, если вы используете linux - justniffer.

http://justniffer.sourceforge.net/

Существует также хороший скрипт на python для захвата трафика http, который поможет вам, если вы хотите получать информацию из HTTP-запросов.

0 голосов
/ 16 января 2010

Посмотрите на PasTmon. http://pastmon.sourceforge.net

0 голосов
/ 15 января 2010

Если вы используете Linux, вы можете добавить фильтр в iptables, чтобы добавить новое правило, которое ищет пакеты, содержащие HTTP-запросы на получение и получение URL-адреса.

Так что правило будет выглядеть так.

Для каждого пакета, идущего на порт 80 с локального хоста -> проверить, содержит ли пакет запрос GET -> получить URL и сохранить его

Этот подход должен работать во всех случаях, даже для заголовков HTTPS.

0 голосов
/ 15 января 2010

Что вам может потребоваться, так это обратный поиск DNS. Для этого вызовите gethostbyaddr.

...