from pysnmp.entity.rfc3413.oneliner import cmdgen oTable = { "aa":'1.3.6.1.2.1.1.1.0', "sysName": (1, 3, 6, 1, 2, 1, 1, 5), # 系统名称 "sysDescr": (1, 3, 6, 1, 2, 1, 1, 1), # 系统描述,可以获取系统版本信息 "dot1qTpFdbPort": (1, 3, 6, 1, 2, 1, 17, 7, 1, 2, 2, 1, 2), # MAC地址对应的端口 "dot1qTpFdbStatus": (1, 3, 6, 1, 2, 1, 17, 7, 1, 2, 2, 1, 3), # MAC表项的状态 "dot1dBasePortIfIndex": (1, 3, 6, 1, 2, 1, 17, 1, 4, 1, 2), # dot1d端口索引 "ifIndex": (1, 3, 6, 1, 2, 1, 2, 2, 1, 1), # 端口索引 "ifDescr": (1, 3, 6, 1, 2, 1, 2, 2, 1, 2), # 端口信息描述 "ifType": (1, 3, 6, 1, 2, 1, 2, 2, 1, 3), # 端口类型 "ifSpeed": (1, 3, 6, 1, 2, 1, 2, 2, 1, 5), # 端口速率(bits,万兆端口会溢出,参考节点ifHighSpeed) "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), # 端口的工作状态 "ifName": (1, 3, 6, 1, 2, 1, 31, 1, 1, 1, 1), # 端口名称(节点值同节点ifDescr) "ifHighSpeed": (1, 3, 6, 1, 2, 1, 31, 1, 1, 1, 15), # 端口速率(1000000bits) "ifAlias": (1, 3, 6, 1, 2, 1, 31, 1, 1, 1, 18), # 网管用的端口描述信息(就是在端口视图下,命令行配置的description) "ipAdEntAddr": (1, 3, 6, 1, 2, 1, 4, 20, 1, 1), # 接口IP地址 "ipAdEntIfIndex": (1, 3, 6, 1, 2, 1, 4, 20, 1, 2), # 接口索引 "ipAdEntNetMask": (1, 3, 6, 1, 2, 1, 4, 20, 1, 3), # 接口IP掩码 "ipAdEntBcastAddr": (1, 3, 6, 1, 2, 1, 4, 20, 1, 4), # 广播地址 # 有两个MIB表用来表示所有ARP表项。 # 注:静态ARP对应的MIB表索引都是0,动态ARP的索引是vlan虚接口对应的ifIndex。 # (1) 表atEntry,1.3.6.1.2.1.3.1.1,它没有表项类型的字段,即不知道ARP表项是动态的,还是静态的ARP表项,包含的节点如下。 "atIfIndex": (1, 3, 6, 1, 2, 1, 3, 1, 1, 1), # 端口索引 "atPhysAddress": (1, 3, 6, 1, 2, 1, 3, 1, 1, 2), # 物理地址 "atNetAddress": (1, 3, 6, 1, 2, 1, 3, 1, 1, 3), # IP地址 # (2) 表ipNetToMediaEntry,1.3.6.1.2.1.4.22.1,它有表项类型的节点ipNetToMediaType, # 知道ARP表项是动态表项,还是静态表项,包含的节点如下。 "ipNetToMediaIfIndex": (1, 3, 6, 1, 2, 1, 4, 22, 1, 1), # 端口索引 "ipNetToMediaPhysAddress": (1, 3, 6, 1, 2, 1, 4, 22, 1, 2), # 物理地址 (ARP表oid,IP-MAC) "ipNetToMediaNetAddress": (1, 3, 6, 1, 2, 1, 4, 22, 1, 3), # IP地址 "ipNetToMediaType": (1, 3, 6, 1, 2, 1, 4, 22, 1, 4), # 表项类型 } # 方案一 测试过程中 一直报, SNMPv2-MIB::sysDescr = No Such Instance currently exists at this OID def snmpget(): cg = cmdgen.CommandGenerator() ##获得CommandGenerator对象 errorIndication, errorStatus, errorIndex, varBinds = cg.getCmd( #0代表v1,1代表v2c cmdgen.CommunityData(communityIndex='public', communityName='snuser', mpModel=1), ##社区信息,my-agent ,public 表示社区名,1表示snmp v2c版本,0为v1版本 cmdgen.UdpTransportTarget(('192.168.10.10', 161)), #, ##这是传输的通道,传输到IP 192.168.10.10, 端口 161上(snmp标准默认161 UDP端口) oTable["sysName"]+(0,) # 必须加 +(0,) MIB值,后面必须跟个0 否则报 No Such Instance currently exists at this OID ) # oTable表是从网上代表中找的,可能不是最新,也可以直接在对应值后面,补上0,就像ObjectType(ObjectIdentity('SNMPv2-MIB','sysName',0)) 后面的0必须带上一样,否则也会报同样的错。 # print (errorIndication, errorStatus, errorIndex, varBinds) ##varBinds返回是一个stulp,含有MIB值和获得值 print(varBinds[0][1]) snmpget()
值得标红的地方:
oTable["sysName"]+(0,) # 必须加 +(0,) MIB值,后面必须跟个0 否则报 No Such Instance currently exists at this OID )
# oTable表是从网上代表中找的,可能不是最新,也可以直接在对应值后面,补上0,就像
ObjectType(ObjectIdentity('SNMPv2-MIB','sysName',0))
后面的0必须带上一样,否则也会报同样的错。
SNMPv2-MIB::sysUpTime.0 = 1694282773
1.3.6.1.2.1.1.3.0
1694282773
可以看到sysUpTime.0 这个.0