Снифферы. Лучшие инструменты пен-тестера: сниферы и работа с пакетами Программы снифферы обзор


IP Sniffer - программа, которая позволяет следить за пакетами, проходящими через Internet Protocol (IP). Функционал программы включает в себя возможность декодирования пакетов и их фильтрации.

В эпоху современных технологий и интернета на первое место выходит безопасность. С внешним миром компьютер обменивается цифровой информацией посредством специальных протоколов. Internet Protocol (IP) является одним из самых востребованных и популярных благодаря безопасности и высокой скорости передачи данных.

Именно с его появлением, в 1981 году, компьютера получили возможность посылать друг другу сообщения в виде пакетов с данными. Сниффер для Windows предназначен для контроля за трафиком и проверки содержимого пакетов. Таким образом, эта утилита является дополнительным способом обезопасить свой компьютер. Скачать IP Sniffer является лучшим решением, держать под контролем трафик и все потоки информации.

Скачать IP Sniffer бесплатно

IP Sniffer для Windows (1,4 МБ)

Основные характеристики IP Sniffer:

  • Многофункциональность;
  • Безопасность;
  • Небольшой размер;
  • Интуитивно понятный интерфейс.

Последняя версия сниффер имеет удобный и простой интерфейс. Программа позволяет просматривать, какие IP-адреса чаще всего используются, какие чаще других подключаются к вашей машине. Удобно можно мониторить объем трафика. Также можно принудительно завершать то или иное подключение с помощью функции Netstat. Cкачать сниффер на компьютер рекомендуется если перед пользователем стоит задача перехвата трафика между хостами. Это позволяет делать функция Snoofing, которая в числе многих поддерживает популярный протокол ARP. Также востребованными функциями сниффер на русском языке являются пинг сети, возможность преобразовывать IP-адрес в Hostname и обратно, поиск DHCP серверов. Также с её помощью можно получить данные Netbios для указанного IP адреса.

Скачать бесплатно сниффер рекомендуется, если пользователь хочет получить надежного помощника в деле контроля над трафиком. Программа не нуждается в установке и дополнительной настройке. Использовать её можно сразу после загрузки. Интерфейс программы лаконичен и прост. Окна и вкладки расположены так, чтобы использовать было максимально удобно и комфортно. Разработчик постоянно совершенствует и улучшает свой продукт. Обновления выходят регулярно. Программа отличается высокой устойчивостью к любым злонамеренным воздействиям. Наш портал всем посетителям предоставляет возможность скачать программу сниффер без регистрации и SMS.

SmartSniff - TCP/IP сниффер, который позволяет захватывать пакеты, которые проходят через ваш сетевой адаптер и просматривать захваченные данные как последовательность общения между клиентом и сервером. Просмотр содержимого пакетов возможен в формате ASCII (для текстовых протоколов, таких как HTTP, SMTP, POP3 и FTP) и в виде HEX кода. Для использования SmartSniff установка не требуется, просто распакуйте архив и запустите программу. Разработчик распространяет SmartSniff совершенно бесплатно.

Ключевые особенности и функции

SmartSniff предоставляет три способа захвата TCP/IP пакетов:

1. Raw Sockets. Позволяет захватывать сетевые пакеты без установки драйвера захвата. Но этот метод имеет ряд ограничений:

  • исходящие UDP и ICMP пакеты не отслеживаются;
  • в Windows XP SP1 не отслеживаются вообще благодаря ошибке Microsoft, которая присутствует в SP1. Эта ошибка была устранена в пакете обновлений SP2, но опять появилась в Windows Vista;
  • в Windows Vista SP1 отслеживаются только UDP пакеты.

2. С помощью драйвера захвата пакетов WinPсap. Позволяет фиксировать все пакеты под всеми операционными системами Windows. Этот способ является предпочтительным и для его использования необходимо установить драйвер WinPcap.

3. Microsoft Network Monitor Driver (только для Windows 2000/XP/2003). Microsoft предоставляет бесплатный драйвер для захвата пакетов, но он не установлен по умолчанию, поэтому его нужно установить. Доступны два способа для установки Microsoft Network Monitor Driver:

  • с диска Windows;
  • скачать Windows XP Service Pack 2 Support Tools. Один из инструментов в этом пакете - netcap.exe. Запустите его, и драйвер установится автоматически.

Режим просмотра.
SmartSniff имеет три режима просмотра пакетов: Автоматический, ASCII, HEX. При автоматическом режиме SmartSniff проверяет первый байт захваченных данных – если он содержит символ меньше чем 0x20, то он выводит данные в режиме HEX, иначе в режиме ASCII. Режим показа содержимого пакетов можно легко переключить, выбрав нужный в меню.

Экспорт данных.
Верхняя панель: Вы можете выбрать нужные элементы в верхней панели, скопировать в буфер обмена и вставить в Excel или электронную таблицу OpenOffice.org. Также можно сохранить их в формате text/HTML/XML (используя "Save Packet Summaries").
Нижняя панель: Можно выделить нужный текст, и вставить его в нужный текстовый редактор или сохранить его прямо в текстовый файл, файл HTML или RAW файл, используя опцию "Export TCP/IP Streams".

Что нового в этой версии?

2.26 (20.07.2016)

  • теперь программа автоматически загружает новую версию драйвера WinPCap с https://nmap.org/npcap/ если он установлен в системе;
  • SmartSniff теперь пытается загрузить DLL Network Monitor Driver 3.x (NmApi.dll) в соответствии с путем, обозначенным в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Netmon3. Это должно решить проблему с загрузкой Network Monitor Driver 3.x на некоторых системах.

В этой статье мы рассмотрим создание простого сниффера под ОС Windows.
Кому интересно, добро пожаловать под кат.

Введение

Цель: написать программу, которая будет захватывать сетевой трафик (Ethernet, WiFi), передающийся по протоколу IP.
Средства: Visual Studio 2005 или выше.
Подход, который здесь описан, не принадлежит лично автору и успешно применяется во многих коммерческих, а также категорически бесплатных программах (привет, GPL).
Сей труд предназначен прежде всего для новичков в сетевом программровании, которые, однако, имеют хотя бы базовые знания в области сокетов вообще, и windows-сокетов в частности. Здесь я часто буду писать общеизвестные вещи, потому что предметная область специфическая, если что-то пропустить - в голове будет каша.

Надеюсь, Вам будет интересно.

Теория (читать не обязательно, но желательно)

В данный момент подавляющее большинство современных информационных сетей базируются на фундаменте стека протоколов TCP/IP. Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) - собирательное название для сетевых протоколов разных уровней, используемых в сетях. В настоящей статье нас будет интересовать в основном протокол IP - маршрутизируемый сетевой протокол, используемый для негарантированной доставки данных, разделяемых на так называемые пакеты (более верный термин – дейтаграмма) от одного узла сети к другому.
Особый интерес для нас представляют IP-пакеты, предназначенные для передачи информации. Это достаточно высокий уровень сетевой OSI-модели данных, когда можно обстрагироваться от устройства и среды передачи данных, оперируя лишь логическим представлением.
Совершенно логичным является то обстоятельство, что рано или поздно должны были появится инструменты для перехвата, контроля, учета и анализа сетевого трафика. Такие средства обычно называется анализаторами трафика, пакетными анализаторыми или снифферами (от англ. to sniff - нюхать). Это - сетевой анализатор трафика, программа или программно-аппаратное устройство, предназначенное для перехвата и последующего анализа, либо только анализа сетевого трафика, предназначенного для других узлов.

Практика (разговор по существу)

На данный момент создано достаточно много программного обеспечения для прослушивания трафика. Наиболее известный из них: Wireshark . Естественно, пожинать его лавры цель не стоит - нас интересует задача перехвата трафика методом обычного «прослушивания» сетевого интерфейса. Важно понимать, что мы не собираемся заниматься взломом и перехватывать чужой трафик. Нужно всего лишь просматривать и анализировать трафик, который проходит через наш хост.

Для чего это может понадобиться:

  1. Смотреть текущий поток трафика через сетевое соеднинение (входящий/исходящий/всего).
  2. Перенаправлять трафик для последующего анализа на другой хост.
  3. Теоретически, можно попытаться применить его для взлома WiFi-сети (мы ведь не собираемся этим заниматься?).
В отличие от Wireshark, который базируется на библиотеке libpcap/WinPcap, наш анализатор не будет использовать этот драйвер. Чего уж там, у нас вообще не будет драйвера, и свой NDIS(о ужас!) мы писать не собираемся. Про это можно прочитать в этом топике . Он будет просто пассивным наблюдателем, использующим только библиотеку WinSock. Использование драйвера в данном случае избыточно.

Как так? Очень просто.
Ключевым шагом в превращении простого сетевого приложения в сетевой анализатор является переключение сетевого интерфейса в режим прослушивания (promiscuous mode), что и позволит ему получать пакеты, адресованные другим интерфейсам в сети. Этот режим заставляют сетевую плату принимать все кадры, вне зависимости от того, кому они адресованы в сети.

Начиная с Windows 2000 (NT 5.0) создать программу для прослушивания сегмента сети стало очень просто, т.к. ее сетевой драйвер позволяет перевести сокет в режим приёма всех пакетов.

Включение неразборчивого режима
long flag = 1; SOCKET socket; #define SIO_RCVALL 0x98000001 ioctlsocket(socket, SIO_RCVALL, &RS_Flag);
Наша программа оперирует IP-пакетами, и использует библиотеку Windows Sockets версии 2.2 и «сырые» сокеты (raw sockets). Для того чтобы получить прямой доступ к IP-пакету, сокет нужно создавать следующим образом:
Создание сырого сокета
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Здесь вместо константы SOCK_STREAM (протокол TCP) или SOCK_DGRAM (протокол UDP), мы используем значение SOCK_RAW . Вообще говоря, работа с raw sockets интересна не только с точки зрения захвата трафика. Фактически, мы получаем полный контроль за формированием пакета. Вернее, формируем его вручную, что позволяет, например, послать специфический ICMP-пакет…

Идем дальше. Известно, что IP-пакет состоит из заголовка, служебной информации и, собственно, данных. Советую заглянуть сюда , чтобы освежит знания. Опишем в виде структуры IP-заголовок (спасибо отличной статье на RSDN ):

Описание структуры IP-пакета
typedef struct _IPHeader { unsigned char ver_len; // версия и длина заголовка unsigned char tos; // тип сервиса unsigned short length; // длина всего пакета unsigned short id; // Id unsigned short flgs_offset; // флаги и смещение unsigned char ttl; // время жизни unsigned char protocol; // протокол unsigned short xsum; // контрольная сумма unsigned long src; // IP-адрес отправителя unsigned long dest; // IP-адрес назначения unsigned short *params; // параметры (до 320 бит) unsigned char *data; // данные (до 65535 октетов) }IPHeader;
Главная функция алгоритма прослушивания будет выглядеть следующим образом:
Функция захвата одного пакета
IPHeader* RS_Sniff() { IPHeader *hdr; int count = 0; count = recv(RS_SSocket, (char*)&RS_Buffer, sizeof(RS_Buffer), 0); if (count >= sizeof(IPHeader)) { hdr = (LPIPHeader)malloc(MAX_PACKET_SIZE); memcpy(hdr, RS_Buffer, MAX_PACKET_SIZE); RS_UpdateNetStat(count, hdr); return hdr; } else return 0; }
Здесь все просто: получаем порцию данных с помощью стандартной функции socket-функции recv , а затем копируем их в структуру типа IPHeader .
И, наконец, запускаем бесконечный цикл захвата пакетов:
Захватым все пакеты, которые попадут на наш сетевой интерфейс
while (true) { IPHeader* hdr = RS_Sniff(); // обработка IP-пакета if (hdr) { // печатаем заголовок в консоли } }
Немного оффтопика
Здесь и далее у некоторых важных функций и переменных автор сделал префкис RS_ (от Raw Sockets). Проект делал 3-4 года назад, и была шальная мысль написать полноценную библиотеку для работы с сырыми сокетами. Как это часто бывает, после получения сколь-нибудь значимых(для автора) результатов, энтузиазм угас, и дальше учебного примера дело не полшло.

В принципе, можно пойти дальше, и описать заголовки всех последующих протоколов, находящихся выше. Для этого необходимо анализировать поле protocol в структуре IPHeader . Посмотрите на пример кода (да, там должен быть switch, чёрт возьми!), где происходит раскрашивание заголовка в зависимости от того, какой протокол имеет пакет, инкапсулированный в IP:

/* * Выделение пакета цветом */ void ColorPacket(const IPHeader *h, const u_long haddr, const u_long whost = 0) { if (h->xsum) SetConsoleTextColor(0x17); // если пакет не пустой else SetConsoleTextColor(0x07); // пустой пакет if (haddr == h->src) { SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_RED | FOREGROUND_INTENSITY); // "родной" пакет на отдачу } else if (haddr == h->dest) { SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_GREEN | FOREGROUND_INTENSITY); // "родной" пакет на прием } if (h->protocol == PROT_ICMP || h->protocol == PROT_IGMP) { SetConsoleTextColor(0x70); // ICMP-пакет } else if(h->protocol == PROT_IP || h->protocol == 115) { SetConsoleTextColor(0x4F); // IP-in-IP-пакет, L2TP } else if(h->protocol == 53 || h->protocol == 56) { SetConsoleTextColor(0x4C); // TLS, IP with Encryption } if(whost == h->dest || whost == h->src) { SetConsoleTextColor(0x0A); } }

Однако это существенно выходит за рамки этой статьи. Для нашего учебного примера вполне достаточно будет посмотреть ip-адреса хостов, с которых и на которые идет трафик, и посчитать его количество в единицу времени(готовая программа в архиве в конце статьи).

Для того, чтобы отобразить данные IP-заголовка, необходимо реализовать функцию преобразования заголовка (но не данных) дейтаграммы в строку. В качестве примера реализации, можно предложить такой вариант:

Преобразование IP-заголовка в строку
inline char* iph2str(IPHeader *iph) { const int BUF_SIZE = 1024; char *r = (char*)malloc(BUF_SIZE); memset((void*)r, 0, BUF_SIZE); sprintf(r, "ver=%d hlen=%d tos=%d len=%d id=%d flags=0x%X offset=%d ttl=%dms prot=%d crc=0x%X src=%s dest=%s", BYTE_H(iph->ver_len), BYTE_L(iph->ver_len)*4, iph->tos, ntohs(iph->length), ntohs(iph->id), IP_FLAGS(ntohs(iph->flgs_offset)), IP_OFFSET(ntohs(iph->flgs_offset)), iph->ttl, iph->protocol, ntohs(iph->xsum), nethost2str(iph->src), nethost2str(iph->dest)); return r; }
На основании приведенных выше базовых сведений, получается вот такая небольшая программа (жуткое название ss, сокр. от англ. simple sniffer), реализующая локальное прослушивание IP-трафика. Интерфейс ее приведен ниже на рисунке.

Исходный и бинарный код предоставляю как есть, таким как он был несколько лет назад. Сейчас мне на него страшно смотреть, и все же, он вполне читабельный (конечно же, нельзя быть таким самоуверенным). Для компиляции будет достаточно даже Visual Studio Express 2005.

Что у нас получилось в итоге:

  • Сниффер работает в режиме пользователя, однако требует привилегии администратора.
  • Пакеты не фильтруются, отображаясь как есть (можно добавить настраиваемые фильтры - предлагаю подробно рассмотреть эту тему в следующей статье, если интересно).
  • WiFi-трафик тоже захватывается(все зависит от конкретной модели чипа, у Вас может и не работать, как у меня несколько лет назад), хотя есть AirPcap, которая чудесно это умеет делать, но стоит денег.
  • Весь поток дейтаграмм логируется в файл (см. архив, приложенный в конце статьи).
  • Программа работает в качестве сервера на порту 2000. Можно подключиться с помощью утилиты telnet к хосту и произвести мониторинг потоков трафика. Количество подключений ограничено двадцатью (код не мой, нашел на просторах сети и применял для экспериментов; удалять не стал - жалко)
Спасибо за внимание, проздравляю хабровчан и хабровчанок и всех-всех-всех с наступающим Рождеством!

SmartSniff позволяет перехватить сетевой трафик и отобразить его содержимое в ASCII. Программа захватывает пакеты проходящие через сетевой адаптер и выводит на экран содержание пакетов в текстовом виде (протоколы http, pop3, smtp, ftp) и в виде шестнадцатеричного дампа. Для захвата TCP/IP пакетов SmartSniff использует методики: необработанные сокеты - RAW Sockets, WinCap Capture Driver и Microsoft Network Monitor Driver. Программа поддерживает русский язык и проста в использовании.

Программа сниффер для захвата пакетов


SmartSniff отображает следующую информацию: название протокола, локальный и удаленный адрес, локальный и удаленный порт, локальный узел, название службы, объем данных, общий размер, время захвата и время последнего пакета, длительность, локальный и удаленный МАС адрес, страны и содержание пакета данных. Программа обладает гибкими настройками, в ней реализована функция фильтра захвата, распаковка ответов http, преобразования ip адреса, утилита сворачивается в системный трей. SmartSniff формирует отчет о потоках пакетовв виде HTML страницы. В программе возможно выполнить экспорт потоков TCP/IP.

Что такое Intercepter-NG

Рассмотрим суть функционирования ARP на простом примере. Компьютер А (IP-адрес 10.0.0.1) и компьютер Б (IP-адрес 10.22.22.2) соединены сетью Ethernet. Компьютер А желает переслать пакет данных на компьютер Б, IP-адрес компьютера Б ему известен. Однако сеть Ethernet, которой они соединены, не работает с IP-адресами. Поэтому компьютеру А для осуществления передачи через Ethernet требуется узнать адрес компьютера Б в сети Ethernet (MAC-адрес в терминах Ethernet). Для этой задачи и используется протокол ARP. По этому протоколу компьютер А отправляет широковещательный запрос, адресованный всем компьютерам в одном с ним широковещательном домене. Суть запроса: «компьютер с IP-адресом 10.22.22.2, сообщите свой MAC-адрес компьютеру с МАС-адресом (напр. a0:ea:d1:11:f1:01)». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес (напр. 00:ea:d1:11:f1:11) Теперь, получив MAC-адрес компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet.

Чтобы не было необходимости перед каждой отправкой данных задействовать протокол ARP, полученные MAC-адреса и соответствующие им IP адреса записываются в таблице на некоторое время. Если нужно отправить данные на тот же IP, то нет необходимости каждый раз опрашивать устройства в поисках нужного MAC.

Как мы только что увидели, ARP включает в себя запрос и ответ. MAC-адрес из ответа записывается в таблицу MAC/IP. При получении ответа он никак не проверяется на подлинность. Более того, даже не проверяется, был ли сделан запрос. Т.е. на целевые устройства можно прислать сразу ARP-ответ (даже без запроса), с подменёнными данными, и эти данные попадут в таблицу MAC/IP и они будут использоваться для передачи данных. Это и есть суть атаки ARP-spoofing , которую иногда называют ARP травлением, травлением ARP кэша.

Описание атаки ARP-spoofing

Два компьютера(узла) M и N в локальной сети Ethernet обмениваются сообщениями. Злоумышленник X, находящийся в этой же сети, хочет перехватывать сообщения между этими узлами. До применения атаки ARP-spoofing на сетевом интерфейсе узла M ARP-таблица содержит IP и MAC адрес узла N. Также на сетевом интерфейсе узла N ARP-таблица содержит IP и MAC узла M.

Во время атаки ARP-spoofing узел X (злоумышленник) отсылает два ARP ответа (без запроса) - узлу M и узлу N. ARP-ответ узлу M содержит IP-адрес N и MAC-адрес X. ARP-ответ узлу N содержит IP адрес M и MAC-адрес X.

Так как компьютеры M и N поддерживают самопроизвольный ARP, то, после получения ARP-ответа, они изменяют свои ARP таблицы, и теперь ARP-таблица M содержит MAC адрес X, привязанный к IP-адресу N, а ARP-таблица N содержит MAC адрес X, привязанный к IP-адресу M.

Тем самым атака ARP-spoofing выполнена, и теперь все пакеты(кадры) между M и N проходят через X. К примеру, если M хочет передать пакет компьютеру N, то M смотрит в свою ARP-таблицу, находит запись с IP-адресом узла N, выбирает оттуда MAC-адрес (а там уже MAC-адрес узла X) и передает пакет. Пакет поступает на интерфейс X, анализируется им, после чего перенаправляется узлу N.