【问题标题】:Java MAC Address AuthorizationJava MAC 地址授权
【发布时间】:2011-04-02 16:09:21
【问题描述】:

基本上我希望 java 检索 mac 地址并打开一个带有 Mac 地址编码的 URL。该 URL 将使用 PHP 检查 MAC 地址是否在允许 MAC 地址列表中(我已经完成了这部分),并将输出“true”或 Java 可以检查的任何内容。如果它是真的,Java 会将 boolean authorized 更改为 true。之后,我可以简单地发出一个 if 语句来继续或不继续。

我只需要一些简单的东西,因为我不是一个出色的程序员。我还在学习。

【问题讨论】:

  • 你正在追求一个有缺陷的策略来实现一个未说明的目标。目标是什么?
  • @Andrew Thompson,虽然我认为您可能是正确的,但策略是否有缺陷通常在很大程度上取决于目标。
  • @Chris 我不介意得出一些结论。我需要锻炼。 ;)
  • @Andrew Thompson,就称之为 plyometrics ;-) 毕竟,它们是非常合理的结论......

标签: java


【解决方案1】:
  1. 获取MAC地址

  2. 要对参数进行 URL 编码,请使用 URLEncoder#encode(String, String)

【讨论】:

    【解决方案2】:

    以下示例将列出 Java 6 中网络接口的名称和 MAC:

    Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
    while (e.hasMoreElements()) {
        NetworkInterface ni = e.nextElement();
        if (!ni.isUp()) {
            continue;
        }
    
        byte[] address = ni.getHardwareAddress();
        if (address == null || address.length == 0) {
            continue;
        }
    
        StringBuilder sb = new StringBuilder(2 * address.length);
        for (byte b : address) {
            sb.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4));
            sb.append("0123456789ABCDEF".charAt((b & 0x0F)));
            sb.append(":");
        }
        sb.deleteCharAt(sb.length() - 1);
        String mac = sb.toString();
    
        System.out.println(ni.getName() + " " + mac);
    }
    

    您可以轻松获得多个(由于 VMware 网络适配器,我获得了 3 个)。可以确定特定InetAddressNetworkInterface。您可以查询它的 localhost 并且它可以工作:

    InetAddress localhost = InetAddress.getLocalHost();
    NetworkInterface ni = NetworkInterface.getByInetAddress(localhost);
    

    但是我发现,如果我连接到 VPN,它会给出一个空的 MAC 地址。因此,如果您正在处理可能配置不同的系统,我不完全确定如何可靠地获得所需的 MAC。希望这会有所帮助。

    一旦您拥有正确的 MAC 地址,您就可以打开一个 URL 将其发送到您的服务器,如下所示:

    new URL("http://server?mac=" + mac).openStream().close();
    

    【讨论】:

      【解决方案3】:

      你不应该在 Java 中这样做。 Mac 地址过滤是防火墙的领域。如果您需要这样做,请配置防火墙。这至少可以通过 Java 完成,具体取决于您的防火墙。

      在 Linux 中,配置您的 iptables,感谢命令行界面,这在 Java 中很容易。

      在 Windows 上,应该有一个易于使用的 API。使用 JNA 访问它。

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 2022-11-08
        • 2016-06-26
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        • 2020-08-08
        • 2014-08-16
        • 1970-01-01
        相关资源
        最近更新 更多