2014-10-11 115 views
0

我正在使用pysnmp從IPNetToMediaPhysAddress獲取IP和MAC地址列表 這是沒有問題的。 但我有一個問題,但將mac地址轉換爲人類可讀的。 的SNMP代碼已經引起了Mac顯示爲pysnmp mac到人類可讀

0x05056bdafc 

我想知道如何將其轉換爲人類可讀的MAC地址。 據我所知,有些0缺少細節在這裏 - http://blog.colovirt.com/2009/05/05/linuxnetworkingvmware-snmpwalk-mac-address-missing-0s/

是否有一些代碼或使用pysnmp將它轉換爲人類可讀的方式?

乾杯您的幫助

回答

2

可以使用netaddr包。如果你在Ubuntu/Debian的工作,你可以很容易地安裝它是這樣的:

$ source myenvironment/bin/activate 
$ pip install netaddr 

那麼你可以試試這個:

# apt-get install python-netaddr 

或者,你可以在virtualenv中或Python3 VENV與pip安裝:

$ 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

希望這會有所幫助。祝你好運!

+0

謝謝你的幫助。我犯了把十六進制地址放在引號內的錯誤,這就是爲什麼當我第一次嘗試時它不起作用。感謝您的協助。 – clonerworks 2014-10-11 03:14:23

1

SNMP的方式是使用MIB將所有接收到的值解析爲人性化的形式。這個example中的lookupValues = True標誌確實有效。然而,您首先必須:A)將傳統的MIB和所有依賴它的MIB轉換爲pysnmp格式,並且B)將pysnmp-MIB加載到基於pysnmp的應用程序中(通過MibVariable.loadMibs())。

另外,如果你知道確切的OID,它的值是MAC,那麼下面這段代碼可以幫助:

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