|
@ -14,217 +14,219 @@ import java.util.regex.Pattern; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 获取IP方法 |
|
|
* 获取IP方法 |
|
|
* |
|
|
* |
|
|
* @author shuili |
|
|
* @author shuili |
|
|
*/ |
|
|
*/ |
|
|
public class IpUtils { |
|
|
public class IpUtils { |
|
|
public static String getIpAddr(HttpServletRequest request) { |
|
|
public final static String UNKNOWN = "unknown"; |
|
|
if (request == null) { |
|
|
|
|
|
return "unknown"; |
|
|
public static String getIpAddr(HttpServletRequest request) { |
|
|
} |
|
|
if (request == null) { |
|
|
String ip = request.getHeader("x-forwarded-for"); |
|
|
return UNKNOWN; |
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
|
|
} |
|
|
ip = request.getHeader("Proxy-Client-IP"); |
|
|
String ip = request.getHeader("x-forwarded-for"); |
|
|
} |
|
|
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { |
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
|
|
ip = request.getHeader("Proxy-Client-IP"); |
|
|
ip = request.getHeader("X-Forwarded-For"); |
|
|
} |
|
|
} |
|
|
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { |
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
|
|
ip = request.getHeader("X-Forwarded-For"); |
|
|
ip = request.getHeader("WL-Proxy-Client-IP"); |
|
|
} |
|
|
} |
|
|
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { |
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
|
|
ip = request.getHeader("WL-Proxy-Client-IP"); |
|
|
ip = request.getHeader("X-Real-IP"); |
|
|
} |
|
|
} |
|
|
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { |
|
|
|
|
|
ip = request.getHeader("X-Real-IP"); |
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
|
|
} |
|
|
ip = request.getRemoteAddr(); |
|
|
|
|
|
} |
|
|
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { |
|
|
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip); |
|
|
ip = request.getRemoteAddr(); |
|
|
} |
|
|
} |
|
|
|
|
|
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip); |
|
|
public static boolean internalIp(String ip) { |
|
|
} |
|
|
byte[] addr = textToNumericFormatV4(ip); |
|
|
|
|
|
return internalIp(addr) || "127.0.0.1".equals(ip); |
|
|
public static boolean internalIp(String ip) { |
|
|
} |
|
|
byte[] addr = textToNumericFormatV4(ip); |
|
|
|
|
|
return internalIp(addr) || "127.0.0.1".equals(ip); |
|
|
private static boolean internalIp(byte[] addr) { |
|
|
} |
|
|
if (StringUtils.isNull(addr) || addr.length < 2) { |
|
|
|
|
|
return true; |
|
|
private static boolean internalIp(byte[] addr) { |
|
|
} |
|
|
if (StringUtils.isNull(addr) || addr.length < 2) { |
|
|
final byte b0 = addr[0]; |
|
|
return true; |
|
|
final byte b1 = addr[1]; |
|
|
} |
|
|
// 10.x.x.x/8
|
|
|
final byte b0 = addr[0]; |
|
|
final byte SECTION_1 = 0x0A; |
|
|
final byte b1 = addr[1]; |
|
|
// 172.16.x.x/12
|
|
|
// 10.x.x.x/8
|
|
|
final byte SECTION_2 = (byte) 0xAC; |
|
|
final byte SECTION_1 = 0x0A; |
|
|
final byte SECTION_3 = (byte) 0x10; |
|
|
// 172.16.x.x/12
|
|
|
final byte SECTION_4 = (byte) 0x1F; |
|
|
final byte SECTION_2 = (byte) 0xAC; |
|
|
// 192.168.x.x/16
|
|
|
final byte SECTION_3 = (byte) 0x10; |
|
|
final byte SECTION_5 = (byte) 0xC0; |
|
|
final byte SECTION_4 = (byte) 0x1F; |
|
|
final byte SECTION_6 = (byte) 0xA8; |
|
|
// 192.168.x.x/16
|
|
|
switch (b0) { |
|
|
final byte SECTION_5 = (byte) 0xC0; |
|
|
case SECTION_1: |
|
|
final byte SECTION_6 = (byte) 0xA8; |
|
|
return true; |
|
|
switch (b0) { |
|
|
case SECTION_2: |
|
|
case SECTION_1: |
|
|
if (b1 >= SECTION_3 && b1 <= SECTION_4) { |
|
|
return true; |
|
|
return true; |
|
|
case SECTION_2: |
|
|
} |
|
|
if (b1 >= SECTION_3 && b1 <= SECTION_4) { |
|
|
case SECTION_5: |
|
|
return true; |
|
|
switch (b1) { |
|
|
} |
|
|
case SECTION_6: |
|
|
case SECTION_5: |
|
|
return true; |
|
|
switch (b1) { |
|
|
} |
|
|
case SECTION_6: |
|
|
default: |
|
|
return true; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
default: |
|
|
} |
|
|
return false; |
|
|
|
|
|
} |
|
|
/** |
|
|
} |
|
|
* 将IPv4地址转换成字节 |
|
|
|
|
|
* |
|
|
/** |
|
|
* @param text IPv4地址 |
|
|
* 将IPv4地址转换成字节 |
|
|
* @return byte 字节 |
|
|
* |
|
|
*/ |
|
|
* @param text IPv4地址 |
|
|
public static byte[] textToNumericFormatV4(String text) { |
|
|
* @return byte 字节 |
|
|
if (text.length() == 0) { |
|
|
*/ |
|
|
return null; |
|
|
public static byte[] textToNumericFormatV4(String text) { |
|
|
} |
|
|
if (text.length() == 0) { |
|
|
|
|
|
return null; |
|
|
byte[] bytes = new byte[4]; |
|
|
} |
|
|
String[] elements = text.split("\\.", -1); |
|
|
|
|
|
try { |
|
|
byte[] bytes = new byte[4]; |
|
|
long l; |
|
|
String[] elements = text.split("\\.", -1); |
|
|
int i; |
|
|
try { |
|
|
switch (elements.length) { |
|
|
long l; |
|
|
case 1: |
|
|
int i; |
|
|
l = Long.parseLong(elements[0]); |
|
|
switch (elements.length) { |
|
|
if ((l < 0L) || (l > 4294967295L)) { |
|
|
case 1: |
|
|
return null; |
|
|
l = Long.parseLong(elements[0]); |
|
|
} |
|
|
if ((l < 0L) || (l > 4294967295L)) { |
|
|
bytes[0] = (byte) (int) (l >> 24 & 0xFF); |
|
|
return null; |
|
|
bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); |
|
|
} |
|
|
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
|
|
bytes[0] = (byte) (int) (l >> 24 & 0xFF); |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); |
|
|
break; |
|
|
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
|
|
case 2: |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
l = Integer.parseInt(elements[0]); |
|
|
break; |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
case 2: |
|
|
return null; |
|
|
l = Integer.parseInt(elements[0]); |
|
|
} |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
bytes[0] = (byte) (int) (l & 0xFF); |
|
|
return null; |
|
|
l = Integer.parseInt(elements[1]); |
|
|
} |
|
|
if ((l < 0L) || (l > 16777215L)) { |
|
|
bytes[0] = (byte) (int) (l & 0xFF); |
|
|
return null; |
|
|
l = Integer.parseInt(elements[1]); |
|
|
} |
|
|
if ((l < 0L) || (l > 16777215L)) { |
|
|
bytes[1] = (byte) (int) (l >> 16 & 0xFF); |
|
|
return null; |
|
|
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
|
|
} |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
bytes[1] = (byte) (int) (l >> 16 & 0xFF); |
|
|
break; |
|
|
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
|
|
case 3: |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
for (i = 0; i < 2; ++i) { |
|
|
break; |
|
|
l = Integer.parseInt(elements[i]); |
|
|
case 3: |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
for (i = 0; i < 2; ++i) { |
|
|
return null; |
|
|
l = Integer.parseInt(elements[i]); |
|
|
} |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
bytes[i] = (byte) (int) (l & 0xFF); |
|
|
return null; |
|
|
} |
|
|
} |
|
|
l = Integer.parseInt(elements[2]); |
|
|
bytes[i] = (byte) (int) (l & 0xFF); |
|
|
if ((l < 0L) || (l > 65535L)) { |
|
|
} |
|
|
return null; |
|
|
l = Integer.parseInt(elements[2]); |
|
|
} |
|
|
if ((l < 0L) || (l > 65535L)) { |
|
|
bytes[2] = (byte) (int) (l >> 8 & 0xFF); |
|
|
return null; |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
} |
|
|
break; |
|
|
bytes[2] = (byte) (int) (l >> 8 & 0xFF); |
|
|
case 4: |
|
|
bytes[3] = (byte) (int) (l & 0xFF); |
|
|
for (i = 0; i < 4; ++i) { |
|
|
break; |
|
|
l = Integer.parseInt(elements[i]); |
|
|
case 4: |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
for (i = 0; i < 4; ++i) { |
|
|
return null; |
|
|
l = Integer.parseInt(elements[i]); |
|
|
} |
|
|
if ((l < 0L) || (l > 255L)) { |
|
|
bytes[i] = (byte) (int) (l & 0xFF); |
|
|
return null; |
|
|
} |
|
|
} |
|
|
break; |
|
|
bytes[i] = (byte) (int) (l & 0xFF); |
|
|
default: |
|
|
} |
|
|
return null; |
|
|
break; |
|
|
} |
|
|
default: |
|
|
} catch (NumberFormatException e) { |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
} catch (NumberFormatException e) { |
|
|
return bytes; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
|
|
|
return bytes; |
|
|
public static String getMacByIp(String ip) { |
|
|
} |
|
|
String macAddr = null; |
|
|
|
|
|
try { |
|
|
public static String getMacByIp(String ip) { |
|
|
Process process = Runtime.getRuntime().exec("nbtstat -a " + ip); |
|
|
String macAddr = null; |
|
|
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); |
|
|
try { |
|
|
Pattern pattern = Pattern.compile("([A-F0-9]{2}-){5}[A-F0-9]{2}"); |
|
|
Process process = Runtime.getRuntime().exec("nbtstat -a " + ip); |
|
|
Matcher matcher; |
|
|
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); |
|
|
for (String strLine = br.readLine(); strLine != null; strLine = br.readLine()) { |
|
|
Pattern pattern = Pattern.compile("([A-F0-9]{2}-){5}[A-F0-9]{2}"); |
|
|
matcher = pattern.matcher(strLine); |
|
|
Matcher matcher; |
|
|
if (matcher.find()) { |
|
|
for (String strLine = br.readLine(); strLine != null; strLine = br.readLine()) { |
|
|
macAddr = matcher.group(); |
|
|
matcher = pattern.matcher(strLine); |
|
|
break; |
|
|
if (matcher.find()) { |
|
|
} |
|
|
macAddr = matcher.group(); |
|
|
} |
|
|
break; |
|
|
} catch (IOException e) { |
|
|
} |
|
|
e.printStackTrace(); |
|
|
} |
|
|
} |
|
|
} catch (IOException e) { |
|
|
System.out.println(macAddr); |
|
|
e.printStackTrace(); |
|
|
return macAddr; |
|
|
} |
|
|
} |
|
|
System.out.println(macAddr); |
|
|
|
|
|
return macAddr; |
|
|
public static String getHostIp() { |
|
|
} |
|
|
try { |
|
|
|
|
|
return InetAddress.getLocalHost().getHostAddress(); |
|
|
public static String getHostIp() { |
|
|
} catch (UnknownHostException e) { |
|
|
try { |
|
|
} |
|
|
return InetAddress.getLocalHost().getHostAddress(); |
|
|
return "127.0.0.1"; |
|
|
} catch (UnknownHostException e) { |
|
|
} |
|
|
} |
|
|
|
|
|
return "127.0.0.1"; |
|
|
public static String getHostName() { |
|
|
} |
|
|
try { |
|
|
|
|
|
return InetAddress.getLocalHost().getHostName(); |
|
|
public static String getHostName() { |
|
|
} catch (UnknownHostException e) { |
|
|
try { |
|
|
} |
|
|
return InetAddress.getLocalHost().getHostName(); |
|
|
return "未知"; |
|
|
} catch (UnknownHostException e) { |
|
|
} |
|
|
} |
|
|
|
|
|
return "未知"; |
|
|
/* |
|
|
} |
|
|
* 验证IP是否属于某个IP段 |
|
|
|
|
|
* |
|
|
/* |
|
|
* ipSection IP段(以'-'分隔) ip 所验证的IP号码 |
|
|
* 验证IP是否属于某个IP段 |
|
|
* |
|
|
* |
|
|
*/ |
|
|
* ipSection IP段(以'-'分隔) ip 所验证的IP号码 |
|
|
|
|
|
* |
|
|
public static boolean ipExistsInRange(String ip, String ipStrat, String ipEnd) { |
|
|
*/ |
|
|
ip = ip.trim(); |
|
|
|
|
|
String beginIP = ipStrat.trim(); |
|
|
public static boolean ipExistsInRange(String ip, String ipStrat, String ipEnd) { |
|
|
String endIP = ipEnd.trim(); |
|
|
ip = ip.trim(); |
|
|
return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP); |
|
|
String beginIP = ipStrat.trim(); |
|
|
|
|
|
String endIP = ipEnd.trim(); |
|
|
} |
|
|
return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP); |
|
|
|
|
|
|
|
|
public static long getIp2long(String ip) { |
|
|
} |
|
|
ip = ip.trim(); |
|
|
|
|
|
String[] ips = ip.split("\\."); |
|
|
public static long getIp2long(String ip) { |
|
|
long ip2long = 0L; |
|
|
ip = ip.trim(); |
|
|
for (int i = 0; i < 4; ++i) { |
|
|
String[] ips = ip.split("\\."); |
|
|
ip2long = ip2long << 8 | Integer.parseInt(ips[i]); |
|
|
long ip2long = 0L; |
|
|
} |
|
|
for (int i = 0; i < 4; ++i) { |
|
|
return ip2long; |
|
|
ip2long = ip2long << 8 | Integer.parseInt(ips[i]); |
|
|
|
|
|
} |
|
|
} |
|
|
return ip2long; |
|
|
|
|
|
|
|
|
public static long getIp2long2(String ip) { |
|
|
} |
|
|
ip = ip.trim(); |
|
|
|
|
|
String[] ips = ip.split("\\."); |
|
|
public static long getIp2long2(String ip) { |
|
|
long ip1 = Integer.parseInt(ips[0]); |
|
|
ip = ip.trim(); |
|
|
long ip2 = Integer.parseInt(ips[1]); |
|
|
String[] ips = ip.split("\\."); |
|
|
long ip3 = Integer.parseInt(ips[2]); |
|
|
long ip1 = Integer.parseInt(ips[0]); |
|
|
long ip4 = Integer.parseInt(ips[3]); |
|
|
long ip2 = Integer.parseInt(ips[1]); |
|
|
long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4; |
|
|
long ip3 = Integer.parseInt(ips[2]); |
|
|
return ip2long; |
|
|
long ip4 = Integer.parseInt(ips[3]); |
|
|
|
|
|
long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4; |
|
|
} |
|
|
return ip2long; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |