SNMP获取交换机品牌型号
创建于:2024年10月14日
使用 O1 Preview 回答 Chat01
创建于:2024年10月14日
使用 O1 Preview 回答 Chat01
有华为交换机、华三交换机、锐捷交换机三个品牌的交换机,通过snmp的哪个oid可以获取到各个设备的品牌和型号,并给出nodejs的详细代码逻辑
要通过SNMP获取华为交换机、华三(H3C)交换机和锐捷(Ruijie)交换机的品牌和型号,通常可以使用以下两个OID:
1.3.6.1.2.1.1.1.0
1.3.6.1.2.1.1.2.0
这些OID是标准的SNMP系统OID,可以返回设备的描述信息和对象ID。通过解析这些信息,我们可以获取设备的品牌和型号。
下面是使用Node.js和net-snmp
库的详细代码逻辑,演示如何获取并解析这些信息。
首先,确保你已经安装了Node.js和net-snmp
库:
bashnpm install net-snmp
javascriptconst snmp = require('net-snmp'); /** * 获取设备的品牌和型号信息 * @param {string} ip - 设备的IP地址 * @param {string} community - SNMP共同体字符串(默认为'public') */ function getDeviceInfo(ip, community = 'public') { // 创建SNMP会话 const session = snmp.createSession(ip, community); // 要获取的OID列表 const oids = [ '1.3.6.1.2.1.1.1.0', // sysDescr '1.3.6.1.2.1.1.2.0' // sysObjectID ]; session.get(oids, (error, varbinds) => { if (error) { console.error(`Error fetching SNMP data: ${error.message}`); } else { // 解析sysDescr和sysObjectID const sysDescr = varbinds[0].value.toString(); const sysObjectID = varbinds[1].value.toString(); console.log(`sysDescr: ${sysDescr}`); console.log(`sysObjectID: ${sysObjectID}`); // 根据sysObjectID判断设备品牌 const brand = getBrandBySysObjectID(sysObjectID); console.log(`Brand: ${brand}`); // 从sysDescr中提取型号信息 const model = getModelFromSysDescr(sysDescr); console.log(`Model: ${model}`); } // 关闭会话 session.close(); }); } /** * 根据sysObjectID获取设备品牌 * @param {string} sysObjectID * @returns {string} 设备品牌 */ function getBrandBySysObjectID(sysObjectID) { // 企业OID前缀映射 const enterpriseOIDs = { '1.3.6.1.4.1.2011': 'Huawei', '1.3.6.1.4.1.25506': 'H3C', '1.3.6.1.4.1.4881': 'Ruijie' }; for (const [oidPrefix, brand] of Object.entries(enterpriseOIDs)) { if (sysObjectID.startsWith(oidPrefix)) { return brand; } } return 'Unknown'; } /** * 从sysDescr中提取设备型号 * @param {string} sysDescr * @returns {string} 设备型号 */ function getModelFromSysDescr(sysDescr) { // 根据具体设备的sysDescr格式进行解析 // 以下是一个通用的示例,可能需要根据实际情况调整 // 示例:华为设备的sysDescr可能包含类似于"Quidway S5700 Series Switch"的信息 const modelMatch = sysDescr.match(/(?:Series|Model)\s+([\w\-]+)/i); if (modelMatch && modelMatch[1]) { return modelMatch[1]; } // 如果无法解析,则返回完整的sysDescr return sysDescr; } // 示例调用 getDeviceInfo('192.168.1.1', 'public');
net-snmp
库:用于进行SNMP操作。sysDescr
和sysObjectID
。sysDescr
:获取设备的描述信息,可能包含型号和软件版本等信息。sysObjectID
:用于唯一标识设备类型,可以根据企业OID前缀确定品牌。sysObjectID
与已知的企业OID前缀进行匹配。
1.3.6.1.4.1.2011
。1.3.6.1.4.1.25506
。1.3.6.1.4.1.4881
。sysDescr
中使用正则表达式提取型号信息。public
,但在生产环境中可能被更改,需要使用正确的共同体字符串才能成功查询。通过上述代码,我们可以使用标准的SNMP OID获取设备的品牌和型号信息。根据sysObjectID
可以确定设备的品牌,sysDescr
则提供了更详细的设备描述,可以从中提取型号信息。这个方法适用于华为、华三和锐捷等常见网络设备。