написание http-сниффера
-
20-09-2019 - |
Вопрос
Я хотел бы написать программу для извлечения 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-запросов.