LINUX.ORG.RU

Python, преобразование строки (что за формат?)


0

0

Использую стандатные биндинги к net-snmp для получения таблицы маков на свиче. snmpwalk возвращает строку в "читабельном виде": 00 00 86 3D DB BC, однако из питона я получаю её вот в таком виде: \x00\x00\x86=\xdb\xbc

Собственно вопрос - в каком это формате и соответственно как ее преобразовать к тому же виду, в котором отдает ее snmpwalk?

$ snmpwalk -v 1 -c public switch1 dot1dTpFdbAddress
BRIDGE-MIB::dot1dTpFdbAddress.'...=..' = Hex-STRING: 00 00 86 3D DB BC
...

На питоне:
>>>import netsnmp
>>>var = netsnmp.Varbind('dot1dTpFdbAddress')
>>>res = netsnmp.snmpwalk(var, Version = 1, DestHost = 'switch1', Community='public')
>>>res[0]
'\x00\x00\x86=\xdb\xbc'

Вот примерчик как я это делал.

#функция которой передают оид и которая возвращает результат def sent_recive(var): dic = {} #инициализаруем словарь oid_k = [ var ] encoded_oids = map(asn1.OBJECTID().encode, oid_k ) #кодируем try: (answer, src) = client.send_and_receive(req.encode(community=community, encoded_oids=encoded_oids)) #посылаем и получаем ответ except (role.NoResponse,role.NetworkError): #print "хост не ответил" sys.exit(-1)

rsp.decode(answer)#декодируем vals = map(lambda x: x[0](), map(asn1.decode, rsp['encoded_vals']))#выбираем из кучи полученной инфы нужное dic[i] = vals[0] #заполняем словарь if req != rsp: raise 'Unmatched response: %s vs %s' % (str(req), str(rsp)) return dic

gescheit
()
Ответ на: комментарий от gescheit

Вот примерчик как я это делал.
def sent_recive(var):
        dic = {} #инициализаруем словарь
        oid_k = [ var ]
        encoded_oids = map(asn1.OBJECTID().encode, oid_k ) #кодируем
        try:
                (answer, src) = client.send_and_receive(req.encode(community=community, encoded_oids=encoded_oids)) #посылаем и получаем ответ
        except (role.NoResponse,role.NetworkError):
                #print "хост не ответил"
                sys.exit(-1)

        rsp.decode(answer)#декодируем
        vals = map(lambda x: x[0](), map(asn1.decode, rsp['encoded_vals']))#выбираем из кучи полученной инфы нужное
        dic[i] = vals[0] #заполняем словарь
        if req != rsp:
                raise 'Unmatched response: %s vs %s' % (str(req), str(rsp))
        return dic

gescheit
()

' '.join(['%02X' % ord(x) for x in res[0]])

зы: чудный язык, не правда?.

anonymous
()
Ответ на: комментарий от gescheit

Во, спасибо. Расковыривал по полочкам чего там что делает и пришел к простому решению:
res[0].encode("hex")
Возвращает то что нужно :)

VinilNavigator
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.