我有十六进制的以下IP:0xac141315
我想将其转换为DDN等价物。
当'.'.join([str(x) for x in 0xac141315.asNumbers()])
具有以下类型时,我曾使用0xac141315
:<class 'CiscoNetworkAddress'>
或者有没有办法将字符串转换回CiscoNetworkAddress
?
答案 0 :(得分:1)
根据CISCO-TC
MIB,CiscoNetworkAddress
实际上是一个八位字符串。有很多方法可以将八位字符串转换为DDN。例如,使用Python 3 stdlib中的ipaddress
模块:
>>> 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地址时应用IPv4转换。
答案 1 :(得分:0)
以下是如何转换为十进制ip的完整示例:
#!/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