ip校验方法:判断ip是否位于指定的范围内
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IPvalidate
{
/**
* @param args
*/
public static void main(String[] args)
{
//存放ip对象的list,ip对象包含:开始段、结束段
List<IpDo> ipList = new ArrayList<IpDo>();
//第一行ip段
IpDo ipDo = new IpDo();
ipDo.setBeginIp("10.166.37.0");
ipDo.setEndIp("10.166.37.180");
ipList.add(ipDo);
//第二行ip段
IpDo ipDo2 = new IpDo();
ipDo2.setBeginIp("10.166.47.100");
ipDo2.setEndIp("10.166.47.200");
ipList.add(ipDo2);
//第三行ip段
IpDo ipDo3 = new IpDo();
ipDo3.setBeginIp("10.166.37.150");
ipDo3.setEndIp("10.166.37.255");
ipList.add(ipDo3);
// 校验:ip格式
if (!validatorIpFormat(ipList))
{
return;
}
// 校验:开始ip小于等于结束ip
if (!validatorStartIpLessThanEndIp(ipList))
{
return;
}
// 校验:判断IP段是否存在交集或包含关系 下标0 true or false 下标1 存在IP交集的对象
Object[] valResult = isHaveIntersection(ipList);
boolean flag = "true".equals(valResult[0].toString());
if (flag)
{
String intersectionStr = (String)valResult[1];
System.out.println("以下ip段存在交集,行号为:\n" + intersectionStr);
return;
}
}
/**
* 校验:ip格式
*/
public static boolean validatorIpFormat(List<IpDo> ipList)
{
int size = ipList.size();
for (int i = 0; i < size; i++)
{
String pattern = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
Matcher startMat = Pattern.compile(pattern).matcher(ipList.get(i)
.getBeginIp());
Matcher endMat = Pattern.compile(pattern).matcher(ipList.get(i)
.getEndIp());
if (!startMat.matches() || !endMat.matches())
{
int n = i + 1;
System.out.println("第" + n + "行 ip格式不合法");
return false;
}
}
return true;
}
/**
* 校验:开始ip小于等于结束ip
*/
public static boolean validatorStartIpLessThanEndIp(List<IpDo> ipList)
{
boolean tag = true;
int i = 0;
try
{
int size = ipList.size();
// 校验ip,后者>=前者
for (i = 0; i < size; i++)
{
if (isLarger(ipList.get(i).getEndIp(), ipList.get(i)
.getBeginIp()))
{
int n = i + 1;
System.out.println("第" + n + "行 ip结束段应该大于开始段");
tag = false;
break;
}
}
}
catch (NumberFormatException e)
{
tag = false;
int n = i + 1;
System.out.println("第" + n + "行 ip转化异常");
}
return tag;
}
/**
* 判断 ip2 是否大于 ip1,若大于返回true,否则返回false
* @param ip1 ip1
* @param ip2 ip2
* @return boolean boolean
*/
public static boolean isLarger(String ip1, String ip2)
throws NumberFormatException
{
boolean flag = false;
String[] startips = ip1.split("\\.");
String[] endIps = ip2.split("\\.");
for (int i = 0; i < startips.length; i++)
{
if (Integer.parseInt(endIps[i]) > Integer.parseInt(startips[i]))
{
flag = true;
break;
}
else
{
if (Integer.parseInt(endIps[i]) == Integer.parseInt(startips[i]))
{
continue;
}
else
{
break;
}
}
}
return flag;
}
/**
* 判断提交的区域配置中,是否有存在IP段有交集的区域
* @return 下标0 true or false 下标1 存在IP交集的对象
*/
private static Object[] isHaveIntersection(List<IpDo> ipList)
{
//下标0 true or false 下标1 存在IP交集的Map对象
Object[] obj = new Object[2];
//默认不存在交集
obj[0] = false;
//存在交集的区域名字符串,用于界面提醒
StringBuffer buf = new StringBuffer();
int size = ipList.size();
for (int i = 0; i < size - 1; i++)
{
IpDo temp = ipList.get(i);
for (int j = i + 1; j < size; j++)
{
IpDo tempj = ipList.get(j);
if (isBetweenIpSeg(temp.getBeginIp(), tempj, ".")
|| isBetweenIpSeg(tempj.getBeginIp(), temp, "."))
{
obj[0] = true;
buf.append(i + 1);
buf.append('-');
buf.append(j + 1);
buf.append(',');
}
}
}
if (buf.length() > 0)
{
buf = buf.deleteCharAt(buf.length() - 1);
}
obj[1] = buf.toString();
return obj;
}
/**
* 判断IP是否在IP段内
* @param strIp 需判断的IP
* @param regionConfigDo IP段
* @param ipType ipv4:'.'分割 ipv6:':'分割
* @return 在段内'true' 不在段内'false'
*/
private static boolean isBetweenIpSeg(String strIp, IpDo ipDo, String ipType)
{
if (null == ipType)
{
return true;
}
long ipNumber = parseIpToNumber(strIp);
long startIpNumber = parseIpToNumber(ipDo.getBeginIp());
long endIpNumber = parseIpToNumber(ipDo.getEndIp());
if (startIpNumber > ipNumber || ipNumber > endIpNumber)
{
//无交集
return false;
}
return true;
}
/**
* 将IPV4的IP转换成Long
* @param ipStr Ip
* @return IP Number
*/
private static long parseIpToNumber(String ipStr)
{
/** IP进制转换值(256)*/
final long IPHEXNUM = 256L;
long ipNumber = 0L;
String[] ips = ipStr.split("\\.");
ipNumber = ipNumber + Integer.parseInt(ips[0]) * IPHEXNUM * IPHEXNUM
* IPHEXNUM;
ipNumber = ipNumber + Integer.parseInt(ips[1]) * IPHEXNUM * IPHEXNUM;
ipNumber = ipNumber + Integer.parseInt(ips[2]) * IPHEXNUM;
ipNumber = ipNumber + Integer.parseInt(ips[3]);
return ipNumber;
}
}
ip校验方法:判断ip是否位于指定的范围内的更多相关文章
- C# 判断ip地址是否正确
最后要用一方法判断ip地址是否正确,直接用.Net现成的类,方法如下: string ipStr="192.168.222.333"; IPAddress ip; if(IPAdd ...
- 最全,可直接用的一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等。
一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等. // 判断邮箱 isValid = [text isValidEmail]; // 判断手机 ...
- SSRF绕过IP限制方法总结
SSRF绕过IP限制方法总结 - Summary of SSRF methods for bypassing IP restrictions -https://www.cnblogs.com/iAmS ...
- 为Linux服务器设置静态IP的方法
这里以CentOS 7系列为例设置静态IP,原来RedHat系列的Linux发行版可以通过setup工具方便的设置静态IP,但是在版本7之后setup工具的功能就逐渐减弱了,所以这时候采用修改配置文件 ...
- js获取IP地址方法总结_转
js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...
- (转载)php如何判断IP为有效IP地址
(转载)http://www.kuitao8.com/20130918/1376.shtml 多数人看到这篇日志,第一印象肯定是以为是要讲如何通过正则表达式来判断. 非也,在php5.2.0之后,有专 ...
- PHP判断ip地址是否合法
1.获取真正ip地址 function get_ip(){ //判断服务器是否允许$_SERVER if(isset($_SERVER)){ if(isset($_SERVER[HTTP_X_FORW ...
- 服务器安全策略之《通过IP安全策略阻止某个IP访问的设置方法》
现在我们在布署好了一个网站,发布到外网后就意味着将会接受来自四面八方的黑客攻击,这个情况很常见,我们的网站基本上每天都要接受成千上万次的攻击,有SQL注入的.有代码注入的.有CC攻击等等...而我作为 ...
- C# 正则表达式判断IP,URL等及其解释
C# 正则表达式判断IP,URL等及其解释 判断IP格式方法: public static bool ValidateIPAddress(string ipAddress) { Regex valid ...
随机推荐
- IntelliJIDEA 14创建Maven管理的Java Web项目
1.新建项目,选择Maven,点击Next继续. 接着输入项目名 接着直接点击Finish即可 下图就是创建完毕后的Maven项目,双击pom.xml查看POM文件内容,可以自行添加Maven的依赖. ...
- 关系型数据库与NOSQL(转)
出处:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html 关系型数据库把所有的数据都通过行和列的二元表现形式表示出来. 关系 ...
- sql like 查询
查询 ids 含有 4 的 精确到4 54 不查询 select * from t_g_sku where ','||ids||',' like '%,4,%'; 序号 id mid quant ...
- mybatis学习之路
MyBatis 是支持普通SQL查询.存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装. MyBatis可以使用简单的XML或注解 ...
- 数据库知识整理<八>
联接: 8.1理解简单的单联接: 基本上联接的结果是每个集合的笛卡尔积.例如:两个集合{a,b,c}和{a,b}的笛卡尔积是如下的成对集合:{(a,a),(a,b),(b,a),(b,b),(c,a) ...
- AS3从入门到放弃
工作久了,在技术上肯定有自己的一些见解.一直以来都懒得写下来,总觉得尤其写博客的时间,还不如自己学一点新东西.但不能总找这样的接口啊,于是乎开始了这篇博客. 工作了三年,有一年半的时间是在做AS3,在 ...
- iOS 重大新漏洞:可绕开苹果审核机制
iOS 是目前最为安全可靠的移动平台,但既然是软件就不会是无坚不摧的.乔治亚技术信息安全中心 (Georgia Tech Information Security Center)的研究员不久前声称,他 ...
- C#下搭建文件格式转换服务器
文件格式转换,相信很多涉及到office文档在线观看的都会需要,因为浏览器还不能完全支持直接打开office文档,所以很多情况下我们都需要将这些文档转换成flash能够播放的格式,但是另一个问题又来了 ...
- MySql执行多条语句
http://www.cppblog.com/fwxjj/archive/2010/08/05/122258.html说是在连接上设置: //链接时设定 mysql_real_connect( ... ...
- 实验五 含有控制信号的计数器VHDL设计
一.实验目的 学习计数器的设计.仿真和硬件测试,进一步熟悉VHDL设计技术. 二.实验仪器与器材 计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套. 三.实验 1. 基本命题 在 ...