使用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 xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
使用python远程操作linux过程解析
Dec 04 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
TensorFlow Autodiff自动微分详解
Jul 06 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
Python 内置函数速查表一览
Jun 02 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
javascript编写简易计算器
2017/05/06 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
基于python历史天气采集的分析
2019/02/14 Python
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
关于爱国的标语
2014/06/24 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
排球赛新闻稿
2015/07/17 职场文书
深入理解python协程
2021/06/15 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
Python函数对象与闭包函数
2022/04/13 Python