使用Python对IP进行转换的一些操作技巧小结


Posted in Python onNovember 09, 2015

Python Socket模块中包含一些有用IP转换函数,说明如下:

socket.ntohl(x)     // 类似于C语言的ntohl(x)

把32位正整数从网络序转换成主机字节序。

socket.ntohs(x)    // 类似于C语言的ntohs(x)

把16位正整数从网络序转换成主机字节序。

socket.htonl(x)     // 类似于C语言的htonl(x)

把32位正整数从主机字节序转换成网络序。

socket.htons(x)    // 类似于C语言的htons(x)

把16位正整数从主机字节序转换成网络序。

socket.inet_aton(ip_string) // 依赖于inet_aton的C实现

转换IPV4地址字符串(192.168.10.8)成为32位打包的二进制格式(长度为4个字节的二进制字符串),它不支持IPV6。inet_pton()支持IPV4/IPV6地址格式。

socket.inet_ntoa(packed_ip)

转换32位打包的IPV4地址为IP地址的标准点号分隔字符串表示。

socket.inet_pton(address_family,ip_string)

转换IP地址字符串为打包二进制格式。地址家族为AF_INET和AF_INET6,它们分别表示IPV4和IPV6。

socket.inet_ntop(address_family,packed_ip)

转换一个打包IP地址为标准字符串表达式,例如:“5aef:2b::8”或“127.0.0.1”。

>>>import socket
>>>import struct
>>>socket.ntohl(struct.unpack("i",socket.inet_aton("10.10.58.64"))[0])
168442432L
>>>socket.inet_ntoa(struct.pack("i", socket.htonl(168442432L)))
'10.10.58.64'
>>>struct.unpack("=I", socket.inet_aton("190.10.58.64"))
(1077545662,)
>>>socket.inet_ntoa(struct.pack("=I", 1077545662))
'190.10.58.64'
# 从IP地址字符串转换为整数值

defIp2Int(ip_string):
     return struct.unpack(“!I”,socket.inet_aton(ip))[0
# 从网络字节序的数字转换为IP地址(点号分隔)

def Int2Ip(ip):
     return socket.inet_ntoa(struct.pack(“!I”,ip))

也可以简单地使用lambda函数来实现ip和数字的互转:
ip转数字

>>> ip2num = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])
>>> ip2num('192.168.0.1')
3232235521

通过倒序的切割索引得出每个索引位具体的值,即j,i 的值。由于数字范围为0~255(共256个),所以再通过索引位求幂,再和本身的值求积,并求和。具体分解如下:

>>> [256**j*int(i) for j,i in enumerate(x.split('.')[::-1])]
[1, 0, 11010048, 3221225472]
>>> for j,i in enumerate(x.split('.')[::-1]):
...   print j,i
...
0 1
1 0
2 168
3 192

数字转IP

还是上面的IP ,可以通过简单的算法将数字再转为IP,具体代码如下:

>>> num2ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
>>> num2ip(3232235521)
'192.168.0.1

上例中先得出i 的值为[3, 2 , 1 ,0 ] ,实际上这部分得出的也是索引位的值,x 就是我们上面算到的求和后的值 3232235521 。该数分数除以256的索引位次方后,得出余数为256 ,就是每个索引位的对应值 。

Python 相关文章推荐
python2.7实现FTP文件下载功能
Apr 15 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
Django model序列化为json的方法示例
Oct 16 Python
举例讲解Python常用模块
Mar 08 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
Django中使用MySQL5.5的教程
Dec 18 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
Python实现模拟时钟代码推荐
Nov 08 #Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 #Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 #Python
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 #Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 #Python
Windows下为Python安装Matplotlib模块
Nov 06 #Python
python 的列表遍历删除实现代码
Apr 12 #Python
You might like
快速配置PHPMyAdmin方法
2008/06/05 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
python字符串中的单双引
2017/02/16 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python实现简单登陆流程的方法
2018/04/22 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
python numpy 反转 reverse示例
2019/12/04 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
服装电子商务创业计划书
2014/01/30 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
学用政策心得体会
2014/09/10 职场文书
酒会邀请函
2015/01/31 职场文书
活动新闻稿范文
2015/07/17 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
python获取字符串中的email
2022/03/31 Python