Wie konvertieren von hex-kodierten string zu einem "lesbaren" string?
Ich bin mit dem Net-SNMP-Bindungen für python, und ich bin versucht zu greifen, eine ARP-cache von einem Brocade-switch. Hier ist, was mein code sieht wie folgt aus:
#!/usr/bin/env python
import netsnmp
def get_arp():
oid = netsnmp.VarList(netsnmp.Varbind('ipNetToMediaPhysAddress'))
res = netsnmp.snmpwalk(oid, Version=2, DestHost='10.0.1.243', Community='public')
return res
arp_table = get_arp()
print arp_table
SNMP-code selbst ist in Ordnung. Ausgabe von snmpwalk
sieht wie folgt aus:
<snip>
IP-MIB::ipNetToMediaPhysAddress.128.10.200.6.158 = STRING: 0:1b:ed:a3:ec:c1
IP-MIB::ipNetToMediaPhysAddress.129.10.200.6.162 = STRING: 0:1b:ed:a4:ac:c1
IP-MIB::ipNetToMediaPhysAddress.130.10.200.6.166 = STRING: 0:1b:ed:38:24:1
IP-MIB::ipNetToMediaPhysAddress.131.10.200.6.170 = STRING: 74:8e:f8:62:84:1
</snip>
Aber meine Ausgabe aus dem python-Skript liefert ein Tupel von hex-kodierten strings, die wie folgt aussieht:
('\x00$8C\x98\xc1', '\x00\x1b\xed;_A', '\x00\x1b\xed\xb4\x8f\x81', '\x00$86\x15\x81', '\x00$8C\x98\x81', '\x00\x1b\xed\x9f\xadA', ...etc)
Ich habe einige Zeit damit verbracht zu googeln und kam über die struct
Modul und die .decode("hex")
string-Methode, aber die .decode("hex")
Methode scheint nicht zu funktionieren:
Python 2.7.3 (default, Apr 10 2013, 06:20:15)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> hexstring = '\x00$8C\x98\xc1'
>>> newstring = hexstring.decode("hex")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found
>>>
Sowie der Dokumentation struct
ist ein bisschen über meinem Kopf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige weitere clevere google-fu aufgedeckt dieser code-snippet, das gibt mir die Ergebnisse, die ich erwarte:
So "Dekodieren" ist eigentlich eine Fehlbezeichnung, da dieser code auch Erträge ein ordentliches Ergebnis (mit
encode
unddecode
erscheinen syntaktische Zucker fürbinascii.a2b()
undbinascii.b2a()
):Ändern
"hex"
zu"hex_codec"
für Python < 3Dies gilt für python 3+ Möglich?
TypeError: Non-hexadecimal digit found
. Ich habe eine Lösung zu finden, aber die poste ich in Kürze