Python hex IP作为DDN IP字符串的字符串

时间:2017-01-27 09:24:49

标签: python python-3.x pysnmp

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

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

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

2 个答案:

答案 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