Рыбная ловля в локальной сети - sniffering


Пассивный перехват трафика - часть 2


Перевод интерфейса в неразборчивый режим осуществляется посредством IOCTL и выглядит приблизительно так: ioctl(fd, BIOCPROMISC, 0), где fd – дескриптор интерфейса, а BIOCPROMISC – управляющий IOCTL-код. В Solaris'е все осуществляется аналогично, не совпадает только IOCTL-код и устройство называется не bpf, а hme. Похожим образом ведет себя и SUNOS, предоставляющая потоковый драйвер псевдоустройства nit, так же называемый краником в сетевом интерфейсе (NIT – Network Interface Tap). В отличии от пакетного фильтра BPF, потоковый фильтр NIC перехватывает только входящие пакеты, позволяя исходящим прошмыгнуть мимо него. К тому же он намного медленнее работает. Иную схему грабежа трафика реализует LINUX, поддерживающая специальные IOCTL-коды для взаимодействия с сетью на уровне драйверов. Просто создайте сырой сокет вызовом socket (PF_PACKET, SOCK_RAW, int protocol)

и переведите связанный с ним интерфейс в неразборчивый режим –ifr.ifr_flags |= IFF_PROMISC; ioctl (s, SIOCGIFFLAGS, ifr), где s – дескриптор сокета, а ifr – интерфейс.

Ниже приводится полностью готовая к употреблению функция подготавливающая сырой сокет к работе с переводом интерфейса в неразборчивый режим и поддерживающая большое количество различных операционных систем, так то: SUN OS, LUNUX, Free BSD, IRIX и Solaris, выдернутая из сниффера, исходный текст которого можно найти по адресу: http://packetstormsecurity.org/sniffers/gdd13.c.

 

/*========================================================

  Ethernet Packet Sniffer 'GreedyDog' Version 1.30

  The Shadow Penguin Security (http://shadowpenguin.backsection.net)

  Written by UNYUN (unewn4th@usa.net)

 

#ifdef SUNOS4 /*--------< SUN OS4 >-----------*/

#define       NIT_DEV                    "/dev/nit"                               */

#define       DEFAULT_NIC          "le0"                                    */




Начало  Назад  Вперед