使用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 相关文章推荐
python中迭代器(iterator)用法实例分析
Apr 29 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Python3标准库总结
Feb 19 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
Python经典五人分鱼实例讲解
Jan 04 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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
isset和empty的区别
2007/01/15 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
js实现自定义路由
2017/02/04 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
python缩进区别分析
2014/02/15 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
低碳环保倡议书
2014/04/14 职场文书
社区先进事迹材料
2014/05/19 职场文书
经营管理策划方案
2014/05/22 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers