python(2)把ip转化为整数,并且进行判断
|
|
|
#!/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中,如下:
首先: import socket import struct
字符串到整数的转换: socket.ntohl(struct.unpack('i',socket.inet_aton("10.10.58.64"))[0])
更新版,结果都为正整数,前面这个当结果ip地址为128.0.0.0及其以上时,结果会表示为负数。 struct.unpack('I',struct.pack('i',(socket.ntohl(struct.unpack('i', socket.inet_aton("201.119.123.249"))[0]))))[0]
整数到字符串的转换: socket.inet_ntoa(struct.pack('i',socket.htonl(980942848 )))
各个函数的功能可以参考python的文档,例如: >>> help(struct.pack) pack(fmt, *args) Return string containing values v1, v2, ... packed according to fmt. See struct.__doc__ for more on format strings.
更详细的可以参考python documentation,有联机版的,也有脱机版的,在windows安装python2.5时还附带chm的文档。
*******************************我是分割线**********************************
很多程序需要对用户IP范围进行限制,如果使用直接IP地址方式对比的话性能很不好,通常是将IP地址转换为整数,类似“2130706433”这样,这个数字就是代表“127.0.0.1”这个IP地址,下面是利用脚本进行计算
1)将IP转换为整数:
#!/bin/sh
if [ $# -eq 0 ];then echo ” Usage: ip2int.sh ip” exit fi a=`echo $1|cut -d/. -f1` b=`echo $1|cut -d/. -f2` c=`echo $1|cut -d/. -f3` d=`echo $1|cut -d/. -f4`
itip=`expr $a /* 256 /* 256 /* 256 + $b /* 256 /* 256 + $c /* 256 + $d ` echo $itip
2)将整数转换为IP:
#!/bin/sh
if [ $# -eq 0 ];then echo ” Usage: int2ip.sh IntNum” exit fi
itip=$1
a=$(($itip/256/256/256)); b=$(($itip/256/256-$a*256)); c=$(($itip/256-$a*256*256-$b*256)); d=$(($itip-a*256*256*256-$b*256*256-$c*256)); echo $a”.”$b”.”$c”.”$d;
|
|
转自:
http://blog.chinaunix.net/u2/82392/showart_1850360.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理