如何在Java中从客户端获取uuid或mac地址?

我正在寻找一种基于Java的Web应用程序以唯一标识客户端的解决方案。服务器与客户端位于同一网络中,我认为使用MAC地址将是一个很好的解决方案。问题是我不能使用cookie,因为它们可以在客户端被删除,而我不能使用IP,因为它们可以发出新的DHCP租约续约。

因此,我想回退到客户端的MAC地址。我知道没有内置的Java功能来获取MAC地址。是否有一个库可以处理每个OS的输出?(主要是Windows和Mac),因为我的java应用程序可以在两个平台上运行。

还是有其他建议来唯一标识网站和HTTP协议中的客户端?(也许是HTML5数据存储或其他)

我正在使用Java 1.7 btw。

我不会强迫用户登录或以其他方式标识自己,也不会为客户端智能手机编写本机应用程序。

回答:

我写了自己的方法来解决我的问题。在这里,是否有人需要代码来查找同一网络中的MAC地址。在Win 7和Mac OS X

10.8.2上无需任何管理员权限即可为我工作

Pattern macpt = null;

private String getMac(String ip) {

// Find OS and set command according to OS

String OS = System.getProperty("os.name").toLowerCase();

String[] cmd;

if (OS.contains("win")) {

// Windows

macpt = Pattern

.compile("[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+");

String[] a = { "arp", "-a", ip };

cmd = a;

} else {

// Mac OS X, Linux

macpt = Pattern

.compile("[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+");

String[] a = { "arp", ip };

cmd = a;

}

try {

// Run command

Process p = Runtime.getRuntime().exec(cmd);

p.waitFor();

// read output with BufferedReader

BufferedReader reader = new BufferedReader(new InputStreamReader(

p.getInputStream()));

String line = reader.readLine();

// Loop trough lines

while (line != null) {

Matcher m = macpt.matcher(line);

// when Matcher finds a Line then return it as result

if (m.find()) {

System.out.println("Found");

System.out.println("MAC: " + m.group(0));

return m.group(0);

}

line = reader.readLine();

}

} catch (IOException e1) {

e1.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

// Return empty string if no MAC is found

return "";

}

以上是 如何在Java中从客户端获取uuid或mac地址? 的全部内容, 来源链接: utcz.com/qa/404534.html

回到顶部