Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В различных операционных системах этот механизм реализуется по-разному. В Linux, начиная с версии 2.2, появились поддержка пакетных сокетов, предназначенных для взаимодействия с сетью на уровне драйверов и создаваемых вызовом:
socket (PF_PACKET, int type, int protocol)
где type может принимать значения SOCK_RAW («сырой» сокет) или SOCK_DGRAM («сухой» сокет с удаленными служебными заголовками). Вызов:
ifr.ifr_flags |= IFF_PROMISC; ioctl (s, SIOCGIFFLAGS, ifr)
активирует неразборчивый режим, где ifr – интерфейс, к которому сокет был привязан сразу после его создания (подробнее об этом можно прочитать в статье В. Мешкова «Анализатор сетевого трафика», опубликованной в октябрьском номере журнала «Системный администратор» за 2002 год).
Под BSD можно открыть устройство «/dev/bpf» и после его перевода в неразборчивый режим:
ioctl(fd, BIOCPROMISC, 0)
слушать пролетающий мимо узла трафик. В Solaris все осуществляется аналогично, только IOCTL-коды немного другие, и устройство называется не bpf, а hme. Аналогичным образом ведет себя и SUN OS, где для достижения желаемого результата приходится отрывать устройство nit.
Короче говоря, эта тема выжата досуха и никому
уже не интересна. Замечательное руководство по программированию снифферов (правда,
на французском языке) можно найти на
Подавляющее большинство статей, с которыми мне приходилось встречаться, описывали лишь одну, ну максимум две операционные системы, совершенно игнорируя существование остальных. Приходилось открывать несколько статей, одновременно и попеременно мотаться между ними на предмет выяснения: а под Linux это как? А под BSD? А под Solaris? От этого в голове образовывался такой кавардак, что от прочитанного материала не оставалось и следа, а компилируемый код содержал огромное количество фатальных ошибок, даже и не пытаясь компилироваться.
Чтобы не мучить читателя сводными таблицами (от
которых больше вреда, чем пользы), ниже приводится вполне работоспособная
функция абстракции, подготавливающая сокет (дескриптор устройства) к работе и
поддерживающая большое количество различных операционных систем, как то:
SUN OS, Lunux, FreeBSD, IRIX и Solaris. Полный исходный текст сниффера
можно стащить отсюда:
Листинг 5. Создание сырого сокета (дескриптора) и перевод его в неразборчивый режим
/*========================================================
Ethernet Packet Sniffer 'GreedyDog' Version 1.30
The Shadow Penguin Security