不同格式的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 ...
随机推荐
- a标签上的点击事件
当我们在处理a标签上的点击事件时发现即使href=""里面为空,点击事件的效果也不明显,这种情况该如何处理呢?常见的处理方法有以下几种: 1.a href="javasc ...
- 设置U盘启动
利用快捷键来设置U盘启动,利用快捷键启动相对来说比较简单快捷,推荐大家使用(重要提醒:选择热键前,请先插入U盘) 组装机主板 品牌笔记本 品牌台式机 主板品牌 启动按键 笔记本品牌 启动按键 台式机品 ...
- silverlight RadGridView总结二(转载)
系列二 实现RadGridView行中添加不同控件,并在控件中绑定不同的数据源 先上一段前台代码 <telerik:RadGridView Grid.Row="2" ...
- CentOS 7中mariadb编译安装教程systemctl启动
mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 跟上篇一样只是启动方式改为systemd 安装一些库 yum install gcc gcc-c++ wge ...
- 获取文本中你须要的字段的 几个命令 grep awk cut tr sed
1,grep 2,awk 3,cut 4,tr 5,sed 实例1 获取本地IP地址 /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v ine ...
- DM36x IPNC OSD显示中文 --- 基础知识篇
为了简单起见,只显示GB2312(简体中文)字符一.GB2312汉字编码1.区位码在国标GB2312—80中规定,所有的国标汉字及符号分配在一个94行.94列的方阵中,方阵的每一行称为一个“区”,编号 ...
- gsub函数
gsub(r, s [, t]) For each substring matching the regular expression r in the string t, substitute ...
- linux undefined reference to symbol 'floor@@GLIBC_2.2.5'
这个是因为GNU make版本不一致导致,最后加上-lm g++或者gcc -o main main.c -lm 如果还存在问题 需要加上-Wl,--no-as-needed g++或者gcc -W ...
- 基于springCloud的分布式架构体系
Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...
- 006android初级篇之jni数据类型映射
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++) 使用JNI的副作用 一旦使用JNI,JAVA程序就丧失了JAV ...