受到 scapy.utils.ltoa() 这个函数的启发,想贴一段祖传代码。
IPV4的地址,可以用点分十进制表示,例如:192.168.10.121。与之对应,可以用一个整形数字表示:3232238201。将整数转化成十六进制形式的简单过程是:
hex(3232238201) >>>变>>> 0xc0a80a79 >>>变>>> c0_a8_0a_79 >>>变>>> 192_168_10_121
为实现这两种形式的转换,给出两个祖传函数:
## 输入:整型IPV4地址。例如:3232238201
## 输出:点分十进制字符串IPV4地址。例如:192.168.10.121
## 异常:输入的整数不是一个IPV4地址。
def bytes_2_Dotted_Decimal_Notation(bytes_network):
#IPV4 address, like 192.168.0.1, 8 bytes
if (bytes_network <= 0 or bytes_network >= 0xFFFFFFFF):
raise ValueError("illegal network value", hex(bytes_network))
ls = [ ]
for i in range(4):
ls.append (str( bytes_network & 0xFF))
bytes_network = bytes_network >> 8
ls.reverse()
return ".".join(ls)
## 输入:点分十进制字符串IPV4地址。例如:192.168.10.121
## 输出:整型IPV4地址。例如:3232238201
## 异常:输入的字符串不是一个IPV4地址。
def dotted_Decimal_Notation_2_Bytes(ddn_network):
#根据IPV4地址的点分十进制形式,得到整数形式
ls =ddn_network.split('.')
result = 0
for i in ls:
if int(i) <0 or int(i)>255:
raise ValueError("illegal network value", ddn_network)
result = result <<8 | int(i)
return result