Как контролировать порт для трафика в Windows?

Я пытаюсь найти решение для мониторинга трафика (входящего и исходящего) через определенный порт. Не требуется перехватывать пакеты или делать что-либо еще. Что он делает, так это прослушивает трафик, чтобы убедиться, что сообщения отправляются или принимаются с этого порта каждые 10 минут. Он должен все время работать в фоновом режиме (как демон) и не оказывать существенного влияния на производительность. Основываясь на моем исследовании, один из вариантов — использовать для этого существующий инструмент. Существует множество инструментов для мониторинга или анализа трафика, таких как wireshark. Ну, похоже, что большинство из них отслеживают трафик, проходящий через интерфейс, а не через порт, или они не могут работать как демон. Другой вариант — написать программу для этого. SharpPcap кажется хорошим выбором, но мне все еще нужно захватить и проанализировать пакеты, чтобы узнать, существует ли такой трафик. Может ли кто-нибудь предложить, что мне делать?


person eric young    schedule 05.09.2010    source источник


Ответы (2)


SharpPcap обрабатывает захват пакетов так же, как Wireshark, поэтому вы можете установить фильтры для ограничения захвата пакетов определенным портом так же, как в SharpPcap, так и в wireshark. За исключением того, что SharpPcap будет намного легче, чем wireshark.

Загрузите дерево исходного кода SharpPcap и просмотрите Example05.SetFilter.

Чтобы сузить результаты и захватить только те пакеты, которые вы хотите видеть, вам потребуется использовать несколько фильтров.

Pcap использует общий язык для всех приложений, которые его используют, но задает фильтры для установки. Программы захвата, использующие winpcap (windows) или libpcap (*nix), включают в себя sharppcap, wireshark, pcap.net, winpcap, libpcap, tcpdump и т. д. Большой ресурс о том, как использовать фильтры pcap, см. эта ссылка.

Вот фильтры, которые вам нужны:

  • эфирный хост ehost
  • порт порт

Где ehost — это MAC-адрес компьютера, отправляющего/получающего пакеты, а порт — это порт, который вы хотите отслеживать. Таким образом, будет полная строка фильтра.

SetFilter("ether host ff:ff:ff:ff:ff:ff and port 60");

MAC-адрес и порт здесь приведены только для иллюстрации, вы, очевидно, измените их на значения, относящиеся к вашей конкретной настройке.

Это, используемое в примере SetFilter, просто выводит строку информации со временем захвата пакета в командную строку каждый раз, когда пакет захватывается и соответствует критериям вашего фильтра.

Если вам нужна более подробная информация о пакете, например информация из заголовков или полезной нагрузки пакета, вам необходимо проанализировать входящий необработанный пакет. Обязательно обратитесь за помощью на форум проекта sourceforge, если вам нужны советы о том, как это сделать. Разработчики проекта очень активны и всегда готовы помочь.

person Evan Plaice    schedule 10.11.2010

Лучший способ ограничить влияние вашего инструмента на производительность — использовать ETW (отслеживание событий для Windows) в режиме реального времени (т. е. инструмент, который активирует трассировку ETW и сразу считывает ее, а не сохраняет в файл). Этот пример MSDN — отличный способ увидеть, как это сделать с помощью C#, и он дает вам некоторые код для начала.

person Ana Betts    schedule 06.09.2010