常用代码

客户端信息

  1. package com.egao.common.core.utils;
  2. import eu.bitwalker.useragentutils.UserAgent;
  3. import javax.servlet.http.HttpServletRequest;
  4. import java.net.InetAddress;
  5. import java.net.UnknownHostException;
  6. /**
  7. * 获取客户端设备信息
  8. * Crated by Addis
  9. */
  10. public class UserAgentGetter {
  11. private final UserAgent userAgent;
  12. private final String userAgentString;
  13. private final HttpServletRequest userRequest;
  14. public UserAgentGetter(HttpServletRequest request) {
  15. this.userRequest = request;
  16. this.userAgentString = request.getHeader("User-Agent");
  17. this.userAgent = UserAgent.parseUserAgentString(userAgentString);
  18. }
  19. /**
  20. * 获取浏览器类型
  21. */
  22. public String getBrowser() {
  23. if (null == userAgent) return "Unknown";
  24. return userAgent.getBrowser().getName();
  25. }
  26. /**
  27. * 获取操作系统
  28. */
  29. public String getOS() {
  30. if (null == userAgent) return "Unknown";
  31. return userAgent.getOperatingSystem().getName();
  32. }
  33. /**
  34. * 获取设备型号
  35. */
  36. public String getDevice() {
  37. if (null == userAgentString) return "Unknown";
  38. if (userAgentString.contains("Android")) {
  39. String[] str = userAgentString.split("[()]+");
  40. str = str[1].split("[;]");
  41. String[] res = str[str.length - 1].split("Build/");
  42. return res[0].trim();
  43. } else if (userAgentString.contains("iPhone")) {
  44. String[] str = userAgentString.split("[()]+");
  45. String res = "iphone" + str[1].split("OS")[1].split("like")[0];
  46. return res.trim();
  47. } else if (userAgentString.contains("iPad")) {
  48. return "iPad";
  49. } else {
  50. return getOS().trim();
  51. }
  52. }
  53. /**
  54. * 获取ip地址
  55. */
  56. public String getIp() {
  57. return getIp(userRequest);
  58. }
  59. /**
  60. * 获取ip地址
  61. */
  62. public static String getIp(HttpServletRequest request) {
  63. String ip = null;
  64. try {
  65. ip = request.getHeader("x-forwarded-for");
  66. if (isBlankIp(ip)) ip = request.getHeader("Proxy-Client-IP");
  67. if (isBlankIp(ip)) ip = request.getHeader("WL-Proxy-Client-IP");
  68. if (isBlankIp(ip)) ip = request.getHeader("HTTP_CLIENT_IP");
  69. if (isBlankIp(ip)) ip = request.getHeader("HTTP_X_FORWARDED_FOR");
  70. if (isBlankIp(ip)) ip = request.getRemoteAddr();
  71. // 多个ip获取第一个
  72. if (!isBlankIp(ip) && ip.length() > 15) ip = ip.split(",")[0];
  73. } catch (Exception e) {
  74. e.printStackTrace();
  75. }
  76. if ("0:0:0:0:0:0:0:1".equals(ip)) {
  77. try {
  78. ip = InetAddress.getLocalHost().getHostAddress();
  79. } catch (UnknownHostException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. return ip;
  84. }
  85. private static boolean isBlankIp(String ip) {
  86. return ip == null || ip.trim().isEmpty() || "unknown".equalsIgnoreCase(ip);
  87. }
  88. }
import java.net.InetAddress;
import java.net.NetworkInterface;

// ip地址
public static void ip() throws Exception {
        InetAddress ia = null;
        try {
            ia = ia.getLocalHost();
            String localname = ia.getHostName();
            String localip = ia.getHostAddress();
            System.out.println("本机名称是:" + localname);
            System.out.println("本机的ip是 :" + localip);
        } catch (Exception e) {
            e.printStackTrace();
        }
        InetAddress ia1 = InetAddress.getLocalHost();// 获取本地IP对象
        System.out.println("本机的MAC是 :" + getMACAddress(ia1));
    }

    // 获取MAC地址的方法
    private static String getMACAddress(InetAddress ia) throws Exception {
        // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
        byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
        // 下面代码是把mac地址拼装成String
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < mac.length; i++) {
            if (i != 0) {
                sb.append("-");
            }
            // mac[i] & 0xFF 是为了把byte转化为正整数
            String s = Integer.toHexString(mac[i] & 0xFF);
            // System.out.println("--------------");
            // System.err.println(s);
            sb.append(s.length() == 1 ? 0 + s : s);
        }
        // 把字符串所有小写字母改为大写成为正规的mac地址并返回
        return sb.toString().toUpperCase();
    }