适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

python snmp 之 pysnmp 的学习笔记(一)

浏览量:898 作者:admin 类别:: 学习笔记 更新时间:2022-08-26 17:58:54
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


关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...