如何判断一个IP地址是私有地址
来源:互联网 发布:淘宝上评价管理在哪里 编辑:程序博客网 时间:2024/05/16 08:44
如何判断一个IP地址是私有地址,首先,我们得先了解什么是私有地址。本文所指的IP地址,皆是IPV4。
一个IPV4地址,由四段组成,最大值为255,一个IP地址其实就是一个32位的bit串,每8位一段。所谓私有地址,就是非注册地址,只能做内网地址。私有地址有三类,分别是 A类 10.0.0.0 --10.255.255.255 B类 172.16.0.0--172.31.255.255 C类 192.168.0.0--192.168.255.255
这里的划分规则是这样的,A类有一个8位的前缀,B类的前缀是12位,C类的前缀是16位,啥意思呢。就拿A类地址来说,前八位已经定下来了,就是10,后面的22位,随意变化,那么范围自然就是10.0.0.0到10.255.255.255了,B类地址前12位已经定下来了,第一个八位定为172,第二个八位的前4位定为16,他们的二进制表示是这样的
第一段 10101100
第二段 00010000
第一段的8位加上第二段的前4位,这12位是固定下来的。那么后面的20位就是可以随便变化的,而第二段的后4位即便都是1,那么第二段的最大值也只能是00011111,也就是31,所以B类地址的第二段最大值就是31
C类地址的前16位都固定了,就是192.168
明白了私有地址的范围,我们也就好计算了。一种方法,就是根据规则对字符串进行比较,用中间的点做分割,然后逐一对每段的值进行判断,然而本文要说的是另一个思路。
我们可以把一个IP地址转成二进制,然后呢,每一类的地址的前面8,12,或16位其实是固定的,只要前面的这些位对得上,那么这个地址就是私有地址,程序用python编写,代码如下:
#coding=utf-8'''Created on 2015-11-28@author: kwsy'''import socketimport structip1 = 167772160ip2 = 2886729728ip3 = 3232235520def isPrivateIp(ip): #将ip地址转换成二进制的形式 binaryIp = socket.inet_aton(ip) #将二进制转成无符号long型 numIp = struct.unpack('!L', binaryIp)[0] #32位都是1 mark = 2**32-1 #取numIP的前16位 tag = (mark<<16) & numIp if ip3 ==tag: return True #取numIP的前12位 tag = mark<<20 & numIp if ip2 == tag: return True #取numIP的前8位 tag = (mark<<24) & numIp if ip1 == tag: return True return Falseif __name__=='__main__': print(isPrivateIp('192.168.0.1'))
相比对字符串分割然后逐一比较,是不是简单许多呢
- 如何判断一个IP地址是私有地址
- 判断一个字符串是否是IP地址
- 如何判断一个字符串的格式是一个合法的IP地址?
- 判断一个字符串是否是合法IP地址
- python实现判断一个字符串是否是合法IP地址
- 【Python】判断一个字符串是否是合法IP地址
- 判断一个IP地址是否是内网地址
- 如何判断字符串是否是有效的的IP地址
- 如何判断用户输入的字符串是否是IP地址
- 私有IP地址、回环地址
- 如何判断IP地址是否合法
- 私有IP地址
- 私有IP地址范围
- 私有IP地址
- 私有IP地址
- 私有IP地址
- IP私有地址
- 什么是私有IP地址
- Java集合之Map
- 你造SQL中的 Where 1=1 吗
- Swiftype添加站内搜索
- List集合的clear方法
- 短作业优先(SJF)算法
- 如何判断一个IP地址是私有地址
- 文件的操作2
- hexo-学习写博客内容
- 自定义View
- MySql修改数据库,表和字段的字符集
- 【吴鑫鸣】周评:过剩困局难解,将主导油价悲观下跌!
- leetcode 81:Search in Rotated Sorted Array II
- HDU 1839 Delay Constrained Maximum Capacity Path(二分+SPFA)
- mac系统配置android adb环境