不同格式的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 ...
随机推荐
- TensorFlow学习笔记3——Placeholders and feed_dict
1. Placeholders placeholders,顾名思义,就是占位的意思,举个例子:我们定义了一个关于x,y的函数 f(x,y)=2x+y,但是我们并不知道x,y的值,那么x,y就是等待确定 ...
- Xilinx 7系列例化MIG IP core DDR3读写
昨晚找了一下,发现DDR3读写在工程上多是通过例化MIG,调用生成IPcore的HDL Functional Model.我说嘛,自己哪能写出那么繁琐的,不过DDR读写数据可以用到状态机,后期再添砖加 ...
- 李洪强经典面试题48-C语言
可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计 ...
- Java中有几种类型的流?以及常见的实现类都有哪些?
Java中有几种类型的流?以及常见的实现类都有哪些? 首先应该从两个角度来看: 从输入输出方面来讲: Java中有输入流和输出流 从流的编码方式上来讲: Java中有字节流和字符流 ...
- MyEclipse 2013安装后要做的几件事
一.Myeclipse 2013修改字体 MyEclipse 2013是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->C ...
- android学习十四(android的接收短信)
收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...
- tomcat遇到版本问题
1.Dynamic web module 2.J2EE Web modules 3.Tomcat version 4.<web-app xmlns:xsi="http://www.w ...
- 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。
/** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...
- jq 获取select text
var Reply_type_name=$("#Reply_type").find("option:selected").text();
- 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章
目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...