Дополнительные возможности

Перехват больших объемов трафика

При сборе пакетов на большом или сильно загруженном сегменте сети, следует учесть, что обработка тысяч пакетов в секунду может существенно загрузить процессор и привести к "повисанию" программы. Повысить же производительность программы можно, используя правила для фильтрации ненужных вам пакетов. Пересылка файла объемом 50 Мб между двумя машинами порождает около 40000 NetBIOS-пакетов со скоростью передачи 10 мегабайт в секунду, что может оказаться трудновыполнимой задачей для программы. Однако часто не требуется анализ каждого пакета NetBIOS. Можно настроить CommView таким образом, что он будет принимать только пакеты IP. В CommView есть гибкая система фильтров, позволяющая принимать только те пакеты, которые вам действительно интересны. Если нужна лишь статистическая информация (гистограммы, таблицы хостов), можно воспользоваться командой "Блокировать сбор пакетов" в меню. В этом случае отображение пакетов в реальном времени будет приостановлено, а статистические данные будут продолжать собираться и показываться.

Факторы, улучшающие производительность программы:

  • Быстрый процессор (рекомендуется Intel Core i7)
  • Объем оперативной памяти (рекомендуется 8 Гб и больше)
  • Использование правил для фильтрации ненужного трафика

Запуск нескольких копий программы

CommView может перехватывать пакеты с нескольких сетевых адаптеров одновременно. Эта возможность включается меткой Разрешить запуск нескольких копий программы в меню Настройка => Установки => Разное. Имейте в виду, что один и тот же адаптер нельзя открыть из двух запущенных экземпляров программы. Такое же ограничение существует для Terminal Server: два пользователя (локальный и удалённый) не могут осуществлять перехват трафика с одного адаптера, запустив две копии CommView на одном и том же сервере.

Невидимый режим

Есть два способа запустить CommView как невидимый процесс:

  1. Запустить CommView с ключом "hidden":
    CV.EXE hidden
  2. Если CommView уже запущен, вы можете прятать или вызывать его "горячими" клавишами. Чтобы спрятать, нажмите ALT+SHIFT+h. Чтобы отменить невидимость, нажмите ALT+SHIFT+u.

Помните, однако, что полностью скрыть работу приложений в Windows нельзя. При работе в невидимом режиме процесс CommView будет виден в Панели Задач.

Параметры командной строки

При запуске программы доступны следующие параметры командной строки:

  • Загрузить и активизировать набор правил из файла. Используйте ключ "/ruleset" между CV.EXE и полным путем к файлу правил:
     
    CV.EXE /ruleset "C:\Program Files\CommView\Rules\POP3Rules.rls"

    Если имя файла или путь включает символы пробела - заключите их в кавычки (" ").
  • Выбрать адаптер и начать сбор пакетов. Используйте ключ "/adapter", за которым следует название адаптера, например:

    CV.EXE /adapter "Intel(R) PRO/1000 T Desktop Adapter"

    Название адаптера должно находиться в кавычках (" "). Поскольку названия обычно достаточно длинные, воспользуйтесь комбинацией Ctrl-C Ctrl-V для переноса имени из списка доступных адаптеров.
  • Использовать специальный каталог для хранения log-файлов. Используйте ключ /logdir:

    CV.EXE /logdir "C:\Program Files\CommView\Logs"

    Все эти опции можно использовать одновременно. 

Обмен данными с вашим приложением

В CommView реализован простой и понятный интерфейс доступа к TCP/IP. Он позволяет вашему приложению в режиме реального времени обрабатывать пакеты, принятые с помощью CommView. Начиная с версии 5.0 есть возможесть передавать пакеты аналогично тому, как это делает Packet Generator (генератор пакетов).

Принцип работы

Вам следует запустить CommView, задав ему в командной строке специальный ключ MIRROR, указывающий программе на какой IP-адрес и в какой TCP-порт дублировать захватываемые пакеты.

Примеры:

CV.EXE mirror:127.0.0.1:5555  // дублирует пакеты на loopback, в TCP-порт 5555

CV.EXE mirror:192.169.0.2:10200  // дублирует пакеты на 192.169.0.2, в TCP-порт 10200

Когда CommView запущен с этим ключом, он пытается установить TCP-соединение с указанным IP-адресом по указанному номеру порта. Это означает, что ваше приложение уже должно быть запущено и должно быть готовым к приему по указанному порту. Если CommView не может установить соединение, он будет делать повторные попытки каждые 15 секунд. То же самое будет происходить при разрыве соединения: каждые 15 секунд CommView будет пытаться восстановить его. Если соединение успешно установлено, CommView будет передавать захватываемые пакеты по мере их прихода, в режиме реального времени.

Формат данных

Данные передаются в формате NCF. Описание формата смотрите в последней главе данного раздела.

Передача пакетов

Ваше приложение может не только принимать пакеты, но и посылать их, аналогично генератору пакетов. Данные могут быть переданы в CommView с помощью все того же TCP-соединения, через которое происходил прием. Формат данных прост – двухбайтовое беззнаковое целое число, затем сам пакет. Если адаптер не открыт или он не поддерживает прием пакетов, пакет отбрасывается без уведомления.

Примеры проектов

Ниже приведены два простых примера программ, ожидающих входящих соединений, выделяющих пакеты из потока и отображающих "сырые" данные.

Пропускная способность (Bandwidth)

При пересылке данных на удалённый компьютер, убедитесь, что линия связи между ними имеет достаточную пропускную способность, чтобы передать все перехваченные данные. Если CommView собирает данные с интенсивностью 500 кб/сек, а линия связи способна передавать только 50кб/сек, неизбежно возникнут "заторы", приводящие к разным неприятностям (например, в зависимости от версии Windows, winsock может прекратить передавать данные вообще). Если вам требуется более гибкое решение, использующее буферизацию и дистанционное управление – попробуйте воспользоваться CommView Remote Agent.

Пользовательский модуль декодирования

CommView позволяет подключить два типа пользовательских модулей декодирования.

Простой декодер

Если он используется, то результаты его работы будут показаны в дополнительной колонке закладкиПакеты. Пользовательский декодер должен быть 32-bit DLL с именем файла "Custom.dll" и экспортировать единственную процедуру - "Decode". Ниже показан её прототип на языках C и Pascal:

extern "C" {

void __stdcall Decode(unsigned char *PacketData, int PacketLen, char *Buffer, int BufferLen);

}

procedure Decode (PacketData: PChar; PacketLen: integer; Buffer: PChar; BufferLen: integer); stdcall;

Данная DLL должна располагаться в той же директории, что и CommView. При запуске CommView ищет файл с именем  "Custom.dll" и загружает его в память. Если в нем найдена точка входа "Decode" - CommView добавляет новую колонку с именем "Custom" в списке пакетов.

Перед тем как отобразить новый пакет, CommView вызывает процедуру "Decode" и передаёт содержимое пакета в DLL. Процедура "Decode" должна обработать пакет и записать его в буфер. Первый аргумент - указатель на содержимое пакета, второй - длина, третий аргумент - указатель на буфер, в котором хранится результат обработки, четвёртый аргумент - размер буфера (в данной версии - всегда 1024 байта). Буфер выделяется и освобождается самой программой CommView, так что не следует управлять распределением памяти под этот буфер самостоятельно. Содержимое буфера будет отображено в виде строки в колонке "Custom".

Ваша процедура должно быть достаточно быстрой и обрабатывать тысячи пакетов в секунду; в противном случае снизится производительность программы. Не забывайте использовать STDCALL при вызове.

Две DLL представлены как пример. Они выполняют простейшие операции: "результатом" работы функции "Decode" является шестнадцатеричный код последнего байта пакета. Пользовательский декодер может быть сколь угодно сложным.

Сложный декодер

При реализации этого типа декодера, результат будет отображаться, как дополнительные элементы основного дерева декодера в окне пакетов. Подробное руководство по созданию такого декодера можно получить здесь:

http://www.tamos.com/products/commview/complex_decoder_c7.zip

Сложный декодер может быть написан только на Microsoft Visual C++, так как он основан на классах C++.

Техническая поддержка

Техническая поддержка пользовательских декодеров осуществляется "по мере сил", но мы не всегда сможем оказаться в состоянии разрешить любую вашу проблему.

Формат Log-файлов CommView

Для записи перехваченных пакетов в файлы .NC CommView и CommView для WiFi используют формат данных, описанный ниже. Это открытый формат, который можно использовать в собственных приложениях для обработки log-файлов, созданных CommView. Этот формат также можно использовать для прямого обмена данными между CommView и пользовательским приложением. Пакеты идут последовательно. Перед каждым пакетом идет 24-байтовый заголовок, структура которого описана ниже. Все поля заголовка, размер которых превышает 1 байт, используют формат с прямым порядком байтов.

Суммарная длина заголовка составляет 24 байта.

Если пакеты находятся в сжатом виде, поле Объем данных содержит объем разархивированных данных. Поле Объем исходных данных, в свою очередь, содержит объем исходных данных. Если пакет не был сжат, оба поля одинак

Название поля Длина (байты) Описание
Объем данных 2 Длина тела пакета, который идет следом за заголовком
Объем исходных данных 2 Исходная длина тела пакета, без компрессии. Если компрессия не применялась, то это поле равно предыдущему
Версия 1 Версия формата пакета (текущая – 0)
Год 2 Дата создания пакета (год)
Месяц 1 Дата создания пакета (месяц)
День 1 Дата создания пакета (день)
Часы 1 Дата создания пакета (часы)
Минуты 1 Дата создания пакета (минуты)
Секунды 1 Дата создания пакета (секунды)
Микросекунды 4 Дата создания пакета (микросекунды)
Флаги 1 Битовые флаги:
Среда передачи 0...3 Тип пакета (0 - Ethernet, 1 - WiFi, 2 - Token Ring)
Расшифрован 4 Пакет был расшифрован (только для пакетов WiFi)
Поврежден 5 Пакет был искажен, т. е. имел некорректную контрольную сумму (только для пакетов WiFi)
Сжатие 6 Пакет хранится в сжатом виде
Зарезервировано 7 Резерв
Уровень сигнала 1 Уровень сигнала в процентах (только для пакетов WiFi)
Скорость передачи 1 Скорость передачи данных в Мбит/с, умноженная на 2 (только для пакетов WiFi)
Диапазон 1

Диапазон передачи. 0x01 для 802.11a, 0x02 для 802.11b, 0x04 для 802.11g, 0x08 для 802.11a-turbo, 0x10 для 802.11 SuperG, 0x20 для 4.9 GHz Public Safety, 0x40 для 5 GHz 802.11n, 0x80 для 2.4 GHz 802.11n. (только для пакетов WiFi)

Канал 1 Номер канала (только для пакетов WiFi)
Направление 1 Для проводных пакетов – направление пакета. 0x00 для транзитных, 0x01 для входящих, 0x02 для исходящих. Для пакетов WiFi – старший байт для поля Скорость передачи, для тех случаев, когда однобайтное поле Скорость передачи недостаточно для хранения значения переменной (т.е. если значение превышает 255).
Уровень сигнала (dBm) 1 Уровень сигнала в dBm (для пакетов WiFi)
Уровень шума (dBm) 1 Уровень шума в dBm (для пакетов WiFi)
Данные  Тело пакета (без изменений, в исходном виде). Если установлен флаг компрессии, данные сжимаются с помощью свободно распространяемой библиотеки Zlib 1.1.4. Длина записывается в поле Data Length.