читать необработанные пакеты по сети с С#?

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

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

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

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


person rizz    schedule 02.10.2018    source источник


Ответы (2)


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

person Edward    schedule 02.10.2018

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

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

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

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

Вы также можете попробовать использовать стек BACnet, который также использует YABE.

person DennisVM-D2i    schedule 06.02.2019