使用Python对IP进行转换的一些操作技巧小结
作者:goldensun 发布时间:2022-09-08 05:13:29
标签:Python,IP
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 ,就是每个索引位的对应值 。
0
投稿
猜你喜欢
- 如何在读取Excel文件时创建列表的下拉菜单?代码如下,用来创建工作表列表的下拉菜单: < select 
- 不久之前,笔者一个在企业中从事网管工作的朋友向我求助关于SQL Server服务器内存升级后遇到的问题。原来,他们企业准备上一个企业邮箱系统
- 链表链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结
- windows下python的安装教程,供大家参考,具体内容如下—–因为我是个真小白,网上的大多入门教程并不适合我这种超级超级小白,有时候还
- CSS 和 JavaScript 的压缩已经很成熟,各大网站都在使用。HTML 的压缩(特指去除空白字符和注释),除了 Google 等搜索
- 1、Dreamweaver中的复制我在网页中复制的文字,粘贴到Dreamweaver中时,它总是带有原来网页的格式,请问如何只复制其中的文本
- 安装request库以火车的站站查询为例的post和get方法的接口测试使用pytest测试接口1、requests的请求机制1、安装req
- 很多时候,我们都在说设计需要引导用户,尤其是在对初级用户的引导上,很大程度决定着产品能否快速聚拢用户的可能;但同样很多时候,用户并不需要引导
- 如果 replaceText 为函数,对于每一个匹配的子字符串,调用该函数时带有下面的 m+3 个参数,此处 m 是在 rgExp 中捕获的
- 1.了解oracle外部表 外部表定义:结构被存放在数据字典,而表数据被放在OS文件中的表 作用:在数据库中查询OS文件的数据,还可以将OS
- 各位大哥: 在javascript中如何取整?比如: var
- 一. XSL入门1.XSL---XML的样式表 HTML网页使用预先确定的标识(tags),这就是说所有的标记都有明确的含义,例如<p
- 如果要在应用程序中周期性地进行某项操作,比如周期性地检测主机的CPU值,则需要用到QTimer定时器,QTimer类提供了重复的和单次的定时
- 目录一、简介思路高德地图API二、获取经纬度三、路线规划(四种方式)获取出行路线数据处理四、演示效果五、结尾一、简介路径规划中包括步行、公交
- 测试sql: 代码如下:SET STATISTICS IO ON SET STATISTICS TIME ON SELECT COUNT(1
- 当需要制作转动鼠标滚轮放大页面字体这样的交互效果时,会用到 Mousewheel 事件。其实在大多数浏览器(IE6, IE7, IE8, O
- 【原文地址】Tip/Trick: Url Rewriting with ASP.NET 【原文发表日期】 Monday, February
- 本文实例为大家分享了python实现支付宝当面付示的具体代码,供大家参考,具体内容如下一、配置信息准备登录蚂蚁金服开放平台:https://
- 一. 通过 ConfigProto 设置多线程 (具体参数功能及描述见 tensorflow/core/protobuf/config.pr
- 二维正态分布采样后,绘制置信椭圆假设二维正态分布表示为:下图为两个二维高斯分布采样后的置信椭圆和每个二维高斯分布采样100个数据点,图片为: