使用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深入学习之内存管理
Aug 31 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python提取网页中超链接的方法
Sep 18 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
python如何求解两数的最大公约数
Sep 27 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
QML实现钟表效果
Jun 02 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
js实现五星评价功能
2017/03/08 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python实现通讯录功能
2018/02/22 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
学校门卫管理制度
2014/01/30 职场文书
软件项目开发计划书
2014/05/01 职场文书
高中同学会活动方案
2014/08/14 职场文书
领导干部作风建设总结
2014/10/23 职场文书
推广普通话的宣传语
2015/07/13 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸