一.NetworkInterface概念
Java提供了一個NetworkInterface類。這個類可以得到本機所有的物理網絡接口和虛擬機等軟件利用本機的物理網絡接口創建的邏輯網絡接口的信息。
第一步:NetworkInterface通過getNetworkInterfaces方法來枚舉本機所有的網絡接口。
第二步:遍歷所有網絡ip,獲取本機ip
二.java實現
private static String getLocalIp() { String sip = null; InetAddress ip = null; boolean bFindIP = false; Enumeration<NetworkInterface> netInterfaces = null; try { netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface.getNetworkInterfaces(); } catch (SocketException e) { e.printStackTrace(); } while (netInterfaces.hasMoreElements()) { if (bFindIP) { break; } NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement(); // ----------特定情況,可以考慮用ni.getName判斷 // 遍歷所有ip Enumeration<InetAddress> ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { ip = (InetAddress) ips.nextElement(); if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() // 127.開頭的都是lookback地址 && ip.getHostAddress().indexOf(":") == -1) { bFindIP = true; break; } } } if (ip != null) { sip = ip.getHostAddress(); } return sip; }
三. js區分內外網
function getIpNum(ipAddress){ var ip = new Array(); ip= ipAddress.split("."); var a = parseInt(ip[0]); var b = parseInt(ip[1]); var c = parseInt(ip[2]); var d = parseInt(ip[3]); return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; } //是否為內網 function isInnerIP(ip){ var a1 = getIpNum("10.0.0.0"); var a2 = getIpNum("10.255.255.255"); var b1 = getIpNum("172.16.0.0"); var b2 = getIpNum("172.31.255.255"); var c1 = getIpNum("192.168.0.0"); var c2 = getIpNum("192.168.255.255"); var d1 = getIpNum("10.44.0.0"); var d2 = getIpNum("10.69.0.255"); var n = getIpNum(ip); return (n >= a1 && n <= a2) || (n >= b1 && n <= b2) || (n >= c1 && n <= c2) || (n >= d1 && n <= d2); } /****** * 截取URL請求參數 * * @param paras * @returns */ function getRequestURL(paras) { var url = location.href; var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&"); var paraObj = {} for (i = 0; j = paraString[i]; i++) { paraObj[j.substring(0, j.indexOf("=")).toLowerCase()] = j.substring(j .indexOf("=") + 1, j.length); } var returnValue = paraObj[paras.toLowerCase()]; if (typeof (returnValue) == "undefined") { return ""; } else { return returnValue; } }