使用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实现多线程下载文件的代码实例
Jun 01 Python
Python批量查询域名是否被注册过
Jun 21 Python
Python基础教程之利用期物处理并发
Mar 29 Python
Django中反向生成models.py的实例讲解
May 30 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
django基于restframework的CBV封装详解
Aug 08 Python
Python学习笔记之While循环用法分析
Aug 14 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
Python使用sqlite3模块内置数据库
May 07 Python
Python 连接 MySQL 的几种方法
Sep 09 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 中的类
2006/10/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
图片按比例缩放函数
2006/06/26 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
Javascript实现的简单右键菜单类
2015/09/23 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python实现的ini文件操作类分享
2014/11/20 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python 实现字符串下标的输出功能
2020/02/13 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
大学军训自我鉴定
2013/12/15 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS