推断给定的IP地址是否是内网IP

/**
 * 推断给定的IP地址是否是内网IP
 *
 * @author GaoHuanJie
 */
public class Test{

	public boolean isInnerIP(String ipAddress){/*推断是否是内网IP*/
	    boolean isInnerIp = false;//默认给定IP不是内网IP
	    long ipNum = getIpNum(ipAddress);
	    /**
	     * 私有IP: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
	     *       D类   127.0.0.0   -127.255.255.255(环回地址)
	     **/
	    long aBegin = getIpNum("10.0.0.0");
	    long aEnd = getIpNum("10.255.255.255");
	    long bBegin = getIpNum("172.16.0.0");
	    long bEnd = getIpNum("172.31.255.255");
	    long cBegin = getIpNum("192.168.0.0");
	    long cEnd = getIpNum("192.168.255.255");
	    long dBegin = getIpNum("127.0.0.0");
	    long dEnd = getIpNum("127.255.255.255");
	    isInnerIp = isInner(ipNum,aBegin,aEnd) || isInner(ipNum,bBegin,bEnd) || isInner(ipNum,cBegin,cEnd) || isInner(ipNum,dBegin,dEnd);
	    return isInnerIp;
	}

	private long getIpNum(String ipAddress) {/*获取IP数*/
		String [] ip = ipAddress.split("\\.");
		long a = Integer.parseInt(ip[0]);
		long b = Integer.parseInt(ip[1]);
		long c = Integer.parseInt(ip[2]);
		long d = Integer.parseInt(ip[3]);
		long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
		return ipNum;
	}   

	private boolean isInner(long userIp,long begin,long end){
		return (userIp>=begin) && (userIp<=end);
	} 

	public static void main(String[] args) {
		if (new Test().isInnerIP("22.8.129.60")) {//172.16.0.119
			System.out.println("该IP地址为内网IP!

");
		} else {
			System.out.println("该IP地址为外网IP!");
		}
	}
}
时间: 2024-10-07 06:09:47

推断给定的IP地址是否是内网IP的相关文章

IP地址分类及私网IP

5类IP地址: IP地址共有32位字节,其中A~C类IP地址由类标识号.网络地址和主机地址组成,A类标识最高位为0,网络地址为1字节,主机地址为3字节, B类标识最高位为10,网络地址为2字节,主机地址为2字节,C类标识最高位为110,网络地址为3字节,主机地址为1字节,B类标识最高位为1110,不区分网络地址和主机地址,用于组播,E类标识最高位为1111,实验用地址. IP地址中全0代表的是网络,全1代表的是广播. IP地址分类 固定最高位 第一字节范围 网络位 网络数 主机位 主机数 A 0

一个外网用户端口映射进入内网之后访问不是内网ip而是ipsec分布内网ip的问题

西北院那个我们准备用ipsec方式让他们网站服务器以我们这边的ipv6地址对外发布出去的. 首先我们ispec隧道是建立起来了的. 在我们出口负载均衡设备也能通他们的网站服务器. 但是映射会有问题. 譬如你先用ipv4做了端口映射,譬如把106.38.122.202:80映射到西北院网站10.10.150.22:80 我发现ipv4的不好使,更别说ipv6了. 之所以ipv4不好使是因为如下: 譬如公网任一用户1.1.1.1通过我们出口进入时候,虽然做了端口映射把数据包 源1.1.1.1 到目的

内网IP与外网IP

内网IP与外网IP的区别 解释一 外网IP地址全世界仅分配给一个网络设备(比如你在家拨号,分配给你一个IP地址吧,那个地址是唯一的,你用你机器做个网站,别人访问你的IP地址就可以连接到你的机器) 你家有2台电脑,通过一个路由器接好,为了区分每台电脑每台电脑分配一个内部的IP地址,比如192.168.0.2 这个地址是内部的,也叫私网地址,这两台电脑都是通过一个外网IP地址上网的,但他们每个人还有个内网的地址,内网的地址外网不能直接访问. 解释二 路由以里的叫内网. 路由以外的叫外网. 内网IP呢

根据Request获取客户端IP 内网IP及外网IP

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户

C/C++ 获得公网ip地址和内网ip

获得公网ip: bool getPublicIp(string& ip) { int sock; char **pptr = NULL; struct sockaddr_in destAddr; struct hostent *ptr = NULL; char destIP[128]; sock = socket(AF_INET,SOCK_STREAM,0); if( -1 == sock ){ perror("creat socket failed"); return fal

外网IP地址 内网 IP

外网IP地址 大部分网络使用B类或C类地址,每一个类的第一个八位组的范围如下: 1.0-—127.A类 网络号码范围是 0.0.0.0---127.0.0.0 ,用于128个网络.但网络不能全由0组成且127.0.0.0保留用于回路.剩下的126个网络,1到126,共有16777214个可能的主机地址(16777216减2) A类 网络 —主机—主机—主机 0-127 127 0 0 0 2.128—191.B类,网络号码范围是128.0.0.0--191.254.0.0 用于16256个网络.

关于网络中的内网IP地址和公网IP地址

公网IP和内网IP    一.先来看一下IP地址划分: A类地址:0.0.0.0------127.255.255.255 其中127.255.255.255是广播地址,不能分配 B类地址:128.0.0.0------191.255.255.255 C类地址:192.0.0.0------223.255.255.255 D类地址:224.0.0.0-----239.255.255.255 E类地址:240.0.0.0------255.255.255         你要是想看你自己机子的IP

nodejs中获取内网ip地址

今天同事有个需求,希望用nodejs里的web服务器的对应的站点可以支持内网访问,后来发现修改express里的hostname属性为自己的内网ip就可以了.但是问题是,我们的机器都是自动获取内网ip,那么这次写死的hostname下次基本上就不能用了,于是我们想到了在nodejs里动态获取内网ip,并且把值赋给express的open方法就可以了,于是我按照这个思路开工了. 我们先了解怎么获取内网ip,网上的通用方法我试了下,在我机器里是无效的,调试了下才发现了它这个不是完全通用的,于是我针对

内网IP和外网IP

1.什么是内网内网就是局域网,比如一个公司的局域网,局域网内每台计算机的IP地址是互异的,但不同局域网内的IP是可以相同的.2.什么是外网外网就是互联网,内网的所有计算机都是连接到一个外网IP,通过外网IP对外交换数据.内网的IP地址不同,但共用一个外网IP.两个IP同时存在,一个对内,一个对外.3.NATNAT(Network Address Translation,网络地址转换)是路由器的主要功能,负责内网IP和外网IP之间的转换.属于一种接入广域网(WAN)的技术.NAT解决了IP地址不足