JDK-8058216 : NetworkInterface.getHardwareAddress can return zero length byte array when run with preferIPv4Stack
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.net
  • Affected Version: 8,9
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_2012,windows_8
  • Submitted: 2014-09-11
  • Updated: 2015-06-04
  • Resolved: 2014-09-12
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u40Fixed 9 b32Fixed
Related Reports
Relates :  
Description
$ cat ListHardwareAddresses.java
import java.net.*;
import java.util.*;

public class ListHardwareAddresses {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
        while (netInterfaces.hasMoreElements()) {
            NetworkInterface netInterface = netInterfaces.nextElement();
            byte[] addr =  netInterface.getHardwareAddress();
            System.out.format("%n%s : length %s", netInterface.getDisplayName(),
                                                  addr == null ? "null" : addr.length);
        }
    }

}

$ java ListHardwareAddresses

Software Loopback Interface 1 : length null
WAN Miniport (L2TP) : length null
WAN Miniport (SSTP) : length null
WAN Miniport (IKEv2) : length null
WAN Miniport (PPTP) : length null
WAN Miniport (PPPOE) : length null
WAN Miniport (IP) : length null
WAN Miniport (IPv6) : length null
WAN Miniport (Network Monitor) : length null
Microsoft Kernel Debug Network Adapter : length null
RAS Async Adapter : length null
Oracle VM Virtual Ethernet Adapter : length 6
Oracle VM Virtual Ethernet Adapter #2 : length null
Microsoft ISATAP Adapter #3 : length 8
WAN Miniport (IP)-WFP Native MAC Layer LightWeight Filter-0000 : length null
WAN Miniport (IP)-QoS Packet Scheduler-0000 : length null
WAN Miniport (IPv6)-WFP Native MAC Layer LightWeight Filter-0000 : length null
WAN Miniport (IPv6)-QoS Packet Scheduler-0000 : length null
WAN Miniport (Network Monitor)-WFP Native MAC Layer LightWeight Filter-0000 : length null
WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000 : length null
Oracle VM Virtual Ethernet Adapter-WFP Native MAC Layer LightWeight Filter-0000 : length null
Oracle VM Virtual Ethernet Adapter-QoS Packet Scheduler-0000 : length null
Oracle VM Virtual Ethernet Adapter-WFP 802.3 MAC Layer LightWeight Filter-0000 : length null

$ java -Djava.net.preferIPv4Stack=true ListHardwareAddresses

Software Loopback Interface 1 : length null
WAN Miniport (L2TP) : length null
WAN Miniport (SSTP) : length null
WAN Miniport (IKEv2) : length null
WAN Miniport (PPTP) : length null
WAN Miniport (PPPOE) : length null
WAN Miniport (IP) : length 0
WAN Miniport (IPv6) : length 0
WAN Miniport (Network Monitor) : length 0
Microsoft Kernel Debug Network Adapter : length 0
RAS Async Adapter : length null
Oracle VM Virtual Ethernet Adapter : length 6
Oracle VM Virtual Ethernet Adapter #2 : length 6
Microsoft ISATAP Adapter #3 : length null
WAN Miniport (IP)-WFP Native MAC Layer LightWeight Filter-0000 : length 0
WAN Miniport (IP)-QoS Packet Scheduler-0000 : length 0
WAN Miniport (IPv6)-WFP Native MAC Layer LightWeight Filter-0000 : length 0
WAN Miniport (IPv6)-QoS Packet Scheduler-0000 : length 0
WAN Miniport (Network Monitor)-WFP Native MAC Layer LightWeight Filter-0000 : length 0
WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000 : length 0
Oracle VM Virtual Ethernet Adapter-WFP Native MAC Layer LightWeight Filter-0000 : length 6
Oracle VM Virtual Ethernet Adapter-QoS Packet Scheduler-0000 : length 6
Oracle VM Virtual Ethernet Adapter-WFP 802.3 MAC Layer LightWeight Filter-0000 : length 6

Comments
Verified on winodws 8 with test/java/net/NetworkInterface/Test.java $ S:/jdk/re/9/promoted/all/b32/binaries/windows-i586/bin/java -Djava.net.preferIPv4Stack=true Test lo /127.0.0.1 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net0 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net1 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net2 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net3 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. ppp0 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth0 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth1 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth2 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth3 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. ppp1 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth4 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth5 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net4 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net5 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth6 /10.133.141.229 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net6 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth7 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. net7 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth8 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth9 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth10 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth11 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth12 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. eth13 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. getHardwareAddress() test passed. Miscellenous tests: getByName(null) test passed. getByInetAddress(null) test passed. getByName(<unknown>) test passed. getByName(getByInetAddress(<unknown>) test passed. $ S:/jdk/re/9/promoted/all/b31/binaries/windows-i586/bin/java -Djava.net.preferIPv4Stack=true Test ........ eth0 getInetAddresses() test passed. equals() tests passed. hashCode() test passed. Exception in thread "main" java.lang.Exception: getHardwareAddress returned 0 le ngth byte array at Test.main(Test.java:83)
05-11-2014