Обнаружение устройств по протоколу Snmp с использованием библиотеки C++

Я работаю над проектом кода С++, который должен иметь возможность обнаруживать все устройства snmp в сети, а затем, если имя устройства совпадает с одним из имен датчиков, которые я ищу (у меня есть 2 разных датчика температуры более Ethernet), то я хочу отправить запрос snmpGet, который возвращает мне значение (температуру).

У меня нет проблем с частью snmpGet, но у меня возникли проблемы с определением правильного кода обнаружения snmp. В настоящее время я использую библиотеку snmp++, которую я предпочел net-snmp из-за его простота использования и поддержка C++. Но я открыт для любых рекомендаций, чтобы заставить эту работу.

Использование кода snmpDiscovery в snmp++ не возвращает мне никакой информации. Поэтому я использовал snmpGet с широковещательным адресом, который редко возвращает информацию об одном устройстве snmp для каждого вызова snmpGet, но не информацию обо всех устройствах snmp сразу. Так что это непредсказуемо, потому что даже если бы один из моих датчиков температуры был доступен в сети, я бы не знал, ответит ли вместо этого мой принтер с поддержкой snmp. Во всяком случае вокруг этого? Также я не использую snmp версии 3. Это поможет, если я это сделаю?

Спасибо за поддержку!


person AJ Fernando    schedule 17.12.2018    source источник
comment
Обнаружение устройств по умолчанию ненадежно. В большинстве случаев необходимо вручную добавлять устройства в систему мониторинга.   -  person Lex Li    schedule 17.12.2018
comment
Я знаю 2 датчика температуры, которые я использую. Я также знаю их Oid, чтобы получить значение temp через snmp. Но со стороны клиента не обязательно постоянно подключать эти 2 датчика. Итак, сначала я хочу знать, онлайн они или нет, и, возможно, какой у них IP. Я не могу знать это наверняка, когда в сети присутствует какое-то другое устройство snmp, которое отправляет ответный эхо-запрос на мое широковещательное сообщение snmpget.   -  person AJ Fernando    schedule 19.12.2018
comment
Если конфигурация датчиков находится под вашим контролем, вы можете рассмотреть возможность использования на них нестандартного диапазона портов upd для snmp, чтобы уменьшить вероятность ложных открытий. Или, если возможно, используйте какой-нибудь приватный mib oid, специфичный для датчика. Проверка mac-адресов в arp-ответах на широковещательные рассылки также может быть использована для быстрого ограничения области обнаружения, но это не snmp.   -  person Yuri Lachin    schedule 29.12.2018


Ответы (1)


Они строят целые компании вокруг обнаружения устройств, так что проблема не из легких.

Короче говоря, если вы знаете сетевые адреса ваших устройств, вы можете пройти через диапазон, например. если вы знаете, что они находятся в сети 10.0.0/24, вы можете запросить, например. sysDescr для версий с 10.0.0.1 по 10.0.0.254.

person Gambit Support    schedule 17.12.2018
comment
Я запрашиваю известный диапазон локальной сети, как вы сказали. Еще проблема в том, что иногда temp. датчик отправляет эхо-запрос, но иногда вместо этого отправляет эхо-запрос и принтер. Если оба они отправляют ответный эхо-запрос, то все в порядке, потому что я могу отфильтровать полученную информацию о значении. Но это не так. Отвечает только один. Я не могу предсказать, какой. И я не могу сделать так, чтобы все snmp-устройства в моей локальной сети пинговались на вещание snmpGet. Спасибо за поддержку! - person AJ Fernando; 19.12.2018
comment
НЕ используйте широковещательную рассылку, а используйте одноадресную рассылку для каждой цели в диапазоне, т. е. запрос 10.0.0.1, затем 10.0.0.2 и т. д. Коммерческие предложения делают это параллельно. - person Gambit Support; 19.12.2018