在Java中,判斷是否為內網地址或外網地址可以通過以下方式實現:
/** * 判斷是否為內網地址 * @param ip 要判斷的IP地址字符串 * @return true表示是內網地址,false表示不是內網地址 */ public static boolean isInternalIp(String ip) { if ("127.0.0.1".equals(ip) || "localhost".equals(ip)) { return true; } Long n = ipToLong(ip); if (n != null) { // A類地址范圍:10.0.0.0--10.255.255.255 Long aBegin = ipToLong("10.0.0.0"); Long aEnd = ipToLong("10.255.255.255"); // B類地址范圍:172.16.0.0--172.31.255.255 Long bBegin = ipToLong("172.16.0.0"); Long bEnd = ipToLong("172.31.255.255"); // C類地址范圍:192.168.0.0--192.168.255.255 Long cBegin = ipToLong("192.168.0.0"); Long cEnd = ipToLong("192.168.255.255"); return isInRange(n, aBegin, aEnd) || isInRange(n, bBegin, bEnd) || isInRange(n, cBegin, cEnd); } return false; } /** * 判斷是否為外網地址 * @param ip 要判斷的IP地址字符串 * @return true表示是外網地址,false表示不是外網地址 */ public static boolean isExternalIp(String ip) { return !isInternalIp(ip); } /** * 將IP地址字符串轉換成Long類型的整數 * @param ip IP地址字符串 * @return Long類型的整數 */ private static Long ipToLong(String ip) { String[] ipArray = ip.split("\\."); if (ipArray.length != 4) { return null; } long result = 0; for (int i = 0; i < ipArray.length; i++) { long cur = Long.parseLong(ipArray[i]); result += cur << (24 - 8 * i); } return result; } /** * 判斷某個IP地址是否在范圍之內 * @param ip IP地址 * @param begin 范圍開始的IP地址 * @param end 范圍結束的IP地址 * @return true表示在范圍內,false表示不在范圍內 */ private static boolean isInRange(Long ip, Long begin, Long end) { return ip >= begin && ip <= end; }
其中isInternalIp方法用于判斷給定的IP地址是否為內網地址,isExternalIp方法用于判斷是否為外網地址。參數ip必須為字符串類型,如果為IPv4地址,則使用點號(.)分割四個子段,每個子段值為0~255之間的整數。如果要判斷本機地址可以傳入"127.0.0.1"或"localhost"字符串。
isInRange方法用于判斷一個IP地址是否在給定的范圍內,使用Long類型的整數來存儲IP地址值,方便進行比較。在isInternalIp方法中,根據A類、B類、C類地址的范圍判斷是否為內網地址;在isExternalIp方法中,如果不是內網地址則判定為外網地址。
上一篇克隆和拷貝的區別java
下一篇Ajax怎么異步獲取數據