Начал писать приложение для мониторинга сетевых пакетов с использованием Socket-ов и SharpPcap.
Используется Visual Studio Express 2010 и Net Framework 2.0
Скачать: [Загрузка не найдена]
Исходники через SVN теперь не доступны.
Выложил их на сайт, скачать [Загрузка не найдена]
На текущий момент в 5 ревизии:
Описан базовый класс для работы с сетью
abstract class NetworkBase
{
protected device[] devices;
//ВОзвращает Количество поддерживаемых устройств
public int CountDevices
{
get
{
if (devices == null)
return 0;
else
return devices.Length;
}
}
//Инициализация
abstract public int Init();
//1. Получаем список сетевых адаптеров в системе
abstract public void Close();
//Начать сбор пакетов
abstract public int StartCapture(int IdDevice);
//Остановить сбор пакетов
abstract public int StopCapture();
abstract public bool IsSupport();
//Возвращает описание по индексу.
virtual public device GetInfoAboutDeviceFromIndex(int index)
{
return devices[index];
}
} От него наследуются два класса, первый реализует работу через сокеты:
class RawSocket: NetworkBase
{
SocketClass mainSocket;
//Инициализация
public override int Init()
{
//Создаем скласс сокета
mainSocket= new SocketClass();
//Получаем список всех сетевых устройств в системе
devices = mainSocket.GetListAllAdapters();
return 0;
}
//Поддерживается ли
public override bool IsSupport()
{
throw new NotImplementedException();
}
public override void Close()
{
}
//Начать сбор пакетов
public override int StartCapture(int IdDevice)
{
return 0;
}
//Остановить сбор пакетов
public override int StopCapture()
{
return 0;
}
} Второй класс для работы через SharpPcap:
class SharpPcap:NetworkBase
{
PcapClass pcap;
//Инициализация
public override int Init()
{
pcap = new PcapClass();
devices = pcap.GetListAllAdapters();
return 0;
}
//Поддерживается ли
public override bool IsSupport()
{
throw new NotImplementedException();
}
public override void Close()
{
}
//Начать сбор пакетов
public override int StartCapture(int IdDevice)
{
return 0;
}
//Остановить сбор пакетов
public override int StopCapture()
{
return 0;
}
} Затем в зависимости от выбора пользователя выбираем с чем работать
Network.NetworkBase network;
if (radioButton1.Checked)
network = new Network.Sockets.RawSocket();
else
network = new Network.SharpPcap.SharpPcap();
network.Init();