получить общие MAC-адреса на Mac OS, используя Java - PullRequest
1 голос
/ 01 ноября 2011

Я создаю Java-приложение, которое получает MAC-адреса пользователя и сравнивает его с соответствующим значением в базе данных (функция безопасности). но проблема возникает на Mac OS, когда я обнаружил, что список MAC-адресов имеет общие значения (например: на моем Mac список MAC-адресов: 001C42000009,001C42000008, E0F8474267B6 (Wi-Fi), 70CD60F1A5C1 (ethernet)) Есть ли способ узнать все эти общие значения, которые возникнут при получении адреса Mac на Mac OS.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

В http://standards.ieee.org/develop/regauth/oui/public.html вы можете искать поставщика, используя первые 3 байта MAC-адреса, 00-1C-42 указывает на "Parallels, Inc." (http://www.parallels.com). Используете ли вы какое-то их программное обеспечение для виртуализации? Попробуйте, что java.net.NetworkInterface.isVirtual() возвращает для этого адреса, если это бесполезно, может потребоваться некрасивый фильтр (например, основанный на шаблоне адреса)

import java.net.NetworkInterface;
import java.util.Enumeration;

public class NetworkInterfaceTest {

  public static void main(String args[]) {
    try {
      Enumeration<NetworkInterface> ie = NetworkInterface.getNetworkInterfaces();
      while (ie.hasMoreElements()) {
        NetworkInterface i = ie.nextElement();
        System.out.println(i.getDisplayName() + " [" + i.getName() + "]: " + formatAddress(i.getHardwareAddress()) + "; isVirtual=" + i.isVirtual());
      }
    } catch (Exception e){ 
      e.printStackTrace();
    }
  }

  private static String formatAddress(byte[] address) {
    if (address == null) {
      return null;
    }

    StringBuilder ret = new StringBuilder(address.length * 2);
    for (byte b : address) {
      if (ret.length() > 0) {
        ret.append('-');
      }

      String bs = Integer.toHexString(b & 0x000000FF).toUpperCase();
      if (bs.length() < 2) {
        ret.append('0');
      }
      ret.append(bs);
    }

    return ret.toString();
  }

}
0 голосов
/ 01 ноября 2011

я верю, что что-то подобное сделает всю работу за вас

try {
    InetAddress []addresses = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName());
    /*
     * Get NetworkInterfaces for current host and read hardware addresses.
     */
    for(int j=0; j< addresses.length; i++) {
            System.out.format("%02X%s", mac[i], (i < addresses.length – 1) ? "-" : "");
        }
        System.out.println();
    }
}
...