java 代理ip工具类_Java基础之java处理ip的工具类

java处理ip的工具类,包括把long类型的Ip转为一般Ip类型、把xx.xx.xx.xx类型的转为long类型、根据掩码位获取掩码、根据 ip/掩码位 计算IP段的起始IP、根据 ip/掩码位 计算IP段的终止IP等方法,可以直接使用!

package com.hh.test;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;

/**

* IP工具类

*

* @author bl

* @email kutekute00@gmail.com

*

*/

public class IPUtils

{

/**

* 把long类型的Ip转为一般Ip类型:xx.xx.xx.xx

*

* @param ip

* @return

*/

public static String getIpFromLong(Long ip)

{

String s1 = String.valueOf((ip & 4278190080L) / 16777216L);

String s2 = String.valueOf((ip & 16711680L) / 65536L);

String s3 = String.valueOf((ip & 65280L) / 256L);

String s4 = String.valueOf(ip & 255L);

return s1 + "." + s2 + "." + s3 + "." + s4;

}

/**

* 把xx.xx.xx.xx类型的转为long类型的

*

* @param ip

* @return

*/

public static Long getIpFromString(String ip)

{

Long ipLong = 0L;

String ipTemp = ip;

ipLong = ipLong * 256

+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));

ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());

ipLong = ipLong * 256

+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));

ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());

ipLong = ipLong * 256

+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));

ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());

ipLong = ipLong * 256 + Long.parseLong(ipTemp);

return ipLong;

}

/**

* 根据掩码位获取掩码

*

* @param maskBit

*            掩码位数,如"28"、"30"

* @return

*/

public static String getMaskByMaskBit(String maskBit)

{

return StringUtils.isEmpty(maskBit) ? "error, maskBit is null !"

: maskBitMap().get(maskBit);

}

/**

* 根据 ip/掩码位 计算IP段的起始IP 如 IP串 218.240.38.69/30

*

* @param ip

*            给定的IP,如218.240.38.69

* @param maskBit

*            给定的掩码位,如30

* @return 起始IP的字符串表示

*/

public static String getBeginIpStr(String ip, String maskBit)

{

return getIpFromLong(getBeginIpLong(ip, maskBit));

}

/**

* 根据 ip/掩码位 计算IP段的起始IP 如 IP串 218.240.38.69/30

*

* @param ip

*            给定的IP,如218.240.38.69

* @param maskBit

*            给定的掩码位,如30

* @return 起始IP的长整型表示

*/

public static Long getBeginIpLong(String ip, String maskBit)

{

return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));

}

/**

* 根据 ip/掩码位 计算IP段的终止IP 如 IP串 218.240.38.69/30

*

* @param ip

*            给定的IP,如218.240.38.69

* @param maskBit

*            给定的掩码位,如30

* @return 终止IP的字符串表示

*/

public static String getEndIpStr(String ip, String maskBit)

{

return getIpFromLong(getEndIpLong(ip, maskBit));

}

/**

* 根据 ip/掩码位 计算IP段的终止IP 如 IP串 218.240.38.69/30

*

* @param ip

*            给定的IP,如218.240.38.69

* @param maskBit

*            给定的掩码位,如30

* @return 终止IP的长整型表示

*/

public static Long getEndIpLong(String ip, String maskBit)

{

return getBeginIpLong(ip, maskBit)

+ ~getIpFromString(getMaskByMaskBit(maskBit));

}

/**

* 根据子网掩码转换为掩码位 如 255.255.255.252转换为掩码位 为 30

*

* @param netmarks

* @return

*/

public static int getNetMask(String netmarks)

{

StringBuffer sbf;

String str;

int inetmask = 0, count = 0;

String[] ipList = netmarks.split("\\.");

for (int n = 0; n < ipList.length; n++)

{

sbf = toBin(Integer.parseInt(ipList[n]));

str = sbf.reverse().toString();

count = 0;

for (int i = 0; i < str.length(); i++)

{

i = str.indexOf('1', i);

if (i == -1)

{

break;

}

count++;

}

inetmask += count;

}

return inetmask;

}

/**

* 计算子网大小

*

* @param netmask

*            掩码位

* @return

*/

public static int getPoolMax(int maskBit)

{

if (maskBit <= 0 || maskBit >= 32)

{

return 0;

}

return (int) Math.pow(2, 32 - maskBit) - 2;

}

private static StringBuffer toBin(int x)

{

StringBuffer result = new StringBuffer();

result.append(x % 2);

x /= 2;

while (x > 0)

{

result.append(x % 2);

x /= 2;

}

return result;

}

/*

* 存储着所有的掩码位及对应的掩码 key:掩码位 value:掩码(x.x.x.x)

*/

private static Map maskBitMap()

{

Map maskBit = new HashMap();

maskBit.put("1", "128.0.0.0");

maskBit.put("2", "192.0.0.0");

maskBit.put("3", "224.0.0.0");

maskBit.put("4", "240.0.0.0");

maskBit.put("5", "248.0.0.0");

maskBit.put("6", "252.0.0.0");

maskBit.put("7", "254.0.0.0");

maskBit.put("8", "255.0.0.0");

maskBit.put("9", "255.128.0.0");

maskBit.put("10", "255.192.0.0");

maskBit.put("11", "255.224.0.0");

maskBit.put("12", "255.240.0.0");

maskBit.put("13", "255.248.0.0");

maskBit.put("14", "255.252.0.0");

maskBit.put("15", "255.254.0.0");

maskBit.put("16", "255.255.0.0");

maskBit.put("17", "255.255.128.0");

maskBit.put("18", "255.255.192.0");

maskBit.put("19", "255.255.224.0");

maskBit.put("20", "255.255.240.0");

maskBit.put("21", "255.255.248.0");

maskBit.put("22", "255.255.252.0");

maskBit.put("23", "255.255.254.0");

maskBit.put("24", "255.255.255.0");

maskBit.put("25", "255.255.255.128");

maskBit.put("26", "255.255.255.192");

maskBit.put("27", "255.255.255.224");

maskBit.put("28", "255.255.255.240");

maskBit.put("29", "255.255.255.248");

maskBit.put("30", "255.255.255.252");

maskBit.put("31", "255.255.255.254");

maskBit.put("32", "255.255.255.255");

return maskBit;

}

/**

* 根据掩码位获取掩码

*

* @param masks

* @return

*/

@Deprecated

public static String getMaskByMaskBit(int masks)

{

String ret = "";

if (masks == 1)

ret = "128.0.0.0";

else if (masks == 2)

ret = "192.0.0.0";

else if (masks == 3)

ret = "224.0.0.0";

else if (masks == 4)

ret = "240.0.0.0";

else if (masks == 5)

ret = "248.0.0.0";

else if (masks == 6)

ret = "252.0.0.0";

else if (masks == 7)

ret = "254.0.0.0";

else if (masks == 8)

ret = "255.0.0.0";

else if (masks == 9)

ret = "255.128.0.0";

else if (masks == 10)

ret = "255.192.0.0";

else if (masks == 11)

ret = "255.224.0.0";

else if (masks == 12)

ret = "255.240.0.0";

else if (masks == 13)

ret = "255.248.0.0";

else if (masks == 14)

ret = "255.252.0.0";

else if (masks == 15)

ret = "255.254.0.0";

else if (masks == 16)

ret = "255.255.0.0";

else if (masks == 17)

ret = "255.255.128.0";

else if (masks == 18)

ret = "255.255.192.0";

else if (masks == 19)

ret = "255.255.224.0";

else if (masks == 20)

ret = "255.255.240.0";

else if (masks == 21)

ret = "255.255.248.0";

else if (masks == 22)

ret = "255.255.252.0";

else if (masks == 23)

ret = "255.255.254.0";

else if (masks == 24)

ret = "255.255.255.0";

else if (masks == 25)

ret = "255.255.255.128";

else if (masks == 26)

ret = "255.255.255.192";

else if (masks == 27)

ret = "255.255.255.224";

else if (masks == 28)

ret = "255.255.255.240";

else if (masks == 29)

ret = "255.255.255.248";

else if (masks == 30)

ret = "255.255.255.252";

else if (masks == 31)

ret = "255.255.255.254";

else if (masks == 32)

ret = "255.255.255.255";

return ret;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java smack 例子_java+smack+openfire即时通讯Im(四)

### javasmackopenfire即时通讯Im(四) ###* 创建群聊* 加入群聊# 创建群聊 #前面的单聊完成以后&#xff0c;就开始群聊的功能把&#xff0c;首先是创建群聊&#xff1a;后端进行群组创建&#xff1a;/***** 方法名称&#xff1a;createMutiUserChat* 概要说明&#xff1a;创建…

java 常量区存放 new_java---堆、栈、常量池的存储数据

说到Java中堆、栈和常量池&#xff0c;首先还是看看他们各自存放的数据类型吧&#xff01;栈&#xff1a;Java的JVM的内存可分为3个区&#xff1a;堆(heap)、栈(stack)和方法区(method)也叫静态存储区。堆区:(存放所有new出来的对象&#xff1b;)1.存储的全部是对象&#xff0c…

log加时间 securecrt_SecureCRT配置自动记录日志

很多人用SecureCRT时&#xff0c;希望自动记录日志&#xff0c;一个是方便以后查阅&#xff0c;一个是对自己的操作有个记录。可以看看自己做了什么操作&#xff0c;有时甚至可以看看之前是不是犯了什么错&#xff0c;是个很不错的功能。设置很简单&#xff0c;还可以根据连接的…

java txt 按行读取_java读取按行txt文件

import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;public class T {public static void main(String[] args) throws Exception{long startTimeSystem.currentTimeMillis(); //获取开始时间FileInputStream filestreamnew File…

java泛型改进_java泛型高级篇 - 真正理解协变与逆变 | 鱼儿的博客

无论你是否听过java泛型的协变与逆变&#xff0c;我们直接进入例子&#xff0c;一起来看一下java泛型比较高级的用法。例子1&#xff1a;copy函数第1个例子我们实现copy函数&#xff0c;它将List中的元素复制到List中。JavaList src Arrays.asList(1,2,3,4,5);List dst new A…

java中br.readline_java中br.readLine与 br.read的用法有什么区别??

报错?请发送错误信息为了帮助理解我写了一个测试类,请参照import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class T0517 {public static void main(String[] args) {FileReader input;try …

java实训遇到问题解决_「instantiationexception」关于java出现 java.lang.InstantiationException异常的分析与解决方案 - seo实验室...

instantiationexceptionjava.lang.instantiationexception 是指不能实例化某个对象&#xff0c;一般在我们使用java反射机制去创建某个对象的时候实例化到了一个抽象类或者接口(java中抽象类和接口是不能被实例化)&#xff0c;而今天我遇到的则是我在使用反射机制实例化某个持久…

java对外发布接口文档_java之接口文档规范

一、xxxxxx获取指定任务爬取的所有url的接口接口名称&#xff1a;xxxxxx获取指定任务爬取的所有url的接口访问链接&#xff1a;http://IP:PORT/crwalTask/findUrlExceptionById?ctIdctIdVal&timetimeVal&limitlimitVal传入参数类型&#xff1a;String,int参数内容:返回…

java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解

脚本的朋友们都会碰到多个Action之间传递参数的问题&#xff0c;想当年我也是研究了好久才成功的&#xff0c;网上虽然有很多文章都在讲这个问题&#xff0c;但是大多都是雷同的抄来抄去不能解决实际问题&#xff0c;也有可能是我太笨了吧。下面我们来详细讲一下QTP多个Action之…

mysql 哈希缓存_MySQL数据库性能优化思路总结

本文主要是自己记录在MySQL开发学习过程中遇到的数据库新能优化方向利用缓存缓存这个方面&#xff0c;可以说是一个技术&#xff0c;也可以说是一个思路和方向从技术手段上讲使用一些缓存插件&#xff0c;只需要确定创建、更新缓存的时机&#xff0c;以及清理缓存的时机就可以了…

java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)

刚刚开始学习java&#xff0c;对java不是很熟悉&#xff0c;但是自己的兴趣挺喜欢java。现在自己在自学java做一个小游戏&#xff0c;坦克大战。自己现在完成了画出自己的坦克和坦克的移动方向。希望各位大神指导一下我这个刚刚学java的新手小白。我会每完成一个阶段&#xff0…

java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...

TimerTimer类的主要作用就是设置计划任务&#xff0c;但封装任务的类却是TimerTask类执行计划任务的代码要放人TimerTask的子类中&#xff0c;因为TimerTask是一个抽象类。而且要重写其run方法 因为这是一个抽象方法.常见问题任务执行完了, 但进程并没有销毁,通过源码查看构造方…

scala java抽象理解_Scala之类、特质和抽象类

1. 类1.1. 类的定义类的定义&#xff1a;//定义Point类&#xff0c;构造器带有两个参数class Point(var x: Int, var y: Int) {//无返回值的类方法def move(dx: Int, dy: Int): Unit {x x dxy y dy}//没有参数但是返回值为String类型的重写方法override def toString: Str…

centos eclipse java_CentOS7 安装 Eclipse

咳咳&#xff0c; 虽然大神的 Linux 都是命令行的&#xff0c; 但是谁让 LZ 是 LJ&#xff0c; 桌面开俩终端不觉得更好么。。。CentOS7 安装 Eclipse&#xff0c; 比在 Window 系统下安装 Eclipse 要复杂得多。。参考 &#xff1a; https://segmentfault.com/a/11900000026517…

iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式

1. 客户端直接verify苹果的receipt 如果verify成功 自行发放商品2. 客户端将receipt传给server,由server进行验证并发放商品按照安全性原则, 客户端的所有信息都是不可信的,而且支付是业务中的核心模块,所以应该选择第二种。下面简要介绍下,第二种方式的简单流程。1. 客户端支付…

java opencv orb_opencv python ORB算法

理论ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB&#xff1a;An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分&#…

php中define的参数_php中define的用法有哪些

php中define的用法&#xff1a;1、【define()】函数定义一个常量&#xff1b;2、定义常量名称及值&#xff0c;代码为【define(name,value,case_insensitive)】&#xff1b;3、定义一个大小写敏感的常量。php中define的用法&#xff1a;1、define()函数理解1define()函数定义一…

php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例

php手册中关于此函数的介绍。php is_file 判断是否为文件的代码is_file() 函数检查指定的文件名是否是正常的文件。is_file — Tells whether the filename is a regular file用法bool is_file ( string $filename ) $file 为必选参数如果文件存在且为正常的文件则返回 TRUE。例…

php 登陆微博,PHP调用微博接口实现微博登录的方法示例

在平时项目开发过程中&#xff0c;除了注册本网站账号进行登录之外&#xff0c;还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站&#xff0c;分享内容&#xff0c;同步信息。1、首…

php计算结果排序,php-按从数组计算出的值对数组进行排序

我从阵列中的数据库中获得了用户的经纬度我有我的经纬现在,我要计算距离并使用该距离对数据库中的用户进行排序$mylat $_SESSION[lat];$mylng $_SESSION[lng];$statement $pdo->prepare("SELECT * FROM users");$statement->execute();$users $statement-&…