输出PySNMP获取的IPv6地址的缩写形式

输出PySNMP获取的IPv6地址的缩写形式

通过PySNMP(Python的SNMP库)获得的IPv6地址非常难以使用。它是模制并以IPv6缩写形式输出的备忘录。

?环境 b>服务器操作系统:CentOS 7.5Python版本:3.6.8

关于获取的信息的转换

这次,让我们考虑使用Pysnmp获取OID 1.3.6.1.2.1.4.34.1.3.2(ipAddressIfIndex)信息的情况。

与Pysnmp获得的IPv6地址相对应的位置如下。22.3.5.56.4.0.0.17.0.0.0.0.0.0.0.6它是一个十进制数字符号,由句点分隔的8位。

此 b>

1603:0538:0400:0011:0000:0000:0000:0006更改为十六进制表示法后,用冒号分隔16位,如

1603:538:400:11::6 b>最后,缩写用于输出。

Python3代码

请输入任何SNMP团体名称,等等。

ipv6_sample.py

123456789101112131415161718192021222324252627282930313233343536373839404142from pysnmp.hlapi import *import ipaddressimport sysargvs = sys.argvdef ipv6_search(host) :    oid = “1.3.6.1.2.1.4.34.1.3.2”    # snmp情報を取得する    for (errorIndication,         errorStatus,         errorIndex,         varBinds) in nextCmd(SnmpEngine(),                              CommunityData(‘コミュニティ名’),                              UdpTransportTarget((host, ポート番号)),                              ContextData(),                              ObjectType(ObjectIdentity(oid)),                              lexicographicMode=False                              ):          # 取得できたインタフェース分繰り返す          for name, val in varBinds:              spr1 = str(name).split(‘.’)              spr2 = str(val).split(‘ ‘)              iplist = ”              for i in range (12,28):                  # iplistに各オクテットを16進数に変換し0埋めして足していく                  iplist += str(‘{:02x}’.format(int(spr1[i])))                  if i % 2 == 0 or i > 26:                      continue                  else:                      # 所定の位置にコロンを加える                      iplist += “:”              # ipaddressモジュールでIPv6短縮形にして表示              print (“Ifindex:%s,ipv6address:%s” % (spr2[0],ipaddress.IPv6Address(iplist)))if __name__ == ‘__main__’:    ipv6_search(argvs[1])执行结果

如下所示,可以使用缩写形式获取目标网络设备的接口的IPv6地址这次,我也尝试获取具有IPv6地址的接口的索引,但是我根据目的获得了我喜欢的信息。

12$ python if_ipv6_sample.py 情報取得したいネットワーク機器のIPIfindex:20,ipv6address:1603:538:400:11::6


比丘资源网 » 输出PySNMP获取的IPv6地址的缩写形式

发表回复

提供最优质的资源集合

立即查看 了解详情