使用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异常学习笔记
Feb 03 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python实现购物系统(示例讲解)
Sep 13 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
python实现五子棋游戏
Jun 18 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
Python3中的tuple函数知识点讲解
Jan 03 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php编写简单的文章发布程序
2015/06/18 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
javascript document.images实例
2008/05/27 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
python爬虫常用的模块分析
2014/08/29 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
新闻编辑求职信
2014/04/09 职场文书
党的生日演讲稿
2014/09/10 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
早恋主题班会
2015/08/14 职场文书
小学数学教师研修日志
2015/11/13 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
创业计划书之便利店
2019/09/05 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书