Невозможно получить и обработать пакеты snmp, имеющие RequestID 0
У меня есть устройство с поддержкой snmp, мониторинг которого я хочу сделать. Но это устройство выдает ответ с Request-ID 0 для всех запросов get. Библиотека snmp4j отбрасывает эти полученные пакеты, потому что она отправляет запрос на получение с некоторым значением Request-ID, отличным от 0. При получении ответа она сопоставляет отправленное значение "Request-ID" с полученным значением "Request-ID" и при обнаружении несоответствия просто отбрасывает полученный пакет и возвращает "нулевое" значение в ответ.
Если перед отправкой запроса я установлю значение Request-ID равным 0 в пакете snmp, ответный пакет snmp может быть обработан.
Для этой библиотеки snmp4j содержит функцию "setRequestID(Integer32 (value))" для установки желаемого Request-ID любого пакета snmp, но эта функция не может установить значение Request-ID равным 0. Когда я устанавливаю значение в 0, это функция заменяет это значение некоторым случайным значением идентификатора запроса.
Если есть решение, пожалуйста, дайте ответ. Спасибо.
1 ответ
Поле идентификатора запроса используется для идентификации ответа, когда он возвращается клиенту. Таким образом, если устройство, к которому вы обращаетесь, возвращает все запросы со значением идентификатора запроса, равным 0, а не предоставленным значением, тогда клиент (snmp4j) правильно отбрасывает ответ, потому что он недействителен. Идентификатор запроса в ответном пакете должен всегда совпадать с идентификатором запроса в исходном запросе. Устройство имеет глючный стек SNMP. Если вы измените свой код, чтобы запросы всегда имели идентификатор запроса равным 0, вы нарушаете функциональность, чтобы обеспечить совместимость с нестандартным агентом, и я бы посоветовал против этого.