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

Python hex IP as string to DDN IP string

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

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

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

这里是一个完整的如何转换为十进制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 

根据CISCO-TC MIB,CiscoNetworkAddress实际上是一个字节串。有很多方法可以将八位字节串转换为 DDN。例如,使用来自 Python 3 标准库的 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 转换。