Эта статья рассчитана, для новичков. И так начнем. Что такое сниффер Снифферы - это программы, которые перехватывают весь сетевой трафик. Они могут перехватывать и расшифровывать имена и пароли пользователей, конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в целом. Известно, что в большинстве протоколов передачи данных ( FTP , POP, HTTP, telnet ) секретная информация между клиентом и сервером передаётся открытым текстом. Поэтому, не составляет большого труда получить доступ к такой информации. Методы применения sniff'инга Sniff'инг - один из наиболее популярных видов атаки. Sniff'инг - один из наиболее популярных видов атаки, используемых хакерами. Наибольшую известность приобрел сниффер Esniff.c - очень маленький, разработанный для работы на SunOS, занимался тем, что вылавливал первые 300 байтов telnet, ftp и rlogin сессий. Существует множество ethernet sniff'еров, здесь лишь некоторые из них: sniffers для систем Unix SunOS: Esniff.c | Etherfind | Snoop (ftp://playground.sun.com/) DEC Unix: tcpdump OSF Unix: faq on BPF suppport DEC Ultrix: tcpdump | faq on BPF suppport Solaris: tcpdump | Snoop ( ftp://playground.sun.com/) | solsniffer.c FreeBSD: ftp://gatekeeper.dec.com/pub/BSD/FreeBSD/FreeBSD-current/src/contrib/tcpdump/ NetBSD: ftp://gatekeeper.dec.com/pub/BSD/NetBSD/NetBSD-current/src/usr.sbin/ Linux: ftp://sunsite.unc.edu/pub/Linux/system/Network/management/ | Linsniffer 0.03.9 SGI Irix: nfswatch | Etherman | tcpdump HP/UX: nettl (monitor) | netfmt (display) | nfswatch Основы передачи данных в сети Каждому устройству в сети Ethernet, соответствует уникальный шестибайтовый MAC -адрес ( Media Access Control). Единицей передачи данных, в такой сети является кадр ( frame ), который имеет определённую структуру и несёт в себе информацию о получателе, отправителе и самих данных. Кадр может иметь размер, примерно от 60 до 1514 байт, из них первые 14 байт являются служебными. Когда требуется передать большое количество данных, они разбиваются на фрагменты и последовательно направляются в сеть. Кадр передаётся по сети и получает его каждое устройство этой сети. Значение поля структуры с именем type определяет тип и версию в кадре. Завершающая секция кадра служит для проверки целостности передаваемых данных и использует код циклического контроля ( CRC 32 - cyclic redundancy check ). Это мощная хэш-функция, для выявления искажённости числовых данных. Обычно она аппаратно реализована в сетевой плате. В качестве данных может быть IP -пакет или ARP -пакет. ARP ( address resolution protocol ) - это служебный вспомогательный протокол, который осуществляет, трансляцию MAC -адресов в логические IP -адреса на основе широковещательной рассылки запросов. Для доставки пакетов в сети, нужно определить адрес узла назначения. Для этого существует ARP - протокол автоматического определения адресов ( IP <=> MAC ). Когда компьютеру нужно начать обмен данными, он ищет MAC -адрес получателя, затем IP -адрес в ARP-таблице. Если для нужного IP-адреса не найден соответствующий MAC -адрес, то посылается широковещательный запрос ARP, содержащий искомый IP-адрес назначения, а MAC-адрес для широковещательной рассылки заполнен единицами FF:FF:FF:FF:FF:FF. Целевой хост узнает свой IP-адрес, обрабатывает запрос и посылает ответ. Система готова к пересылке данных по локальной сети. IP –пакеты Пакет состоит из заголовка, служебной информации ( options ) и данных. На языке Си этот заголовок выглядит, в виде такой структуры: Для нас особый интерес представляют поля заголовка protocol, src и dest . Два последних поля - это хорошо известные IP -адреса отправителя и получателя пакета. Например, шестнадцатеричное значение адреса 0 x 0000140 A соответствует 10.20.0.0. Поскольку в сети большое количество пакетов, то их лучше отфильтровывать. Критериями фильтрации могут быть IP -адреса, тип вышестоящего протокола ( TCP , UDP , ICMP , PUP ), а также содержимое пакета. Функции фильтрации полезны, так как не только ограничивают собираемую программой информацию, но и просто обеспечивают её нормальную работу. Структура программы для прослушивания сети Обладая знаниями, можно приступить к написанию программы, для Windows 2000. Каркас программы может состоять из частей: 1. Драйвер для приёма всех пакетов ( уже установлен в ОС ). 2. Буфер для накопления и обработки пакетов. Это может быть простейший массив из байтов. 3. Анализатор пакетов - набор функций, для управления фильтрацией. 4. Декодер-шифратор (например, декодировать данные из BASE64). 5. Автоматизированный редактор пакетов, который по команде, вносит некоторые изменения в пакет и отправляет его обратно в сеть. В начале программы, использующей Windows Sockets, находится код инициализации сетевой библиотеки ( WSAStartup ). Затем следует создание сокета, определение имени и IP-адреса компьютера ( gethostbyname ), с которого запущена программа. В заключение устанавливаются параметры сокета ( bind ). Теперь осталось переключить сокет в режим приёма всех пакетов. Управляющая функция ioctlsocket с параметром-командой SIO_RCVALL включает promiscuous mode. PHP: #include <conio.h> # include < winsock 2. h > # define MAX _ PACKET _ SIZE 0 x 10000 // Буфер для приёма данных static BYTE Buffer[MAX_PACKET_SIZE]; // 64 Kb void main() { WSADATA wsadata; // Инициализация WinSock. SOCKET s; // Слущающий сокет. char name[128]; // Имя хоста (компьютера). HOSTENT* phe; // Информация о хосте. SOCKADDR_IN sa; // Адрес хоста long flag = 1; // Флаг PROMISC Вкл / выкл. // инициализация WSAStartup(MAKEWORD(2,2), &wsadata); s = socket( AF_INET, SOCK_RAW, IPPROTO_IP ); gethostname(name, sizeof (name)); phe = gethostbyname( name ); ZeroMemory( &sa, sizeof (sa) ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = (( struct in_addr *)phe->h_addr_list[0])->s_addr; bind(s, (SOCKADDR *)&sa, sizeof (SOCKADDR)); // Включение promiscuous mode. ioctlsocket(s, SIO_RCVALL, &flag); // Приём IP -пакетов. while ( !_kbhit() ) { int count; count = recv( s, Buffer, sizeof (Buffer), 0 ); // обработка IP- пакета if ( count >= sizeof (IPHeader) ) { IPHeader* hdr = (IPHeader *)Buffer; //что-то делаем с пакетом... } } // Конец работы . closesocket( s ); WSACleanup(); } Для успешной компиляции, следует библиотечный файл " ws 2_32. lib ". Вот и все, что хотелось рассказать в этой статье. Ps: Спасибо всем, кто уделил свое внимание… Удачи (с) cash$$$ !-> http://www1.hut.ru/aneksniff/sniffer2.html (прим. -=lebed=-)
В основной массе копипаст от сюда: http://www1.hut.ru/aneksniff/sniffer2.html Часть от сюда http://sp.sz.ru/sniffers_.html Ввиду практически отсутствующих своих слов автора в статье + чисто теоретическая направленность статьи непозволяет даже к сборнику копипаста её отнести, скорее всё же перенос -> чужие статьи (причина плагиат, копипаст, ссылки на используемый материал не приведены).