我来帮你编写一个使用 Python 通过 SNMP 采集 H3C 交换机信息的代码。我们将使用 pysnmp
库来实现 SNMP 功能。首先需要安装必要的库:
pip install pysnmp
下面是一个基础的采集代码示例,包含了一些常用的 OID:
from pysnmp.hlapi import *
class H3CSnmpCollector:
def __init__(self, host, community='public', port=161):
self.host = host
self.community = community
self.port = port
def get_snmp_data(self, oid):
error_indication, error_status, error_index, var_binds = next(
getCmd(SnmpEngine(),
CommunityData(self.community),
UdpTransportTarget((self.host, self.port)),
ContextData(),
ObjectType(ObjectIdentity(oid)))
)
if error_indication:
print(f"错误: {error_indication}")
return None
elif error_status:
print(f"错误状态: {error_status.prettyPrint()}")
return None
else:
for varBind in var_binds:
return varBind[1]
def get_system_info(self):
# 系统信息的 OID
oids = {
'sysDescr': '1.3.6.1.2.1.1.1.0',
'sysUpTime': '1.3.6.1.2.1.1.3.0',
'sysContact': '1.3.6.1.2.1.1.4.0',
'sysName': '1.3.6.1.2.1.1.5.0',
'sysLocation': '1.3.6.1.2.1.1.6.0'
}
result = {}
for key, oid in oids.items():
result[key] = str(self.get_snmp_data(oid))
return result
def get_interface_info(self):
# 接口信息的 OID
interface_oids = {
'ifDescr': '1.3.6.1.2.1.2.2.1.2',
'ifType': '1.3.6.1.2.1.2.2.1.3',
'ifMtu': '1.3.6.1.2.1.2.2.1.4',
'ifSpeed': '1.3.6.1.2.1.2.2.1.5',
'ifPhysAddress': '1.3.6.1.2.1.2.2.1.6',
'ifAdminStatus': '1.3.6.1.2.1.2.2.1.7',
'ifOperStatus': '1.3.6.1.2.1.2.2.1.8'
}
# 获取接口数量
for varBind in nextCmd(SnmpEngine(),
CommunityData(self.community),
UdpTransportTarget((self.host, self.port)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.2.2.1.1')),
lexicographicMode=False):
print(f"接口信息: {varBind[0][1]}")
def main():
# 使用示例
collector = H3CSnmpCollector(
host='192.168.1.1', # 替换为你的交换机 IP
community='public', # 替换为你的 SNMP 团体名
port=161
)
# 获取系统信息
system_info = collector.get_system_info()
print("\n系统信息:")
for key, value in system_info.items():
print(f"{key}: {value}")
# 获取接口信息
print("\n接口信息:")
collector.get_interface_info()
if __name__ == '__main__':
main()
这个代码提供了以下功能:
- 基础的 SNMP 查询功能
- 系统信息采集(包括系统描述、运行时间、联系人、设备名称、位置等)
- 接口信息采集(包括接口描述、类型、MTU、速度、物理地址、管理状态、运行状态等)
使用方法:
- 修改
main()
函数中的host
和community
参数为你的实际环境配置 - 运行脚本即可获取交换机信息
注意事项:
- 确保交换机已启用 SNMP 功能
- 确保配置了正确的 SNMP 团体名(community)
- 确保网络连接正常且防火墙允许 SNMP 流量(UDP 161端口)
如果你需要采集其他特定信息,可以添加相应的 OID。H3C 设备还有一些私有 MIB,OID 通常以 1.3.6.1.4.1.2011
开头。你可以根据需要扩展代码,添加更多的采集功能。