1. 獲取客戶端IP
public String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
if (ipAddress != null && ipAddress.length() > 15) {
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
2. 根據IP地址獲取Mac地址
使用cmd命令,適用於Windows服務器
public String getMac(String ip) throws UnknownHostException, SocketException {
String macAddress = "";
String line;
// 如果爲127.0.0.1,則獲取本地MAC地址
if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip) || "localhost".equals(ip) || getLocalIp().equals(ip)) { //注意getLocalIp().equals(ip),由於else中的方法獲取不到本機ip對應的的mac,所以放到這裏,調用的getLocalIp()
InetAddress inetAddress = InetAddress.getLocalHost();
byte[] mac = NetworkInterface.getByInetAddress(inetAddress)
.getHardwareAddress();
// 下面代碼是把mac地址拼裝成String
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
// mac[i] & 0xFF 是爲了把byte轉化爲正整數
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length() == 1 ? 0 + s : s);
}
// 把字符串所有小寫字母改爲大寫成爲正規的mac地址並返回
macAddress = sb.toString().trim().toUpperCase();
return macAddress;
} else { // 獲取非本地IP的MAC地址
// //由於我測試的時候,使用"nbtstat -A " + ip獲取不到一些Mac,
// //所以換成"arp -A " + ip
// final String MAC_ADDRESS_PREFIX = "MAC Address = ";
// try {
// Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
// InputStreamReader isr = new InputStreamReader(p.getInputStream());
// BufferedReader br = new BufferedReader(isr);
// while ((line = br.readLine()) != null) {
// if (line != null) {
// int index = line.indexOf(MAC_ADDRESS_PREFIX);
// if (index != -1) {
// macAddress = line.substring(index + MAC_ADDRESS_PREFIX.length()).trim().toUpperCase();
// }
// }
// }
// br.close();
// } catch (IOException e) {
// e.printStackTrace(System.out);
// }
try {
Process p = Runtime.getRuntime().exec("arp -A " + ip);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line != null) {
int index = line.indexOf(ip);
if (index != -1) {
macAddress = line.substring(index + ip.length() + 10,index + ip.length() + 27).trim().toUpperCase();
}
}
}
br.close();
} catch (IOException e) {
e.printStackTrace(System.out);
}
return macAddress;
}
}
3. 獲取服務器IP
public String getLocalIp() {
try {
Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip;
while (allNetInterfaces.hasMoreElements()){
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
Enumeration addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements()){
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address && !"127.0.0.1".equals(ip.getHostAddress())){
return ip.getHostAddress();
}
}
}
} catch (Exception e) {}
return null;
}