使用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 相关文章推荐
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
Python多线程实现同步的四种方式
May 02 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
在windows下Python打印彩色字体的方法
May 15 Python
python实现图片筛选程序
Oct 24 Python
python SVM 线性分类模型的实现
Jul 19 Python
简单介绍python封装的基本知识
Aug 10 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
python 进程池pool使用详解
Oct 15 Python
Python jieba结巴分词原理及用法解析
Nov 05 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服务器页面间跳转实现方法
2012/08/02 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
Android中的jQuery:AQuery简介
2014/05/06 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
Vuex的热更替如何实现
2020/06/05 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python计算文本文件行数的方法
2015/07/06 Python
浅析python中的分片与截断序列
2016/08/09 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
什么是事务?事务有哪些性质?
2012/03/11 面试题
优秀干部获奖感言
2014/01/31 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
公司委托书怎么写
2014/08/02 职场文书
小学优秀教师材料
2014/12/15 职场文书
2015年社区文体活动总结
2015/03/25 职场文书