使用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利用hook技术破解https的实例代码
Mar 25 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
如何使用python把ppt转换成pdf
Jun 29 Python
Python generator生成器和yield表达式详解
Aug 08 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 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
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
对联广告js flash激活
2006/10/19 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
python类装饰器用法实例
2015/06/04 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python模块smtplib学习
2018/05/22 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
美国在线购物频道:Shop LC
2019/04/21 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
汽车专业人才自我鉴定范文
2013/12/29 职场文书
童装店创业计划书
2014/01/09 职场文书
建筑工地宣传标语
2014/06/18 职场文书
销售员态度差检讨书
2014/10/26 职场文书
优秀团员个人总结
2015/02/26 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
对公司的意见和建议
2015/06/04 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书