Python 3.x IPv6链接本地地址作为PySNMP中的UDP6TransportTarget?

Python 3.x IPv6链接本地地址作为PySNMP中的UDP6TransportTarget?,python-3.x,ipv6,pysnmp,link-local,Python 3.x,Ipv6,Pysnmp,Link Local,我正在尝试对链接本地地址上的代理进行SNMP查询FE80::1:1%enp0s8。代码如下: #!/usr/bin/python3 from pysnmp.hlapi import * USER_KEY='manager1' AUTH_PROT=usmHMACMD5AuthProtocol PRIV_PROT=usmAesCfb256Protocol userData = UsmUserData('manager', authKey=USER_KEY,

我正在尝试对链接本地地址上的代理进行SNMP查询
FE80::1:1%enp0s8
。代码如下:

#!/usr/bin/python3

from pysnmp.hlapi import *

USER_KEY='manager1'
AUTH_PROT=usmHMACMD5AuthProtocol
PRIV_PROT=usmAesCfb256Protocol

userData = UsmUserData('manager', authKey=USER_KEY, 
                                  privKey=USER_KEY, 
                                  authProtocol=AUTH_PROT,
                                  privProtocol=PRIV_PROT)
target=Udp6TransportTarget(('FE80::1:1%enp0s8',161))

g = getCmd(SnmpEngine(),
       userData,
       target,
           ContextData(),
           ObjectType(ObjectIdentity('SNMPv2-MIB','sysUpTime',0)))

print(next(g))
其中
enp0s8
是我可以找到代理的界面。但是,当我使用此选项时,会收到以下错误消息:

Traceback (most recent call last):
  File "get-SNMP-var.py", line 21, in <module>
    print(next(g))
  File "/usr/lib/python3.5/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 107, in getCmd
    lookupMib=options.get('lookupMib', True)))
  File "/usr/lib/python3.5/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 122, in getCmd
    addrName, paramsName = lcd.configure(snmpEngine, authData, transportTarget)
  File "/usr/lib/python3.5/site-packages/pysnmp/hlapi/lcd.py", line 107, in configure
    transportTarget.tagList
  File "/usr/lib/python3.5/site-packages/pysnmp/entity/config.py", line 269, in addTargetAddr
    transportAddress = TransportAddressIPv6(transportAddress)
  File "/usr/lib/python3.5/site-packages/pyasn1/type/univ.py", line 312, in __init__
    base.AbstractSimpleAsn1Item.__init__(self, value, tagSet, subtypeSpec)
  File "/usr/lib/python3.5/site-packages/pyasn1/type/base.py", line 74, in __init__
    value = self.prettyIn(value)
  File "<string>", line 217, in prettyIn
OSError: illegal IP address string passed to inet_pton
回溯(最近一次呼叫最后一次):
文件“get-SNMP-var.py”,第21行,在
打印(下一页(g))
getCmd中的文件“/usr/lib/python3.5/site packages/pysnmp/hlapi/asyncore/sync/cmdgen.py”,第107行
lookupMib=options.get('lookupMib',True)))
getCmd中的文件“/usr/lib/python3.5/site packages/pysnmp/hlapi/asyncore/cmdgen.py”,第122行
addrName,paramsName=lcd.configure(snmpEngine,authData,transportTarget)
文件“/usr/lib/python3.5/site packages/pysnmp/hlapi/lcd.py”,第107行,在configure中
transportTarget.tagList
文件“/usr/lib/python3.5/site packages/pysnmp/entity/config.py”,第269行,位于AddTargetAddress中
transportAddress=TransportAddressIPv6(transportAddress)
文件“/usr/lib/python3.5/site packages/pyasn1/type/univ.py”,第312行,在__
base.AbstractSimpleAsn1Item.\uuuuu init\uuuuuu(self、value、标记集、subsubspec)
文件“/usr/lib/python3.5/site packages/pyasn1/type/base.py”,第74行,在__
value=self.prettyIn(值)
文件“”,第217行,格式为prettyIn
OSError:传递到inet\u pton的非法IP地址字符串
当我没有为此链接本地地址指定接口时,我会超时。使用带有指定工作范围的
snmpget
实用程序


我的问题是:如何使用
Udp6TransportTarget
指定IPv6链路本地地址的作用域?

我刚刚查看了pysnmp源代码,它的IPv6地址打印功能似乎无法处理IPv6地址中的作用域。也许是时候为PySNMP做些贡献并编写一个补丁了:)PySNMP补丁将不胜感激!我将立即将其提交到源代码树中。我刚刚查看了pysnmp源代码,它的IPv6地址打印功能似乎无法处理IPv6地址中的作用域。也许是时候为PySNMP做些贡献并编写一个补丁了:)PySNMP补丁将不胜感激!我将立即将其提交到源代码树中。