Python 十六进制 IP 作为字符串到 DDN IP 字符串



>我有以下十六进制IP:0xac141315

我想将其转换为等效的 DDN。我曾经使用'.'.join([str(x) for x in 0xac141315.asNumbers()]),当0xac141315具有以下类型时:<class 'CiscoNetworkAddress'>

或者有没有办法将字符串转换回CiscoNetworkAddress

根据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 转换。

以下是如何转换为十进制 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 

最新更新