Java WebStart应用程序如何获取访问我的网页的MAC地址

我正在编写一个 java webstart应用程序来从网站部署,以便用户可以单击并运行我的软件.我需要一种独特的机器识别,以避免滥用文件的访问.我想使用客户端的MAC地址作为唯一密钥,以便服务器可以确保没有客户端下载太多.

当然,用户可能有多个网卡,那么我的Java应用程序如何确定用户用来访问我的网站的网卡的MAC地址?

解决方法

您可以使用java.net.NetworkInterface.getNetworkInterfaces获取网络接口,并在它们上调用getHardwareAddress()以获取MAC地址.

您可能希望使用if.isLoopBack()过滤掉环回(其中“if”是接口对象).还过滤掉if.getHardwareAddress()返回null的任何接口.然后挑出一个.您可以按名称if.getName()对它们进行排序,然后取第一个.出于您的目的,它是否是用于下载文件的实际界面并不重要,只是您可以以某种方式识别计算机.最后,if.getHardwareAddress()为您提供了一个包含MAC地址的字节数组.如果您更喜欢使用String,请使用“?x”.format(byte)格式化每个字节,并使用“:”作为分隔符将它们连接起来.

正如在另一个答案中所建议的那样,使用PersistenceService可能更好.

但是,如果要在每台计算机上具有相同文件/ homedirs的情况下在不同计算机上为同一用户保留不同数据,则使用MAC地址可能很有用.您可以将MAC地址用作传递给PersistenceService#create()和get()的URL的一部分.如果您需要每台计算机数据而不是每用户数据,则非常有用.

简短示例Scala代码:

def computerID: String = {
  try { // mac address of first network interface
    return java.net.NetworkInterface.getNetworkInterfaces
    .filter(!_.isLoopback)
    .filter(_.getHardwareAddress != null)
    .toList.sortBy(_.getName).head
    .getHardwareAddress.map("%02x".format(_)).mkString(":")
  } catch {
    case _ => return "0" // no mac address available? use default "0"
  }
}

相关文章

Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Sh...
运行程序出现下面错误:HTTP Status 500 ------------------...
1、建立DM的profile,使用的模版在install_root/profileTempl...
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是...
英文操作系统导致 Debug 下的变量查看时显示乱码,可通过改变...
eclipse中javascript报错问题处理:三个地方:<1&...