pysnmp mac对人类可读

时间:2014-10-11 02:08:43

标签: python python-3.x pysnmp

我正在使用pysnmp从ipNetToMediaPhysAddress获取IP和mac地址列表 这没有问题。 我有一个问题,但将mac地址转换为人类可读的地址。 SNMP代码导致mac显示为

0x05056bdafc

我想知道如何将其转换为人类可读的mac地址。 据我所知,这里的细节缺少一些0 - http://blog.colovirt.com/2009/05/05/linuxnetworkingvmware-snmpwalk-mac-address-missing-0s/

是否有一些代码或方法使用pysnmp将其转换为人类可读的?

为你的帮助干杯

2 个答案:

答案 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'