Categories: Perl

http-sniffer/

Решил вот написать свой HTTP сниффер. Не то, чтобы существующие решения, всякие там FireBug, Wireshark, tcpdump и urlsnarf , плохо работали. Просто какие-то они не совсем удобные или не всегда делают то, что мне действительно нужно.

Ну как «решил написать» — как обычно пишутся программы на Perl. Я взял модули Net::Pcap и Sniffer::HTTP, набросал графический интерфейс в wxFormBuilder и связал сии компоненты синей изолентой с помощью пары сотен строк кода. В результате получилась такая программа:

Так сниффер, который я условно назвал HttpSniff, выглядит в Xubuntu (CLI версия также предусмотрена). Слева отображается запрос, справа — ответ сервера, внизу представлен лог всех HTTP запросов. Если запросов посылается много, лишние можно скрыть с помощью фильтров:

На данном скриншоте программа запущена уже под Windows, что как бы намекает на ее кроссплатформенность. Обратите внимание, что проверка, соответствует ли хост правилу фильтрации, производится следующим образом:

$host .= ‘$’ ;
for my $hp ( @ { $hp_list } ) {
$host_match = ( $hp -> { host } eq ‘*’ ) || ( index ( $host , $hp -> { host } ) == 0 ) ;
# …
}

В итоге строке «1.2.3.» соответсвуют все хосты в подсети 1.2.3/24 , а строке «1.2.3.4» — как адрес 1.2.3.4, так и 1.2.3.49. Если требуется указать точный адрес, его следует ввести с долларом на конце, например «1.2.3.4$». Костыль, наверное, но пока программа работает так.

Для запуска сниффера вам потребуются библиотека wxWidgets, установку которой я уже как-то описывал , а также несколько модулей, названия которых вы можете посмотреть в начале скрипта. Если не ошибаюсь, все модули, кроме Net::Pcap, без проблем устанавливаются с помощью утилиты cpan.

Под FreeBSD модуль Net::Pcap устанавливается так:

pkg_add -r p5-Net-Pcap

Под Debian/Ubuntu:

sudo apt-get install libnet-pcap-perl

Под Windows придется установить WinPcap . Из дистрибутивов Perl я бы рекомендовал CitrusPerl, поскольку с ним в комплекте идет wxPerl. Модуль Net::Pcap под Windows ставится так:

ppm install http: // www.bribes.org / perl / ppm / Net-Pcap.ppd

Следует обратить внимание на несколько «особенностей» в работе HttpSniff. Во-первых, HTTPS запросы он не перехватывает — это вам не FireBug. Зато он умеет отслеживать запросы, посылаемые Flash, чем могут похвастаться не все браузеры. Во-вторых, я замечал, что при большом объеме трафика (скажем, при включенных торрентах) сниффер может «терять» часть запросов. Я так и не смог понять, как решить эту проблему.

Наконец, сниффер основан на модуле Sniffer::HTTP, который на данный момент, вообще-то говоря, еще сыроват. Во время работы он не только сыпет всякие варнинги, но и порой бросает такие исключения:

Can’t call method «scheme» on an undefined value at … line 251

По этой причине мне пришлось обернуть вызов метода handle_eth_packet в eval. Других косяков я пока не замечал. В целом, сниффер работает вполне сносно.

Полную версию исходников к посту можно скачать здесь .

Дополнение: Также вас может заинтересовать заметка Перехват сетевого трафика при помощи библиотеки libpcap .

admin

Share
Published by
admin
Tags: Perl

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

3 дня ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago