不同格式的ip 统一转成ip列表
支持以下格式的ip地址:
192.168.1.0/24
192.168.1.1-23
192.168.1.123
代码如下:
package finder;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
public class Util {
@SuppressWarnings("restriction")
public static ArrayList<String> stringToIps(String str) throws UnknownHostException { //此方式主要是将各种格式的ip地址,转成ip列表,并以ArrayList<String>格式返回。
ArrayList<String> ips = new ArrayList<String>(); // 保存转换后的ip地址
String strIps[] = str.split("\n");
for (String string : strIps) {
if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(string)) { // 校验是否为ip地址
ips.add(string);
} else if (string.lastIndexOf("-") != -1) { // 判断是否为192.168.1.1-23这种格式
String iph[] = string.split("-");
if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(iph[0])) {
String x = iph[0];
String ipx[] = x.split("\\.");
Integer start = Integer.parseInt(ipx[3]);
Integer end = Integer.parseInt(iph[1]);
while (start <= end) {
String ip = ipx[0] + "." + ipx[1] + "." + ipx[2] + "." + start.toString();
ips.add(ip);
start++;
}
}
} else if (str.lastIndexOf("/") != -1) { // 判断是否为192.168.1.1/24这种格式
String iph[] = string.split("/");
if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(iph[0])) {
Integer mask = Integer.parseInt(iph[1]);
if (mask <= 32 && mask >= 1) {
ips.addAll(maskToIps(iph[0], mask)); // 将网络地址和掩码位数传给maskToIps函数
}
}
} else {
ips.add(string);
}
}
return ips;
}
public static ArrayList<String> maskToIps(String ip, Integer m) throws UnknownHostException { // 通过网络地址和掩码位数获取ip地址列表
ArrayList<String> i = new ArrayList<String>();
InetAddress inetAddress = InetAddress.getByName(ip);
int address = inetAddress.hashCode();
Integer n = 32 - m;
int startIp = (address & ((0xFFFFFFFF) << n)); // 最小ip地址
int endIp = (address | ((0xFFFFFFFF) >>> m)); //最大ip地址
while (startIp <= endIp) {
byte[] startaddr = getAddress(startIp);
InetAddress from = InetAddress.getByAddress(startaddr);
String fromIp = from.getHostAddress();
i.add(fromIp);
startIp++;
}
return i;
}
public static byte[] getAddress(int intIp) { // 将整数ip地址转换成字节数组
int address = intIp;
byte[] addr = new byte[4];
addr[0] = (byte) ((address >>> 24) & 0xFF);
addr[1] = (byte) ((address >>> 16) & 0xFF);
addr[2] = (byte) ((address >>> 8) & 0xFF);
addr[3] = (byte) (address & 0xFF);
return addr;
}
public static ArrayList<Integer> stringToPorts(String str) { // 这里是将各种格式的端口信息转成端口列表,比如 1-65535,80,8080,8000-9000
String ports[] = str.split(",");
ArrayList<Integer> portList = new ArrayList<Integer>();
for (String string : ports) {
if (string.lastIndexOf("-") != -1) {
String strPorts[] = string.split("-");
Integer startPort = Integer.parseInt(strPorts[0]);
Integer endPort = Integer.parseInt(strPorts[1]);
while (startPort <= endPort) {
if (startPort < 0 || startPort > 0xFFFF) {
portList.add(startPort);
startPort++;
}
}
} else {
Integer in = Integer.parseInt(string);
if (in > 0 && in < 0xFFFF) {
portList.add(in);
}
}
}
return portList;
}
}
不同格式的ip 统一转成ip列表的更多相关文章
- 无视编码都统一转成unicode 然后截断 例如 。“发发发发发发” 操作之后显示为 “发发发发...”
-- local function checkPlayName( str ) -- str = Utils.utf8_to_unicode(str)-- local retStr = "&q ...
- [转]为何TCP/IP协议栈设计成沙漏型的
http://m.blog.csdn.net/blog/dog250/18959371 前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的.这个问题问得好!我先不谈为何它如此设计,我一 ...
- IP地址转换成Long型数字的算法
在应用程序开发中,涉及到IP地址的存储,大部分开发人员都将其存为String(或文本类型).能否将固定格式为m.n.x.y的IP地址转换成 Long型的数字呢?答案是肯定的.在数据库层面,可以直接将结 ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...
- [转]字符型IP地址转换成数字IP的SQL函数
使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助. /**//*--调用示例 sele ...
- linux c/c++ IP字符串转换成可比较大小的数字
由www.169it.com搜集整理 IP字符串转换成可比较大小的数字,具体代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include "stdio. ...
- 用 localhost 访问正常,替换成 IP ,部分 CSS 或 JS 就失效了
这应该是浏览器的兼容性问题. 经测试,只要不是360浏览器的兼容模式,将 localhost 替换成 IP 无影响. 来自为知笔记(Wiz)
- PHP中将ip地址转成十进制数的两种实用方法
As we all know that long2ip works as ip1.ip2.ip3.ip4 (123.131.231.212) long ip => (ip1 * 256 * 25 ...
随机推荐
- 【MyBatis学习04】mapper代理方法开发dao
上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的 ...
- 可以打开QQ,但打不开网页的DNS服务器设置问题
方法二: IE->设置->连接->局域网设置
- 下载The Swift Programming Language.mobi版
下载 The Swift Programming Language.mobi 下载 http://download.csdn.net/detail/swifttrain/7444501
- css制作的各种图形
1.六角形的制作: 代码: #star-six{ height:0; width:0; border-bottom:100px solid red; border-left: 50px solid t ...
- android proguard 保留内部类
今天在使用Proguard keep一个 静态内部类的时候,混淆完之后一直找不到那个静态内部类,内心抓狂啊. 最后在stackoverflow上找到了答案: -keepattributes Excep ...
- C语言基础(18)-内存
一.内存布局 1.1 代码区 代码区code,程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段.代码区是可读不可写的. 代码区中的所有的内容在程序加载到内存的时候就确定了,运 ...
- 14. First Position of Target 【easy】
14. First Position of Target [easy] For a given sorted array (ascending order) and a targetnumber, f ...
- C++避免内存泄漏的一种技巧
C++ Primer 4th中在section 13.5中的U_Ptr就是一种实用的例子 通过计数的方式,并提供自己的抽象类型的Pointer,从而实现内存管理.在一定的范围内还是非常有效的,比如说在 ...
- struts2的validate在使用过程中的一个问题
在项目中有一个新增客户信息的的功能: 1.在进入加入页面:add.jsp页面之前,要调用一个add_init.do来获取省份信息列表以供在add.jsp进行选择. 2.add页面填写完毕以后.提交给 ...
- eclipse中使用jetty启动项目
eclipse里修改 Goals值 Tomcat -Dmaven.tomcat.port=8080 tomcat:run Jetty -Djetty.port=8081 jetty:run