Любым программам для мониторинга сети, инструментам безопасности необходим перехват сетевых пакетов. В данном топике я расскажу о двух библиотеках для перехвата: SharPcap и WinPKFilter.
SharpPcap — библиотека для .NET, которая позволяет перехватывать пакеты. По сути, это обертка над библиотекой Pcap, которая используется во многих популярных продуктах. Например, сниффер Wireshark, IDS Snort.
С SharpPCap также поставляется замечательная библиотека для парсинга пакетов — Packet.Net.
Packet.Net поддерживает следующий протоколы:
Работать с библиотекой достаточно просто:
Теперь в обработчике события device_OnPacketArrival мы можем работать с пакетом:
Так же библиотека позволяет создавать пакеты и отправлять, работать с дампами и многое другое. Без проблем работает на mono. Для более подробной информацией прошу на CodeProject. У SharpPcap есть конкурент Pcap.net. По описанию возможности совпадают. Хотя, судя по вопросам и ответах на различных форумах, создание пакетов в нем легче.
WinPKFilter — NDIS драйвер для перехвата пакетов. Поддерживаются различные операционные системы:x/ME/NT/2000/XP/2003/Vista/2008/Windows 7/2008R2. Плюсом драйвера является то, что он позволяет модифицировать и блокировать пакеты. Для некоммерческих проектов библиотека бесплатна.
Для удобной работы с драйвером предоставляется библиотека. На сайте можно скачать обертки для этой библиотеки для следующих языков — C#, Delphi, VB, MS VC++, C++ Builder.
Работать с WinPkFilter сложнее, чем SharpPcap, нужны хорошие знания в работе с неуправляемым кодов и маршалинге. Да и размер кода получается намного больше. На официальном сайте можно задать вопрос на который Вы без проблем получите от автора (кстати русский). Здесь выложил пример программы, которая блокирует пакеты в которых содержится слово «porn».
Спасибо за чтение.
SharpPcap
SharpPcap — библиотека для .NET, которая позволяет перехватывать пакеты. По сути, это обертка над библиотекой Pcap, которая используется во многих популярных продуктах. Например, сниффер Wireshark, IDS Snort.
С SharpPCap также поставляется замечательная библиотека для парсинга пакетов — Packet.Net.
Packet.Net поддерживает следующий протоколы:
- Ethernet
- LinuxSLL
- Ip (IPv4 and IPv6)
- Tcp
- Udp
- ARP
- ICMPv4 и ICMPv6
- IGMPv2
- PPPoE
- PTP
- Link Layer Discovery Protocol (LLDP)
- Wake-On-LAN (WOL)
Работать с библиотекой достаточно просто:
// метод для получения списка устройств
CaptureDeviceList deviceList = CaptureDeviceList.Instance;
// выбираем первое устройство в спсике (для примера)
ICaptureDevice captureDevice = deviceList[0];
// регистрируем событие, которое срабатывает, когда пришел новый пакет
captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
// открываем в режиме promiscuous, поддерживается также нормальный режим
captureDevice.Open(DeviceMode.Promiscuous, 1000);
// начинаем захват пакетов
captureDevice.Capture();
Теперь в обработчике события device_OnPacketArrival мы можем работать с пакетом:
static void Program_OnPacketArrival(object sender, CaptureEventArgs e)
{
// парсинг всего пакета
Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
// получение только TCP пакета из всего фрейма
var tcpPacket = TcpPacket.GetEncapsulated(packet);
// получение только IP пакета из всего фрейма
var ipPacket = IpPacket.GetEncapsulated(packet);
if (tcpPacket != null && ipPacket != null)
{
DateTime time = e.Packet.Timeval.Date;
int len = e.Packet.Data.Length;
// IP адрес отправителя
var srcIp = ipPacket.SourceAddress.ToString();
// IP адрес получателя
var dstIp = ipPacket.DestinationAddress.ToString();
// порт отправителя
var srcPort = tcpPacket.SourcePort.ToString();
// порт получателя
var dstPort = tcpPacket.DestinationPort.ToString();
// данные пакета
var data = tcpPacket.PayloadPacket;
}
}
Так же библиотека позволяет создавать пакеты и отправлять, работать с дампами и многое другое. Без проблем работает на mono. Для более подробной информацией прошу на CodeProject. У SharpPcap есть конкурент Pcap.net. По описанию возможности совпадают. Хотя, судя по вопросам и ответах на различных форумах, создание пакетов в нем легче.
WinPKFilter
WinPKFilter — NDIS драйвер для перехвата пакетов. Поддерживаются различные операционные системы:x/ME/NT/2000/XP/2003/Vista/2008/Windows 7/2008R2. Плюсом драйвера является то, что он позволяет модифицировать и блокировать пакеты. Для некоммерческих проектов библиотека бесплатна.
Для удобной работы с драйвером предоставляется библиотека. На сайте можно скачать обертки для этой библиотеки для следующих языков — C#, Delphi, VB, MS VC++, C++ Builder.
Работать с WinPkFilter сложнее, чем SharpPcap, нужны хорошие знания в работе с неуправляемым кодов и маршалинге. Да и размер кода получается намного больше. На официальном сайте можно задать вопрос на который Вы без проблем получите от автора (кстати русский). Здесь выложил пример программы, которая блокирует пакеты в которых содержится слово «porn».
Спасибо за чтение.