2017-01-27 2 views
0

У меня есть следующий IP в шестнадцатеричном: 0xac141315Python шестигранной IP в качестве строки в DDN IP строку

Я хотел бы, чтобы преобразовать его в DDN эквиваленте. я имел обыкновение использовать '.'.join([str(x) for x in 0xac141315.asNumbers()]) когда 0xac141315 имел следующий вид: <class 'CiscoNetworkAddress'>

Или есть способ, чтобы преобразовать строку обратно в CiscoNetworkAddress?

ответ

1

Согласно CISCO-TC MIB, CiscoNetworkAddress фактически является строкой октета. Существует много способов превратить строку октета в DDN. Например, с ipaddress модуль из Python 3 STDLIB:

>>> from pysnmp.hlapi import OctetString 
>>> ip = OctetString(hexValue='ac141315') # this is what you have 
>>> 
>>> ipaddress.IPv4Address(ip.asOctets()) 
IPv4Address('172.20.19.21') 

Или вы можете превратить его в SNMP SMI IP-адрес:

>>> from pysnmp.hlapi import IpAddress 
>>> IpAddress(ip.asOctets()).prettyPrint() 
'172.20.19.21' 

Кроме того, вы можете получить последовательность целых октетов прямо с вашего существующего объект:

>>> ip.asNumbers() 
(172, 20, 19, 21) 

Имейте в виду, что CiscoNetworkAddress предназначен для хранения различных типов адресов, а не только IPv4. Поэтому вы, вероятно, должны применять преобразование IPv4 только в том случае, если это действительно IPv4-адрес.

0

Вот полный пример того, как преобразовать в десятичную ф:

#!/usr/bin/python 
import sys 
# Must be (0xXXXXXXXX) 
if len(sys.argv)< 2: 
print("Usage: %s (HEX FORMAT, for example 0xAC141315)" % sys.argv[0]) 
sys.exit(0) 
user_option = sys.argv[1] 
hex_data=user_option[2:] 

#Check if length = 8 
if len(hex_data)< 8: 
hex_data = ''.join(('0',hex_data)) 

def hex_to_ip_decimal(hex_data): 
ipaddr = "%i.%i.%i.%i" % (int(hex_data[0:2],16),int(hex_data[2:4],16),int(hex_data[4:6],16),int(hex_data[6:8],16)) 
return ipaddr 
result=hex_to_ip_decimal(hex_data) 
print result 
Смежные вопросы