软件项目或者产品有时候会用到本机网卡的物理MAC地址、IP地址、硬盘序列号加上使用软体名称和地址进行安全加密验证,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性

java读取MAC地址的工具方法,可以读取windows和非windows操作系统(linux,unix、或者MAC Mini下IOS系统)下的MAC地址

 基于验证的方法可以离线验证和在线验证

在线验证是通过调用webservicej接口通过服务器端比对判断和验证传入的参数 通过就PASS或者不通过就失败 过期重新申请授权码

这首先首次必须通过首次申请授权码 当管理者赋予给用户授权码时 用户可以通过授权码来验证使用软体权限,还有就是软体赋予给用户的使用期限

如果过期就要重新申请来使用。

 在获取MAC时要特别注意获取网卡的地址是否存在虚拟网卡也就是伪网卡 有的可能存在两个或者两个以上的网卡 要获取的是物理网卡地址

 必须判断或者通过另一种方法来解决 要么通过IP来获取MAC Address 根据网卡绑定的 IP 地址获得 NetworkInterface 对象这样不会存在获取不真实的MAC地址。一般通过命令来获取MAC会存在一些问题。如果有多个IP,只匹配本IP对应的Mac.

 关于获取IP地址的方式,在Linux平台下下,如果单纯通过InetAddress来获取IP地址,就会出现在不同的机器上IP地址不同的问题。

  InetAddress.getLocalHost().getAddress() 实际上是根据hostname来获取IP地址的。linux系统在刚刚装完默认的hostname是localhost,所以通过上面代码获取到的本机ip就是127.0.0.1, 而在windows平台下获取ip是可以的。

暂时采用下面代码来处理

public static byte[] getIp() throws UnknownHostException {

  byte[] b = InetAddress.getLocalHost().getAddress();

  Enumeration allNetInterfaces = null;

  try

   {

  allNetInterfaces = NetworkInterface.getNetworkInterfaces();

  }

catch (SocketException e)

    {

  e.printStackTrace();

  }

  InetAddress ip = null;

  NetworkInterface netInterface = null;

  while (allNetInterfaces.hasMoreElements())

{

  netInterface = (NetworkInterface) allNetInterfaces.nextElement();

  if (netInterface.getName().trim().equals("eth0"))

{

  Enumeration addresses = netInterface.getInetAddresses();

  while (addresses.hasMoreElements())

  {

  ip = (InetAddress) addresses.nextElement();

  }

  break;

  }

  }

  if (ip != null &&ip instanceof Inet4Address)

  {

  return b = ip.getAddress();

  }

  return b;

原文地址:https://www.cnblogs.com/Warmsunshine/p/2559453.html