添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
更新时间:2015年11月09日 14:21:04   投稿:goldensun
这篇文章主要介绍了使用Python对IP进行转换的一些操作技巧小结,包括使用socket模块里的相关函数和匿名函数实现,需要的朋友可以参考下

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 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实现数组插入新元素的方法

    这篇文章主要介绍了python实现数组插入新元素的方法,涉及Python中insert方法的相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • python爬虫之生活常识解答机器人

    python爬虫之生活常识解答机器人

    这篇文章主要介绍了python爬虫之生活常识解答机器人,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • python如何发布自已pip项目的方法步骤

    python如何发布自已pip项目的方法步骤

    这篇文章主要介绍了python如何发布自已pip项目的方法步骤,方便大家学习,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • python使用ctypes调用第三方库时出现undefined symbol错误详解

    python使用ctypes调用第三方库时出现undefined symbol错误详解

    python中时间的库有time和datetime,pandas也有提供相应的时间处理函数,下面这篇文章主要给大家介绍了关于python使用ctypes调用第三方库时出现undefined symbol错误的相关资料,需要的朋友可以参考下
    2023-02-02
  • Python如何使用vars返回对象的属性列表

    Python如何使用vars返回对象的属性列表

    这篇文章主要介绍了Python如何使用vars返回对象的属性列表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python实现的将文件每一列写入列表功能示例【测试可用】

    Python实现的将文件每一列写入列表功能示例【测试可用】

    这篇文章主要介绍了Python实现的将文件每一列写入列表功能,涉及Python文件读取、遍历、序列追加、赋值等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • django admin组件使用方法详解

    django admin组件使用方法详解

    这篇文章主要介绍了django admin组件使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 如何用python清洗文件中的数据

    如何用python清洗文件中的数据

    数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样。 数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会占整个数据分析流程的80%左右的时间。今天,就来学习一下Python的数据清洗吧!
    2021-06-06
  • 微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧

    微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧

    这篇文章主要为大家详细介绍了微信小程序跳一跳游戏,python脚本跳一跳刷高分技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python实现CNN的多通道输入实例

    Python实现CNN的多通道输入实例

    今天小编就为大家分享一篇Python实现CNN的多通道输入实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01