1、获取本地地址
public static InetAddress getLocalHostLANAddress() {
try {
InetAddress candidateAddress = null;
// 遍历所有的网络接口
for (Enumeration
NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
// 在所有的接口下再遍历IP
for (Enumeration
ifaces =
NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {
inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {
InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
System.out.println(inetAddr.getHostAddress() + "," + inetAddr.getHostName() + "," + inetAddr);
if (!
inetAddr.isLoopbackAddress()) {// 排除loopback类型地址,即本地测试地址,像127.0.0.1 localhost
if (
inetAddr.isSiteLocalAddress()) {
// 如果是site-local地址,就是它了
return inetAddr;
} else if (candidateAddress == null) {
// site-local类型的地址未被发现,先记录候选地址
candidateAddress = inetAddr;
}
}
}
}
if (candidateAddress != null) {
return candidateAddress;
}
// 如果没有发现 non-loopback地址.只能用最次选的方案
InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
return jdkSuppliedAddress;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
2、获取 mac 地址
public static String getLocalMac(InetAddress ia) {
// TODO Auto-generated method stub
//获取网卡,再解析地址
byte[] mac = new byte[0];
try {
//获取到的mac地址的字节数组,要解析成16进制
mac =
NetworkInterface.getByInetAddress(ia).getHardwareAddress();
} catch (SocketException e) {
e.printStackTrace();
}
//System.out.println("mac数组长度:"+mac.length);
StringBuffer sb = new StringBuffer("");
for(int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
//字节转换为整数
int temp = mac[i] & 0xff;
String str = Integer.toHexString(temp);
//System.out.println("每8位:"+str);
if (str.length() == 1) {
sb.append("0" + str);
} else {
sb.append(str);
}
}
return sb.toString();
}
3、获取客户端的 IP
public static String getRealIp(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("X-FORWARDED-FOR ");
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr ();
}
if (ip != null && ip.contains(",")) {
ip = ip.split(",")[0];
}
} catch (Throwable e) {
}
return ip;
}
IP地址查询,通过IP数据云 - 免费IP地址查询。
https://www.ipdatacloud.com/?utm-source=WZ&utm-keyword=?784
IP数据云利用大数据挖掘和网络空间地图测绘技术与人工智能(AI)算法相结合,利用动态密度聚类算法和基于多层神经网络的IP地址定位算法,完成IP地址地理位置定位。IP数据云接口响应快,多台服务器构建 API 接口负载均衡。IP数据云利用全球超700个网络监测点辅助测量,IP地址查询定位准确度超过99.8%。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.