当前位置: 首页 > 面试题库 >

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

左丘兴生
2023-03-14
问题内容

我正在寻找一种基于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 Web应用程序(Servlet),该服务器需要获取客户端IP地址。 以下是我到目前为止的代码: 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在这种情况下,我

  • 问题内容: 有没有办法在Node.js上找到客户端的mac地址?我一直在搜索它,但是我发现了node- sigar项目,但是它没有用,因为它引发了“找不到模块./build/Release/sigar”错误。 问题答案: 除非您的代码与客户端在同一LAN段上运行,否则您将无法获取客户端的MAC地址。您可能需要使用命令行工具或本机支持才能获得本地LAN网段上的地址。 对于nodejs:https :

  • 问题内容: 如何使用PHP或javascript获取MAC地址… 问题答案: 如果客户端正在运行Windows,并允许您安装ActiveX控件,则可以使用javascript获取客户端的MAC地址。 http://www.eggheadcafe.com/community/aspnet/3/10054371/how-to-get-client-mac- address.aspx http://co

  • 问题内容: 我正在尝试在Laravel中获取客户端的IP地址。 使用可以很容易地在PHP中获得客户端的IP 。在核心PHP中它可以正常工作,但是当我在Laravel中使用相同的东西时,它将返回服务器IP而不是访问者的IP。 问题答案: 查看Laravel API: 在内部,它使用Symfony Request对象中的方法:

  • 对于我的应用程序,我有一个服务器端数据库,在其中存储用户及其数据。我想知道如何跟踪哪个用户拥有哪个UUID。我想确保只有具有自己唯一UUID的同一用户才能访问数据库中的数据。 最好的方法是什么?

  • 问题内容: 我不完全了解如何获取远程用户IP地址。 假设我有一个简单的请求路由,例如: 以上方法是正确的以获得真实用户IP地址还是有更好的方法?代理呢? 问题答案: 如果您是在像NGiNX这样的代理服务器上运行或者只有什么,那么您应该检查’x-forwarded-for’: 如果代理不是“您的”,那么我将不信任“ x-forward-for”标头,因为它可能是被欺骗的。