#java #snmp #snmp4j
#java #snmp #snmp4j
Вопрос:
Как установить Ipv6-адрес с помощью snmp4j с java-клиентом? Я могу установить IP-адрес ipv4 с помощью snmp4j. Ниже приведен снимок кода для установки ipv4-адреса с помощью snmp4j. Я использую тот же метод для ipv6, но он не дает надлежащих результатов. Если я передаю ipv6-адрес, то есть «20xx: 04xx: 00xx: 40xx: 0000: XXXX:00xx». Тогда устанавливаемое значение равно xx.xx.xx.xx.00.xx.xx. Он просто удаляет первые две цифры из каждого октета. Как и из 20xx, он удаляет 20, и таким же образом это делается для всех.
PDU pdu = SnmpSession.getPDU(OID_TO_SET_TFTPSERVER_IPADDRESS, "oa:be:09:ef"); //ipv4 address
enter code here in hexa decimal format
SnmpSession.sendWrite(pdu, target);
public static PDU getPDU(String str , Object value ) {
OID oid = new OID(str);
final PDU pdu = new PDU();
pdu.setType(PDU.SET);
Variable var = null;
try {
var = SnmpTypeConverter.mapHexStringToVariable(value);
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
pdu.add(new VariableBinding(oid, var));
return pdu;
}
public static Variable mapHexStringToVariable(Object value) {
String str = (String)value;
Variable vb = OctetString.fromHexString( str);
return vb;
}
public static boolean sendWrite(final PDU pdu, Target mWriteTarget) throws InterruptedException, SnmpException {
boolean isSetUP = true;
try {
Snmp mSnmp = new Snmp(new DefaultUdpTransportMapping());
mSnmp.listen();
final ResponseEvent responseEvt = mSnmp.send(pdu, mWriteTarget);
if (Thread.currentThread().isInterrupted()) {
throw new InterruptedException("SNMP write interupted");
}
final PDU response = responseEvt.getResponse();
if (response != null) {
if (response.getErrorStatus() != SnmpConstants.SNMP_ERROR_SUCCESS) {
isSetUP = false;
logger.info("Agent error code: " response.getErrorStatus() " - "
response.getErrorStatusText() " - " response.getVariableBindings().toString());
throw new SnmpException("Agent error code: "
response.getErrorStatus() " - "
response.getErrorStatusText() " - "
response.getVariableBindings().toString());
}
if (response.getType() == PDU.REPORT) {
final VariableBinding bind = response.get(0);
logger.info("Report recieved: " bind.toString());
}
return isSetUP;
}
} catch (final IOException ex) {
logger.info(ex.getMessage(), ex);
logger.info("Error While setting the value");
}
return isSetUP;
}