читать сырые пакеты по сети с C #? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть проприетарный язык BMS, который отправляет информацию через определенный порт UDP в сети.Существующий интерфейс не очень хорошо сделан или поддерживается, и работает плохо.

У меня есть доступ к стеку для кода, и я не против создать некоторые функции интерпретации

Мой вопрос заключается в том, чтонаилучший способ получить эти необработанные пакеты в моей программе для интерпретации?Я не нахожу какой-либо хорошей документации о том, как это сделать, и я хотел попытаться сделать это разумно подходящим способом.

Нужно ли мне вообще заставлять мою программу постоянно прослушивать определенный порт?и это будет обременительно для сети или программы, которая будет это делать?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы могли бы использовать библиотеку захвата пакетов - но у нее есть коннотации безопасности, поэтому вместо этого вы можете (по большей части) обойтись без использования .NET 'UdpClient'.

Но!Настоящей проблемой является разбивка и интерпретация пакетов BACnet, что является сложной частью.

Существует (сейчас! / Наконец) пакет NuGet для BACnet - не то, что я использовал его, ноэто может быть одним из лучших вариантов для вашего случая.

Но я также предлагаю вам поэкспериментировать с (расширенным и бесплатным) VTS (Visual Test Tool).

0 голосов
/ 02 октября 2018

Вы отметили этот BACnet.Почему бы вам не попробовать Wireshark с фильтром захвата "udp port 47808" и посмотреть, предоставляет ли wireshark пакеты таким образом, который имеет для вас смысл.(или вы сделали это).Если это bacnet, то обычные UDP-сокеты, связанные с портом 47808, - это путь.Обратите внимание, что 47808-47823 являются наиболее распространенными портами BACnet по умолчанию.Используйте cports или что-то еще, чтобы точно определить, к какому порту (ам) привязано ваше приложение.

...