使用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字符串转换成浮点数函数分享
Jul 24 Python
Django与JS交互的示例代码
Aug 23 Python
教你学会使用Python正则表达式
Sep 07 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
Python3并发写文件与Python对比
Nov 20 Python
Python数据存储之 h5py详解
Dec 26 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
PyQt5每天必学之进度条效果
2018/04/19 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
写好自荐信的几个要点
2013/12/26 职场文书
社区包粽子活动方案
2014/01/21 职场文书
加拿大留学自荐信
2014/01/28 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
代领报检证委托书范本
2014/10/11 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL