2013-05-08 11 views
9

プログラムを実行しているシステムのMACアドレスを取得する必要があります。しかし私はそれをすることができません。JavaでシステムのMACアドレスを取得

私は、次のコードを書いています:

public class App{ 

     public static void main(String[] args){ 

     InetAddress ip; 
     try { 

      ip = InetAddress.getLocalHost(); 
      System.out.println("Current IP address : " + ip.getHostAddress()); 

      NetworkInterface network = NetworkInterface.getByInetAddress(ip); 

      byte[] mac = network.getHardwareAddress(); 

      System.out.print("Current MAC address : "); 

      StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < mac.length; i++) { 
       sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));   
      } 
      System.out.println(sb.toString()); 

     } catch (UnknownHostException e) { 

      e.printStackTrace(); 

     } catch (SocketException e){ 

      e.printStackTrace(); 

     } 

     } 

    } 

をそして私は次のような結果を得ています:

Current IP address : 14.96.192.202 
Current MAC address : 

私はMACはそれが空白にされているアドレスになっておりません。

あなたが複数のインターフェース、およびいくつかのヌルMACアドレス(私がインストールVMwareとWindows 7の上でJava 7を実行しています(私はいくつかの仮想ネットワークアダプタを持っている))を占めている場合、私はhere

+0

出力にNULLが表示されています..! –

+0

WindowsまたはLinux?プログラムが管理者として実行されていることを確認する必要がありますか? –

+0

私はWindowsを使用しています –

答えて

35

からこの例を見てこのコードは動作しているようです。ここでは

public static void main(String[] args) { 
    try { 
    InetAddress ip = InetAddress.getLocalHost(); 
    System.out.println("Current IP address : " + ip.getHostAddress()); 

    Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces(); 
    while(networks.hasMoreElements()) { 
     NetworkInterface network = networks.nextElement(); 
     byte[] mac = network.getHardwareAddress(); 

     if(mac != null) { 
     System.out.print("Current MAC address : "); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < mac.length; i++) { 
      sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); 
     } 
     System.out.println(sb.toString()); 
     } 
    } 
    } catch (UnknownHostException e) { 
    e.printStackTrace(); 
    } catch (SocketException e){ 
    e.printStackTrace(); 
    } 
} 

は、私はそれを実行したとき、私は自分のコンピュータに表示されるもの(の消毒版)です:

Current IP address : {I'm not telling :)} 
Current MAC address : 
Current MAC address : {actual hardware interface} 
Current MAC address : 00-00-00-00-00-00-00-E0 
Current MAC address : 00-00-00-00-00-00-00-E0 
Current MAC address : 00-00-00-00-00-00-00-E0 
Current MAC address : 00-00-00-00-00-00-00-E0 
Current MAC address : 00-00-00-00-00-00-00-E0 
Current MAC address : 00-50-56-C0-00-01 
Current MAC address : 00-50-56-C0-00-08 

そしてここではInetAddress.getLocalHost().getHostAddress()とのネットワークインタフェース自身との関係から来ているこの混乱から「ただ一つの値を」得ることにipconfig /all

C:\>ipconfig /all 

Windows IP Configuration (minus any actual interface because I don't like sharing that kind of information :) 

Ethernet adapter Local Area Connection 2: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : Gbridge Virtual Private Network Adapter 
    Physical Address. . . . . . . . . : 02-50-F2-CE-82-01 
    DHCP Enabled. . . . . . . . . . . : Yes 
    Autoconfiguration Enabled . . . . : Yes 

Ethernet adapter VMware Network Adapter VMnet1: 

    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1 
    Physical Address. . . . . . . . . : 00-50-56-C0-00-01 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 
    Link-local IPv6 Address . . . . . : fe80::9c27:3d03:da2c:f14d%19(Preferred) 
    Autoconfiguration IPv4 Address. . : {Hidden}(Preferred) 
    Subnet Mask . . . . . . . . . . . : 255.255.0.0 
    Default Gateway . . . . . . . . . : 
    DHCPv6 IAID . . . . . . . . . . . : 268456022 
    DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-13-DB-D9-CB-B8-AC-6F-AF-9D-F2 
    DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1 
             fec0:0:0:ffff::2%1 
             fec0:0:0:ffff::3%1 
    NetBIOS over Tcpip. . . . . . . . : Enabled 

Ethernet adapter VMware Network Adapter VMnet8: 

    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8 
    Physical Address. . . . . . . . . : 00-50-56-C0-00-08 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 
    Link-local IPv6 Address . . . . . : fe80::cdbb:434:7fd9:2574%20(Preferred) 
    IPv4 Address. . . . . . . . . . . : 192.168.42.1(Preferred) 
    Subnet Mask . . . . . . . . . . . : 255.255.255.0 
    Default Gateway . . . . . . . . . : 
    DHCPv6 IAID . . . . . . . . . . . : 285233238 
    DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-13-DB-D9-CB-B8-AC-6F-AF-9D-F2 
    DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1 
             fec0:0:0:ffff::2%1 
             fec0:0:0:ffff::3%1 
    NetBIOS over Tcpip. . . . . . . . : Enabled 

Tunnel adapter 6TO4 Adapter: 

    Description . . . . . . . . . . . : Microsoft 6to4 Adapter 
    Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 
    IPv6 Address. . . . . . . . . . . : 2002:204c:1bc6::204c:1bc6(Preferred) 
    Default Gateway . . . . . . . . . : 
    NetBIOS over Tcpip. . . . . . . . : Disabled 

Tunnel adapter isatap.{3E45CB42-BC1E-4F89-9C16-25166C0EABA1}: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : Microsoft ISATAP Adapter 
    Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 

Tunnel adapter isatap.{77F1FADC-02BA-44AF-9FDF-97E23F8B5FE7}: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : Microsoft ISATAP Adapter #3 
    Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 

Tunnel adapter isatap.{608257AC-C0F3-43A5-8595-898533C95D90}: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 
    Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5 
    Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 
    DHCP Enabled. . . . . . . . . . . : No 
    Autoconfiguration Enabled . . . . : Yes 

挑戦を実行しているの出力です。あなたのコンピュータ上でこれを実行する場合は、あなたの現在のIPアドレスが1つのアダプターに相関が、あなたのMACアドレスがわかります

public static void main(String[] args) throws UnknownHostException, SocketException { 
    System.out.println("Current IP address : " + InetAddress.getLocalHost().getHostAddress()); 

    for(NetworkInterface network : IterableEnumeration.make(NetworkInterface.getNetworkInterfaces())) { 
    byte[] mac = network.getHardwareAddress(); 
    if(mac != null) { 
     System.out.print("Current MAC address : "); 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < mac.length; i++) { 
     sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); 
     } 
     System.out.println(sb.toString()); 
     //Bound InetAddress for interface 
     for(InetAddress address : IterableEnumeration.make(network.getInetAddresses())) { 
     System.out.println("\tBound to:"+address.getHostAddress()); 
     } 
    } 
    } 
} 

:(これは本当にクールIterableEnumerationユーティリティクラスを使用して)初期プログラムのこのわずかな拡張バージョンを考えてみましょうハードウェアインターフェイスは、それが異なるIPアドレスとして自己のものであるとみなします。たぶん仮想アドレスを除外したり、すべての利用可能なアドレスを利用する方法を見つけることができます。

+0

それは一連の値を返します。私は自分のプログラムに単一のValueが必要です。そして、私はどのようにして一つの価値を取りますか?それはあまりにも適切です。 –

+0

私は自分の答えに加えて刺した。 –

関連する問題