我正在尝试通过Python通过SNMP连接到华为设备(MA5608T)。我了解到索引值和端口之间存在对应关系。
但是还是不明白怎么翻译
例如: 4194445056.0(索引)= 0/17/7(端口)
有人知道要做什么吗?
试试这个方法:
4194304000 + (slot * (256 * 32)) + pon * 256) + '.' + onu_id
此 Javascript 代码取自生产环境。二进制运算将为您提供有关如何从数据包中提取数据的线索。
function convert_snmp_packet( packet ){
let regex = /[^\.]*/g;
let found = packet.match( regex );
if( found.length < 2 ) {
throw new Error( "wrong packet ? " + packet );
}
let left_part = parseInt( found[0] );
// found[1] is just the dot
let ont_index = parseInt( found[ 2 ] );
let slot_num;
let port_num;
slot_num = ( left_part & ( 15 << 13 ) ) >> 13;
port_num = ( left_part & ( 15 << 8 ) ) >> 8;
let json = {
slot_num: slot_num,
port_num: port_num,
ont_index: ont_index
};
return json;
}
测试代码:
class packet_Test extends Test {
test_packet( ){
// packet must be a String for this to work
let p = "4194445056.0";
let actual = convert_snmp_packet( p );
let expected = { slot_num: 1, port_num: 7, ont_index: 0 };
this.assertEquals( expected, actual );
this.done()
}
}
抱歉,死灵术。在通过华为olt查找有关SNMP的信息时遇到了这个问题。
eth_oid="1.3.6.1.4.1.2011.6.128.1.1.2.62.1.22"
gpon_oid="1.3.6.1.4.1.2011.6.128.1.1.2.62.1.21"
rx_oid="1.3.6.1.4.1.2011.6.128.1.1.2.51.1.4"
tx_oid="1.3.6.1.4.1.2011.6.128.1.1.2.51.1.6"
num_max_oid="1.3.6.1.4.1.2011.6.128.1.1.2.46.1.21"
# Простой расчет syff_oid
let "syff_oid = 8192 * $SlotID + 256 * $PortID + 304000"
# Выполнение SNMP запросов
eth_link=$(snmpwalk -v 2c -c "${SNMP_COMMUNITY}" "$IP" "${eth_oid}.4194$syff_oid.$ONUNum.1" | awk '{print $4}')
gpon_link=$(snmpwalk -v 2c -c "${SNMP_COMMUNITY}" "$IP" "${gpon_oid}.4194$syff_oid.$ONUNum.1" | awk '{print $4}')
rx_optic=$(snmpwalk -v 2c -c "${SNMP_COMMUNITY}" "$IP" "${rx_oid}.4194$syff_oid.$ONUNum" | awk '{print $4}')
tx_optic=$(snmpwalk -v 2c -c "${SNMP_COMMUNITY}" "$IP" "${tx_oid}.4194$syff_oid.$ONUNum" | awk '{print $4}')
num_max=$(snmpwalk -v 2c -c "${SNMP_COMMUNITY}" "$IP" "${num_max_oid}.4194$syff_oid.$ONUNum" | awk '{print $4}')