0

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

0x05056bdafc

我想知道如何将其转换为人类可读的 mac 地址。我知道根据此处的详细信息缺少一些 0 - http://blog.colovirt.com/2009/05/05/linuxnetworkingvmware-snmpwalk-mac-address-missing-0s/

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

为你的帮助干杯

4

2 回答 2

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

您可以在此处找到更多示例。

希望这可以帮助。祝你好运!

于 2014-10-11T02:45:22.780 回答
1

SNMP 方法是使用 MIB(s) 将所有接收到的值解析为人类友好的形式。本示例中的 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'
于 2014-10-11T20:18:19.710 回答