如何判断一个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 socket

import struct

ip1 = 167772160

ip2 = 2886729728

ip3 = 3232235520

def 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 False

if __name__=='__main__':

print(isPrivateIp('192.168.0.1'))         相比对字符串分割然后逐一比较,是不是简单许多呢

怎么判断私网地址_如何判断一个IP地址是私有地址相关推荐

  1. 淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使用方法教程

    淘宝对外提供共享的一个IP地址库API,更新也比较及时,非常适合我们日常的使用. 以下讨论的是和淘宝网 IP查询 地址库 调用 API 相关的淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使 ...

  2. abc类ip地址_通信网络的IP地址分配原理

    一.网络模型介绍 在计算机网络中有著名的OSI七层协议体系结构,概念清楚,理论完整,但是它既复杂又不实用.TCP/IP体系结构则不同,得到了广泛的应用.最终结合OSI和TCP/IP的优点,采用了一种只 ...

  3. 更换ip地址_手机怎么改ip地址

    为什么会出现手机ip的地址的更换,是因为使用手机的人员越来越多,很多的工作开始使用手机来进行完成.也是因为手机更方便携带,使用也更加的方便,移动用户越来越多.那么手机的ip地址能够修改吗?回答是肯定的 ...

  4. python修改ip地址_怎么更改电脑ip地址?基于 Python 爬虫的ip修改设计与实现

    怎么更改电脑ip地址?基于 Python 爬虫原理的篮球鞋选择程序的设计与实现ip修改 [摘 要]伴随着篮球鞋工艺的进步及产业升级,多类型多种类的篮球鞋出现在大众的视野当中.与此同时,消费者对篮球鞋的 ...

  5. 0分配不到地址_前端学习计算机网络——IP地址的划分及其分类

    点击上方"前端印象",选择"设为星标"第一时间关注技术干货! 本文是该系列文章的第二篇,将了解Internet中使用的网络层地址,又称IP地址.每个设备都至少需 ...

  6. 字符串的地址_面试题:我有一批IPv6地址,你帮我想个办法来存储?

    作者:dadiyang-绪扬来源:公众号Java面试那些事儿 之前写了一篇<面试题:请用代码实现ip地址与int之间互换?>,有读者评论问到 IPv6 的转换方法,于是抽时间也自己实现了一 ...

  7. 联想服务器imm默认地址_命令下配置ip地址

    一.添加 IP 地址及默认网关 (是添加,要重设或更新原来IP的请看第三点) netsh interface ip add address 用法 : add address [name=] [[add ...

  8. java解析ip地址_通过JAVA解析IP地址

    如何用Java获得一个域名的IP地址呢?提供这个功能的类叫做java.net.InetAddress.我们假设现在有这样一个域名,他用一个静态的 getByName来重新获得一个InetAddress ...

  9. win7 计算机名IPDNS修改,怎样改ip地址_怎样更换电脑ip地址-win7之家

    在电脑上,电脑是要拥有一个ip地址才能上网的,ip地址就是电脑的标识,一般都会分配一个固定的ip地址,设置好这个地址才可以上网,那么我们要是想改ip地址的话要怎样改呢,下面小编给大家分享更换电脑ip地 ...

最新文章

  1. AI一分钟 | 北京发放自动驾驶首批牌照,百度获准测试;亿航美国分公司申请破产,债务高达数百万美元
  2. 顺序表-给定的顺序表L中删除元素值在x到y(x<=y)之间的所有的元素
  3. python3 selenium 无头浏览器 无界面 chromedriver
  4. java软件网络工程师面试题_170道Java工程师面试题,你敢挑战吗?
  5. CNN+LSTM+CTC
  6. swift变量和函数
  7. github(5):GitHub的注册与使用(详细图解)
  8. PowerDesigner V16.5 安装教程以及汉化(数据库建模)
  9. 6-4-2:STL之list——list的模拟实现
  10. 【原】 图片预览 Image preview
  11. RAID一个硬盘FAIL。
  12. 实现一个左滑删除功能
  13. LayaAir UI 组件 # Image 位图、Label 标签
  14. Centos7虚拟机的镜像下载及创建
  15. 【PIC单片机】-- LCD的相关知识
  16. “大众摄影”“北外亚非学院”等网站被挂马
  17. 现在有什么地推项目_目前互联网都有哪些红利地推项目
  18. 红叶李之Linux文件系统
  19. 联想R7000 ubuntu 18.04 安装1650ti驱动
  20. 美国调查半导体装置专利侵权事件;“元宇宙业务”未达到Meta预期;kakao回应韩国数据中心火灾事件 | 每日大事件...

热门文章

  1. python读取数据画三维图_Python实现读取txt文件并画三维图
  2. 机顶盒的种类有哪些?
  3. SAP 使用ABNAN后资本化和价值补录
  4. 利用SpringBoot和Vue实现前后端分离(附源码)
  5. UCAS - AI学院 - 知识图谱专项课 - 第8讲 - 课程笔记
  6. Nginx(docker安装)快速入门
  7. OCP学习基本知识点总结
  8. OpenGL进阶之SSAO屏幕空间环境光遮蔽
  9. nacos 怎么配置 里的配置ip_2.nacos服务配置中心
  10. 【服务器管理】Ubuntu18.04下安装TensorRT(已经安装CUDA和cudnn的情况下)