如何使用Python执行SNMP查询获取指定IP对应OID的日期值
Python实现SNMP批量查询OID并导出CSV方案
前置依赖安装
首先安装SNMP操作所需的第三方库:
pip install pysnmp
完整实现代码
你可以直接参考以下代码调整参数使用:
from pysnmp.hlapi import * import csv # 配置项,可根据实际情况修改 TARGET_OID = '1.3.6.1.4.1.318.1.1.1.2.2.4.0' SNMP_COMMUNITY = 'public' # SNMP v2c团体字,按需修改 SNMP_PORT = 161 IP_LIST_PATH = 'ip_list.txt' # 存IP的输入文件路径,每行一个IP OUTPUT_CSV_PATH = 'snmp_query_result.csv' # 结果输出路径 def snmp_get_date(ip): # 执行SNMP GET查询 errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData(SNMP_COMMUNITY), UdpTransportTarget((ip, SNMP_PORT), timeout=2, retries=1), ContextData(), ObjectType(ObjectIdentity(TARGET_OID))) ) # 异常处理 if errorIndication: return f"查询错误:{errorIndication}" elif errorStatus: return f"响应错误:{errorStatus.prettyPrint()}" else: # 返回OID对应的值,转为字符串格式 return str(varBinds[0][1]) if __name__ == '__main__': # 读取IP列表,过滤空行 with open(IP_LIST_PATH, 'r', encoding='utf-8') as f: ip_list = [line.strip() for line in f if line.strip()] # 批量查询并收集结果 result = [] for ip in ip_list: date_val = snmp_get_date(ip) result.append([ip, date_val]) # 写入CSV文件 with open(OUTPUT_CSV_PATH, 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) writer.writerow(['IP地址', '设备返回日期']) writer.writerows(result) print(f"查询完成,结果已写入{OUTPUT_CSV_PATH}")
注意事项
- 输入的
ip_list.txt需要每行放一个独立的IP地址,不要加多余符号 - 目标设备必须开启SNMP服务,且允许脚本运行的主机访问,团体字、SNMP版本参数需要和设备配置一致
- 如果需要使用SNMP v3,可修改
CommunityData部分为对应的v3认证配置即可 - 脚本默认设置了2秒超时、1次重试,你可以根据网络情况调整
UdpTransportTarget里的参数
内容的提问来源于stack exchange,提问作者Blue8
相关产品推荐
相关产品推荐

