python把ip地址转化为整数的代码

发布时间:2019-11-04编辑:脚本学堂
本文介绍下,python把ip地址转换为整数的一段代码,适合初学python的朋友参考。

python实现转化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;