2013-09-26 3 views
0

Я показываю информацию о сети, используя очень simple code, которые используют Java API: NetworkInterface#getHardwareAddress().Какая конфигурация в Windows 7 может повлиять на NetworkInterface.getHardwareAddress() в Java?

Код работает на Windows XP, XP 64, Debian.

Я нахожу два разных поведения на Win 7: компьютер моей компании и мой. Отображаемые данные не совпадают с ipconfig /all, я получаю только физический адрес последней виртуальной сетевой карты.

Я воспроизвожу проблему, используя java 1.6 u32, 1.7 u21 и 1.7 u40 (обе версии x86/64): глядя на output, eth3 и eth4 возвращают неправильный адрес mac.

Я думаю, что код верный: это то же самое, что предложено в stackoverflow, и результат верен на моем персональном компьютере.

  • Кто-нибудь знает, какие параметры могут повлиять на результат?
  • Какие настройки следует проверить на Windows, чтобы определить различия между различными машинами?
  • Любые предложения?

ToDo

Постараюсь отключить виртуальные интерфейсы затем повторно запустить инструмент. (Требуется ИТ-вмешательство ...).

+0

Как ваш код? Вы конвертируете байт в целое число, чтобы отображать mac как String? – cheffe

+0

Возможный дубликат http://stackoverflow.com/questions/6164167/get-mac-address-on-local-machine-with-java –

+0

@AbhijithNagarajan, я знаю, как извлекать сетевую информацию. Мой код работает с Windows XP или Debian. Тема этого API java не предоставляет правильную информацию в Windows 7. – chepseskaf

ответ

0

У меня такая же проблема. Вот код, который работает на моей машине Windows 7 с виртуальными картами VMVare:

private String getMacJava5() throws Exception { 
    String mac = ""; 

    InetAddress ip = InetAddress.getLocalHost(); 

    String[] command = {"ipconfig", "/all"}; 
    Pattern physAddr = Pattern.compile("\\s*Physi.*: (.*)"); 
    Pattern ipAddr = Pattern.compile("\\s*IPv.*: ([^(]*).*"); 

    Process p = Runtime.getRuntime().exec(command); 
    BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while (true) { 
     String line = inn.readLine(); 
     if (line == null) { 
      break; 
     } 

     Matcher mm = physAddr.matcher(line); 
     if (mm.matches()) { 
      mac = mm.group(1); 
     } 
     mm = ipAddr.matcher(line); 
     if (mm.matches()) { 
      if (mm.group(1).equals(ip.getHostAddress())) { 
       break; 
      } 
      mac = ""; 
     } 
    } 
    return mac + " IP: " + ip.getHostAddress(); 
} 
+0

Я пробовал это решение, но это не перекрестная платформа. Как насчет Linux или OSX? Разрешен ли 'ifconfig' для не-sudoers? – chepseskaf

 Смежные вопросы

  • Нет связанных вопросов^_^