Читать сырые пакеты по сети с помощью C#?
У меня есть собственный язык BMS, который отправляет информацию через определенный порт UDP в сети. Существующий интерфейс не очень хорошо сделан или поддерживается, и работает плохо.
У меня есть доступ к стеку для кода, и я не против создать некоторые функции интерпретации
Мой вопрос заключается в том, как лучше всего интерпретировать эти необработанные пакеты в моей программе? Я не нахожу какой-либо хорошей документации о том, как это сделать, и я хотел попытаться сделать это в разумных пределах.
Мне нужно, чтобы моя программа постоянно вынюхивала определенный порт? и это будет обременительно для сети или программы, которая будет делать это?
1 ответ
Вы пометили этот BACnet. Почему бы вам не попробовать Wireshark с фильтром захвата "udp port 47808" и посмотреть, предоставляет ли wireshark пакеты таким образом, который имеет для вас смысл. (или вы сделали это). Если это bacnet, то обычные UDP-сокеты, связанные с портом 47808, - это путь. Обратите внимание, что 47808-47823 являются наиболее распространенными портами BACnet "по умолчанию". Используйте cports или что-то еще, чтобы точно определить, к какому порту (ам) привязано ваше приложение.
Вы могли бы использовать библиотеку захвата пакетов - но она имеет коннотации безопасности, поэтому вместо этого вы, вероятно, (по большей части) можете обойтись без использования.NET 'UdpClient'.
Но! Настоящей проблемой является разбивка и интерпретация пакетов BACnet, что является сложной частью.
Существует (сейчас!/ Наконец) пакет NuGet для BACnet - не то, чтобы я использовал его, но это может быть одним из лучших вариантов для вашего случая.
Но я также предлагаю вам поэкспериментировать с (продвинутым и бесплатным) VTS (Visual Test Tool).