Java的IP地址分析工具

原创 2016年08月30日 14:58:06
package cn.GloomyH.NetTools;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * @author GloomyH
 */
public class IPv4Analyse {
public static void main(String []args){
IPv4Analyse analyse = new IPv4Analyse();
String ip = "23.1.11.2";
int a = 5;
System.out.println(analyse.IncludeIp("127.0.0.1-127.0.255.255", "127.0.23.1"));
}
/**
     * 判断IP地址是否在该网络
     * @return
     */
public boolean IPIsInNetwork(String subnetMask,String IP){
if( null != subnetMask && subnetMask.contains("/")){
return false;
}
String subNet = subnetMask.split("/")[0];
String subMask = subnetMask.split("/")[1];
Long tm_IP = (new Long(subNet))&(0xFFFFFFFF >>>(new Long(subMask)));
if(_IPStrToLong(IP)<_IPStrToLong(subNet) && _IPStrToLong(IP)> tm_IP){
return false;
}
return true;
}

/**
* IP从String类型转换为Long
* @param IP
* @return
*/
private long _IPStrToLong(String IP){
String IPPart[] = IP.split(".");
long result =0l;
int sub = 24;
for(String ip : IPPart){
result+=(new Long(ip)<<sub);
sub-=8;
}
return result;
}

/**
* 判断IP地址是否合法
* @param IPStr 127.0.0.1/24 | 127.0.0.1
* @return
*/
public boolean isIP(String IPStr){
if(null==IPStr || IPStr.length() < 7 || IPStr.length() > 18 )
     {
       return false;
     }
if(IPStr.indexOf("/")>0){
int mask = Integer.parseInt(IPStr.split("/")[1]);
if(mask <0 || mask >32){return false;}
IPStr = IPStr.split("/")[0];
}


String regex = "^(25[0-5]|[2][0-4]\\d|[0-1]?\\d?\\d)(\\.([25][0-5]|[2][0-4]\\d|[0-1]?\\d?\\d)){3}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(IPStr);
if(!matcher.find()){
return false;
}
return true;
}

/**
* 子网掩码转换String->Int
* @param mask
* @return
*/
public int maskStrToInt(String maskStr){
int mask = 0;
String tm[] = maskStr.split("\\.");
for(String t : tm){
if("255".equals(t)){
mask += 8;
}else{
String str =IntToBin(Integer.parseInt(t));
mask += str.indexOf("0");
return mask;
}
}
return mask;
}

/**
* 十进制转换为二进制
* @param num
* @return
*/
public String IntToBin(int num){
if(0==num){
return "00000000";
}
StringBuffer sb = new StringBuffer();
while(num>0){
sb.append(num%2);
num/=2;
}
return sb.reverse().toString();
}

/**
* 判断IP是否在子网内
* @param subIP 127.0.0.0/24
* @param IP 127.0.0.1
* @return
*/
public boolean isNetworkIP(String subIP,String IP){
Integer mask = 32-Integer.parseInt(subIP.split("/")[1]);
if((IPStrToLong(IP)>>mask)<<mask == IPStrToLong(subIP.split("/")[0])){
return true;
}
return false;


/**
* 判断ip是否在一个IP范围内容
* @param ip_pool 127.0.0.1-127.0.0.255
* @param ip 127.0.0.1
* @return
*/
public boolean IncludeIp(String ip_pool, String ip) {
if(null != ip_pool || null !=ip){
if(IPStrToLong(ip)>IPStrToLong(ip_pool.split("-")[0]) && IPStrToLong(ip)<IPStrToLong(ip_pool.split("-")[1])){
return true;
}
}
return false;
}

/**
* IP地址从String->Long
* @param IP 127.0.0.1
* @return
*/
public Long IPStrToLong(String IP){
String IPPart[] = IP.split("\\.");
long result = 0l;
int t = 24;
for(String ip :IPPart){
result+=(Long.parseLong(ip)<<t);
t-=8;
}
return result;
}

/**
* IP地址从Long->String
* @param IP
* @return
*/
public String IPLongToStr(Long IP){
StringBuffer sb =new StringBuffer();
sb.append((IP&0xFF000000)>>24);
sb.append(".");
sb.append((IP&0x00FF0000)>>16);
sb.append(".");
sb.append((IP&0x0000FF00)>>8);
sb.append(".");
sb.append(IP&0x000000FF);
return sb.toString();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IPUtil工具类,java 获取IP所属地

package com.util.net; import java.io.ByteArrayOutputStream; import java.io.IOException; impor...

JAVA:实现解析纯真IP数据库

具体解析的纯真版IP地址库请详见http://lumaqq.linuxsir.org/article/qqwry_format_detail.html,这里就不多叙述了。  看下JAVA代码中怎么解...

IP地址库解析——读取IP地址获得实际地理位置信息的java源码实现

IP地址库解析的java实现——读取IP地址获得实际地理位置信息 说明:IP地址库来自QQwry.dat数据库文件,通过解析地址库当中的ip,获取ip地址对应的国家/省/市/运营商ISP...

[Java] 通过域名获取IP地址的方法与作用

在学Java过程中,接触到了java.net包,发现其中有一个InetAddress类,可以使用它的静态方法getByName获取IP地址,刚开始还没怎么注意到它的作用。在之后的学习中接触到了DNS域...

Java获取来源网页的地址和ip

System.out.println("head.referer=" + request.getHeader("referer")); System.out.println("RemoteHost=...
  • hybaym
  • hybaym
  • 2013-05-20 15:18
  • 1210

JAVA解析纯真IP地址库

前几天看了下Ruby的IPParse,觉得很过瘾,上网查了下貌似很多IP数据库都要收费的,就下了个纯真QQIP地址库,发现还可以在线升级的,很适合咱做点小玩意。具体解析的纯真版IP地址库请详见http...

java获取IP地址工具类

ip格式判断、地址段分析、掩码计算工具类

package com.cjh.ip.utils; import java.util.HashMap; import java.util.Map; import java.util.regex.Pa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)