获取客户端信息工具类
import com.wangyao.common.constant.ConstantNumeral;
import jakarta.annotation.Nullable;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j; import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
@SuppressWarnings ( "ALL" )
@Slf4j
public class NetworkUtil { public static final String UNKNOWN = "unknown" ; public static final String LOCALHOST = "localhost" ; public static final String STRING = "127.0.0.1" ; public static final String STRING1 = "0:0:0:0:0:0:0:1" ; public static final String STR = "," ; public static final int INT = 15; @Nullable public static String getIpAddress ( @NotNull HttpServletRequest request) { String 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 ( "HTTP_X_FORWARDED_FOR" ) ; } if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr ( ) ; } // 本机访问if (LOCALHOST.equalsIgnoreCase(ip) || STRING.equalsIgnoreCase(ip) || STRING1.equalsIgnoreCase(ip)) { // 根据网卡取本机配置的IPInetAddress inet; try { inet = InetAddress.getLocalHost ( ) ; ip = inet.getHostAddress ( ) ; } catch (UnknownHostException e) { log.error ( e.getMessage ( ) ) ; } } // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割if (null != ip && ip.length() > INT) { if (ip.indexOf(STR) > INT) { ip = ip.substring ( 0, ip.indexOf ( STR) ) ; } } return ip; } @Nullable public static String getIPAddress ( ) { try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces ( ) ; while (interfaces.hasMoreElements()) { NetworkInterface networkInterface = interfaces.nextElement ( ) ; Enumeration<InetAddress> addresses = networkInterface.getInetAddresses ( ) ; while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement ( ) ; if (!address.isLoopbackAddress() && !address.isLinkLocalAddress() && address.isSiteLocalAddress()) { return address.getHostAddress ( ) ; } } } } catch (Exception e) { e.printStackTrace ( ) ; } return null; } public static String getMacAddress() throws Exception { // 取mac地址byte[] macAddressBytes = NetworkInterface.getByInetAddress ( InetAddress.getLocalHost ( ) ) .getHardwareAddress ( ) ; // 下面代码是把mac地址拼装成StringStringBuilder sb = new StringBuilder ( ) ; for ( int i = 0; i < macAddressBytes.length; i++) { if (i != 0) { sb.append ( "-" ) ; } // mac[i] & 0xFF 是为了把byte转化为正整数String s = Integer.toHexString ( macAddressBytes[i] & 0xFF) ; sb.append ( s.length ( ) == 1 ? 0 + s : s) ; } return sb.toString ( ) .trim ( ) .toUpperCase ( ) ; } public static String getMACAddress(String ip) throws Exception { if (STRING.equals(ip)) { return getMacAddress ( ) ; } String str; String macAddress = "" ; try { Process process = Runtime.getRuntime ( ) .exec ( "nbtstat -A " + ip) ; InputStreamReader inputReader = new InputStreamReader ( process.getInputStream ( ) ) ; LineNumberReader lineReader = new LineNumberReader ( inputReader) ; for ( int i = 1; i < ConstantNumeral.ONE_HUNDRED.value ( ) ; i++) { str = lineReader.readLine ( ) ; if (str != null) { if (str.indexOf("=") > 1) { macAddress = str.substring ( str.indexOf ( "=" ) + 2) ; break; } } } } catch (IOException e) { log.error ( e.getMessage ( ) ) ; } return macAddress; } public static void main(String[] args) throws Exception { System.out.println ( getMACAddress ( "175.167.139.28" ) ) ; }