Начал писать приложение для мониторинга сетевых пакетов с использованием 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();