How to get uuid or mac address from client in Java?

后端 未结 3 1383
一个人的身影
一个人的身影 2020-12-30 17:04

I\'m looking for a solution for a Java based webapplication to uniquely identify the client. The server is in the same network as the clients and I thought that using the MA

3条回答
  •  隐瞒了意图╮
    2020-12-30 17:50

    Usage of IP address isn't working in the local network. I have used some other method to get a MAC address - sysout parsing of useful commands.

    public String getMacAddress() throws Exception {
        String macAddress = null;
        String command = "ifconfig";
    
        String osName = System.getProperty("os.name");
        System.out.println("Operating System is " + osName);
    
        if (osName.startsWith("Windows")) {
            command = "ipconfig /all";
        } else if (osName.startsWith("Linux") || osName.startsWith("Mac") || osName.startsWith("HP-UX")
                || osName.startsWith("NeXTStep") || osName.startsWith("Solaris") || osName.startsWith("SunOS")
                || osName.startsWith("FreeBSD") || osName.startsWith("NetBSD")) {
            command = "ifconfig -a";
        } else if (osName.startsWith("OpenBSD")) {
            command = "netstat -in";
        } else if (osName.startsWith("IRIX") || osName.startsWith("AIX") || osName.startsWith("Tru64")) {
            command = "netstat -ia";
        } else if (osName.startsWith("Caldera") || osName.startsWith("UnixWare") || osName.startsWith("OpenUNIX")) {
            command = "ndstat";
        } else {// Note: Unsupported system.
            throw new Exception("The current operating system '" + osName + "' is not supported.");
        }
    
        Process pid = Runtime.getRuntime().exec(command);
        BufferedReader in = new BufferedReader(new InputStreamReader(pid.getInputStream()));
        Pattern p = Pattern.compile("([\\w]{1,2}(-|:)){5}[\\w]{1,2}");
        while (true) {
            String line = in.readLine();
            System.out.println("line " + line);
            if (line == null)
                break;
    
            Matcher m = p.matcher(line);
            if (m.find()) {
                macAddress = m.group();
                break;
            }
        }
        in.close();
        return macAddress;
    }
    

    This should work everywhere. At least, the usage of this method on Ubuntu machine gives the following result:

    Operating System is Linux
    line eth0      Link encap:Ethernet  HWaddr f4:6d:04:63:8e:21  
    mac: f4:6d:04:63:8e:21
    

提交回复
热议问题