代码如下:
#!/usr/bin/python
#filename:ipintoint.py
def ip_into_int(ip):
return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.')))
def is_same_network(ip, network):
network = network.split('/')
mask = ~(2**(32-int(network[1])) - 1)
return (ip_into_int(ip) & mask) == (ip_into_int(network[0]) & mask)
if __name__ == '__main__':
print is_same_network('2.245.38.1', '219.245.32.0/20')
print ip_into_int('1.1.1.1')
原理:
先把 192.168.1.13 变成16进制的 c0.a8.01.0d ,再去了“.”后转成10进制的 3232235789 即可。
可以直接:ping 3232235789
将ip地址从整数(如168442432)到以点号分隔的字符串类型(如10.10.58.64)之间的转换,或实现从字符串到整数的转换。
方式很多,可以用linux下的C语言编程,调用inet_aton等函数即可实现(参考man inet_aton)。
本文提供一种python的实现方法,更简单好用。
首先:
字符串到整数的转换:
更新版,结果都为正整数,前面这个当结果ip地址为128.0.0.0及其以上时,结果会表示为负数。
整数到字符串的转换:
各个函数的功能可以参考python的文档,例如:
更多内容请参考python documentation,在windows安装python2.5时还附带chm的文档。
对用户IP范围进行限制,如果使用直接IP地址方式对比的话性能很不好,通常是将IP地址转换为整数,类似“2130706433”这样,这个数字就是代表“127.0.0.1”这个IP地址。
用脚本进行计算
1)将IP转换为整数:
2)将整数转换为IP: