Вопрос

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

Это было полезно?

Решение

Примечание:В приведенной ниже информации предположим, что 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

Другие советы

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

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

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

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

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

Итак, правило будет выглядеть примерно так.

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

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

Взгляните на Пастмона. http://pastmon.sourceforge.net

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

http://justniffer.sourceforge.net/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top