如何在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