您的位置:首页 > 编程语言 > Python开发

python IP 地址和数字之间的转换

2016-01-13 17:58 633 查看
突然间发现,ip地址以某种方式转换为数字竟然可以ping通并且能访问。很好奇这中间到底发什么了什么?

例如将百度的ip “119.75.218.77”转换为数字就是2001459789。我们在cmd下ping一个这个数字发现



竟然真可以Ping通 而且在解析的时候又把这串数字解析为”119.75.218.77”这个ip地址了。

小白开启充电模式一探究竟:

为什么要将IP地址转化为数字地址?

根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且是唯一的。例如某IP地址为:

11010010 01001001 10001100 00000010

很明显,这些数字谁记得住啊,所以为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述IP地址就变成了:118.123.15.102了,是不是直观很多。

简单的说,数字地址就是IP地址的另一种表现形式。都可以被浏览器,ping命令识别还原和访问。

区别: IP地址用”点分十进制”表示,用’.’分成4部分; 数字地址是一串用”十进制”表示的数字。 0.0有点废话的感觉

作用:主要用于快速查询该IP地址或IP段属于那个城市,从而进行流量统计,根据来访IP显示天气预报,根据IP显示不同的页面等。将IP地址或IP段转换为数字保存在数据库中,可以提高检索速度。要知道,在数据库中数字类型的要比文本类型的检索速度快的多,从而提高网站性能。

这样考虑一下,将IP地址转换为数字非常有必要。

下面再看一下这个转换过程是怎么实现的:

IP—>数字:

例如:”119.75.218.77”,我们要将这个IP转换为数字,首先我们要将”点分十进制”的每一位转换为16进制。

经过我们转换后如下

119 -----> 77
75  -----> 4B
218 -----> DA
77  -----> 4D


然后我们将 十六进制774BDA4D 转换为十进制数即是我们想要的数字IP 2001459789 了

这样是否有些麻烦,我们再来看个简单的:

119*256*256*256+75*256*256+218*256+77 =2001459789

数字—>IP:

既然IP可以转换为数字,那么数字也一定可以以某种方式还原为IP了。

201459789%256 = 77
(201459789/256)%256 = 218
.
.


程序怎么实现IP地址和数字之间的转换呢?

python很强大

ip—>num:

import socket
import struct
ip = '119.75.218.77'
num_ip=socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])

'2001459789'


num—>ip

import socket
import struct
num_ip = 2001459789
ip = socket.inet_ntoa(struct.pack('I',socket.htonl(num_ip)))

'119.75.218.77'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python