我正在使用pysnmp从ipNetToMediaPhysAddress获取IP和mac地址列表 这没有问题。 我有一个问题,但将mac地址转换为人类可读的地址。 SNMP代码导致mac显示为
0x05056bdafc
我想知道如何将其转换为人类可读的mac地址。 据我所知,这里的细节缺少一些0 - http://blog.colovirt.com/2009/05/05/linuxnetworkingvmware-snmpwalk-mac-address-missing-0s/
是否有一些代码或方法使用pysnmp将其转换为人类可读的?
为你的帮助干杯
答案 0 :(得分:2)
您可以使用netaddr
包。如果您正在使用Ubuntu / Debian,您可以通过这种方式轻松安装:
# apt-get install python-netaddr
或者,您可以使用pip
在virtualenv或Python3 venv中安装它:
$ source myenvironment/bin/activate
$ pip install netaddr
然后你可以试试这个:
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from netaddr import *
>>> mac = EUI(0x05056bdafc)
>>>
>>> print mac
00-05-05-6B-DA-FC
>>>
或使用Python 3:
$ python
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from netaddr import *
>>>
>>>
>>> mac = EUI(0x05056bdafc)
>>>
>>> print (mac)
00-05-05-6B-DA-FC
>>>
>>> mac.dialect = mac_unix
>>>
>>> print (mac)
0:5:5:6b:da:fc
您可以找到更多示例here。
希望这会有所帮助。祝你好运!
答案 1 :(得分:1)
SNMP方式是使用MIB将所有接收的值解析为人性化的形式。这个example中的lookupValues = True标志可以解决问题。但是,首先必须:A)将传统的MIB和它依赖的所有其他MIB转换为pysnmp格式,B)将pysnmp-MIB加载到基于pysnmp的应用程序(通过MibVariable.loadMibs())。
或者,如果您知道其值为MAC的确切OID,则以下代码可能有所帮助:
>>> from pysnmp.smi import builder
>>> mibBuilder = builder.MibBuilder()
>>> MacAddress, = mibBuilder.importSymbols('SNMPv2-TC', 'MacAddress')
>>> macAddress = MacAddress(hexValue='05056bdafc'.zfill(12))
>>> macAddress.prettyPrint()
'00:05:05:6b:da:fc'
或者它可能只在Python中完成:
>>> mac = '05056bdafc'.zfill(12)
>>> ':'.join([ mac[i:i+2] for i in range(0, 12, 2) ])
'00:05:05:6b:da:fc'