Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Создаем продвинутый боевой софт!

Иван Скляров

Хакер, номер #096, стр. 096-080-1


(Sklyarov@real.xakep.ru, www.sklyaroff.ru)

Библиотеки libpcap и libnet в действии

На библиотеках libpcap и libnet работают тысячи знаменитых программ, таких как сканер nmap, сниферы tcpdump и Ettercap, система обнаружения атак Snort. Автором библиотеки libnet является бывший редактор легендарного электронного журнала Phrack — Route (Mike Schiffman). А в 55-м номере Phrack библиотеке libnet была посвящена отдельная статья, которая вызвала большой резонанс среди читателей. Что же такого примечательного в этих библиотеках? Вот об этом я тебе сейчас и расскажу, а еще научу писать программы с их использованием.

Libpcap и libnet - это разные библиотеки, предназначенные для разных задач и созданные разными авторами, но, по меткому выражению Майка Шифмана, они являются братьями (или сестрами). Библиотека libpcap предназначена для извлечения пакетов из сети и их анализа. Библиотека libnet используется для обратного действия — для генерации пакетов произвольного формата и отправки в сеть. Библиотека libpcap (Packet Capture library) была создана Ван Якобсоном (Van Jacobson), Крегом Лерисом (Craig Leres) и Стивом Маккеном (Steve McCanne). Твоя программа может задействовать либо только одну из этих библиотек, либо сразу обе.

Все прелести libnet & libpcap

Чтобы осознать всю прелесть этих библиотек, нужно попробовать программировать без них. Я попробовал, поэтому могу поделиться опытом. Допустим, тебе нужно написать снифер с поддержкой фильтрации пакетов, позволяющей задавать протокол, порт, IP-адрес, флаги или какие-либо другие данные пакетов, которые требуется захватывать. Создание в программе полноценного фильтра может занять не один день или даже месяц. С использованием же библиотеки libpcap мощный фильтр, сравнимый с тем, что присутствует в утилите tcpdump, встраивается в программу буквально с помощью нескольких строчек кода.

Другой пример. Тебе нужно написать сканер портов с поддержкой SYN-, FIN-, X-mas-, Null-, ACK- и UDP-сканирования. Для этого необходимо самостоятельно формировать и заполнять поля заголовков сетевых пакетов, рассчитывать контрольные суммы и т.д. С библиотекой libnet все значительно проще: CRC и основные поля она заполнит сама, а подробные мануалы, которые идут вместе с библиотекой, помогут тебе подобрать оставшееся. Не жизнь, а просто сказка!

У библиотек libpcap и libnet есть еще один большой плюс - они реализованы для многих операционных систем, в том числе для Windows, поэтому программа, основанная на этих библиотеках, будет переносимой.

Теперь рассмотрим, как работать с каждой из этих библиотек в отдельности.

Мы напишем 3 учебных программы: пассивный снифер с поддержкой библиотеки libpcap, ARP-спуфер с поддержкой библиотеки libnet и простой сканер портов, использующий сразу обе эти библиотеки. Все исходники ты найдешь на DVD к журналу.

Перед началом работы библиотеки должны быть установлены в системе. В этом нет ничего сложного. В *nix-системах библиотеки libpcap и libnet обычно идут с установочными дистрибутивами. В Windows в среде Microsoft Visual C++ после установки библиотек тебе понадобится выполнить настройку переменных среды для обеспечения возможности компиляции программ. В самих архивах с библиотеками идут мануалы с описаниями всех функций, заголовочных файлов и т.д., - к ним тебе следует обращаться за всеми деталями. Я писал и тестировал все примеры программ для этой статьи только под Linux.

Содержание  Вперед на стр. 096-080-2