Редактор файлів DBF DBFShow

Редагування, об'єднання, порівняння dbf файлів та безліч інших можливостей

Тепер, коли ми знаємо, як отримати перелік адаптерів, давайте «захопимо» кілька пакетів. У цьому розділі ми напишемо програму, яка ініціалізує мережевий адаптер та виводить інформацію про кожен пакет, що переходить через нього.

Функція, що відкриває мережевий адаптер Open(). Вона перевантажена і має такі аргументи:

  • Open()
  • Open(DeviceMode mode)
  • Open(DeviceMode mode, int read_timeout)

Останні два аргументи заслуговують на детальний розгляд.

Нижче представлена ​​реалізація обробникаOnPacketArrival :

Після того, адаптер відкритий, захоплення може бути запущений за допомогоюStartCapture() абоCapture(INT packetCount) функції. Ці дві функції схожі, різниця в тому, що StartCapture() не блокує основний потік програми, а запускається в новому потоці, в той часCapture(INT packetCount) блокує основний потік, до поки packetCount пакети не будуть отримані. При використанніStartCapture() ми повинні викликатиStopCapture(), щоб завершити процес захоплення. Для безкінечного (постійного) захоплення необхідно викликати методCapture().

Обидві ці функції вимагають, щоб обробник події для обробки пакетів був зареєстрований (ініціалізований) до їхнього виклику. Цей обробник подій викликаєтьсяICaptureDevice для кожного нового пакета, що проходить через мережу. Він отримує відправника об'єкта, який викликає цей обробник (тобтоICaptureDevice об'єкта) та фактично отриманого пакета, включаючи всі заголовки протоколу. Зверніть увагу, що CRC зазвичай неприсутній у пакеті, оскільки він видаляється мережним адаптером після процедури перевірки пакета (цілісності). Варто також відзначити, що більшість адаптерів відкидає пакети з неправильною контрольною сумою CRC, внаслідок чого WinPcap (і, отже SharpPcap), як правило, не в змозі захопити їх.

КласPacket є основним класом для захоплених пакетів. Кожен захоплений пакет маєPcapHeader властивість, що містить деяку інформацію (наприклад: позначка часу захоплення та довжини пакета). Наведений вище приклад витягує мітку та довжину від кожного пакета та виводить їх на екран. Зверніть увагу, що код обробника викликаєтьсяICaptureDevice, тому програма користувача не має прямого (доступу)контролю над ним. Інший підхід полягає у використанні функціїGetNextPacket(), яка представлена ​​в наступному розділі.