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])(
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是否位於指定的範圍內
import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern; public class IPvalidate{ /** *
C#判斷給定IP地址是否在指定範圍內的方法
length plugins width content 例如 c# evel 工廠方法模式 模式 本文實例講述了C#判斷給定IP地址是否在指定範圍內的方法。分享給大家供大家參考。具體分析如下: 比如給定一個ip段:127.0.0.1 ~ 127.0.0.255,我們想判
PHP獲取IP地址的方法,防止偽造IP地址註入攻擊
false online ESS -a null del known sdn 信息 原文:PHP獲取IP地址的方法,防止偽造IP地址註入攻擊PHP獲取IP地址的方法 /** * 獲取客戶端IP地址 * <br />來源:ThinkPHP * &
2018年最新電話號碼正則表示式校驗方法
正則表示式 ^1(3[0-9]|4[57]|5[^4]|6[6]|7[0-8]|8[0-9]|9[8-9])\\d{8}$ iOS使用方法 + (BOOL)checkPhoneNumber:(NSString *)phoneNumber{ /* ** 電訊號
element UI 中 el-form 表單包含多個 el-input 時的校驗方法
這一點element-ui真是有點死板,我是這樣解決的,有兩個情況,prop可以只繫結第一個input的,第二個input寫上ref屬性,驗證的rules中寫一個方法,這個方法驗證第一個input框的同時,通過 this.$refs.xxx.value的形式獲取第二個input框值,只要這兩
《TCP/IP協議族》:TCP/IP協議頭部結構體
乙太網頭部14 bytes Destination Source Len Data unit + pad FCS (6 bytes)
《TCP/IP協議族》:TCP/IP常用埠大全
常用網路埠簡介: TCP/UDP埠可分為3大類, 按埠號分: (1)公認埠(Well Known Ports):從0到1023,它們緊密繫結(bind)於一些服務。通常這些埠的通訊明確表明了某種服務的協議。不可隨意更改. 例如:80埠實際上總是
代理ip最新識別方法及代理ip有效性檢測方法
網路營銷時代,網路成為企業營銷的重要工具。線上有非常多的營銷渠道可以利用。當然方法也就越來越多:自媒體、抖音、電商、微商等等,尤其當走進大資料時代,爬蟲可以幫助企業在線上採集到相當精準的使用者資訊,成為企業制定營銷策略的關鍵。當然,技術流的推廣人員都知道,爬蟲執行少不了代理ip的輔助。 代理ip最新
工具方法:判斷是否為空獲取手機Imei編號等
public static boolean isEmpty(String s) { if (null == s) return true; if (s.length() == 0) return tr
C#實現字串,檔案獲取Md5加密校驗方法
http://jingyan.baidu.com/article/db55b6099758134ba30a2f1a.html Md5是一種雜湊演算法,理論上是不可解密的,而且重複的機率極小極小,因此在平常的密碼儲存上應用比較廣泛,這個值一般情況下是唯一的,所以在檔案校驗
自定義 jquery.validate.js 校驗方法
部落格參考:http://blog.csdn.net/yangxiaovip/article/details/21550145 jquery.validate.js 是一個前端 form 表單校驗外掛,具體詳情可以百度一下。 jquery.validate.js 不僅
校驗碼:奇偶校驗,海明碼,CRC
大多數情況下,使用檢錯碼,查錯後請求重發; 只有在單工通道(沒有反向反饋),才使用糾錯功能 1. 奇偶校驗 1.1 原理 有效資料:data_code msg = data_code + check
銀行卡校驗方法
注:此方法只能針對普通的16位和19位銀行卡校驗有效,對於卡號不規則的企業商戶開戶行無法校驗。 /** * 匹配銀行卡 * @param cardNo * @return */ public static boolean matchLuhn(String cardN
常用的資料校驗方法
1.什麼是資料校驗 通俗的說,就是為保證資料的完整性,用一種指定的演算法對原始資料計算出的一個校驗值。接收方用同樣的演算法計算一次校驗值,如果和隨資料提供的校驗值一樣,就說明資料是完整的。 2.最簡單的檢驗 實現方法:最簡單的校驗就是把原始資料和待比較資料直接進行比較,看是
(看得懂的)海明碼的編碼和校驗方法
轉載自:http://www.cnblogs.com/scrutable/p/6052127.html 看了半天就這個看懂了。所以轉載了。 海明碼(也叫漢明碼)具有一位糾錯能力。本文以1010110這個二進位制數為例解釋海明碼的編碼和校驗方法。 編碼 確
ip正則表示式 java判斷ip地址
符號 '\d'等價的正則表示式'[0-9]',匹配數字0-9; {1,3}表示匹配三位以內的數字(包括三位數) /** * Ip地址判斷<br> * 符號 '\d'等價的
軟體包的校驗方法
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
微信小程式業務域名配置:校驗檔案驗證失敗,請下載校驗檔案,上傳到伺服器指定的目錄
1.校驗檔案內容錯誤。校驗檔案內容一般是非HTML資料,如果下載下來的校驗檔案內容為HTML資料,一般為登入態過期。請重新登入小程式下載校驗檔案。 2.https證書過期。請確保https證書處於有效期內。 3.使用curl 測試連結,確保curl能夠正常訪問連結。
工具學習:Windows系統中刪除指定目錄內的空資料夾
工具學習:Windows系統中刪除指定目錄內的空資料夾 Windows系統中刪除指定目錄內的空資料夾的步驟如下: 建立記事本Clear.txt。 將下述程式碼複製到Clear.txt中,指定你想要處理的目錄地址(程式碼中的目錄為C盤根目錄)。
JS如何用Math.random()來生成指定範圍內(如:1-100)的隨機數?
一、包括下線數字(lower)不包括上限數字(upper)/** * 產生隨機整數,包含下限值,但不包括上限值 * @param {Number} lower 下限 * @param {Numbe