How do I get MAC address of a host?

Previously for obtaining a MAC address we need to use a native code as a solution. In JDK 1.6 a new method is added in the java.net.NetworkInterface class, this method is getHardwareAddress().

package org.kodejava.net;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

public class MacAddress {
    public static void main(String[] args) {
        try {
            // InetAddress address = InetAddress.getLocalHost();
            InetAddress address = InetAddress.getByName("192.168.0.105");

            /*
             * Get NetworkInterface for the current host and then read
             * the hardware address.
             */
            NetworkInterface ni = NetworkInterface.getByInetAddress(address);
            if (ni != null) {
                byte[] mac = ni.getHardwareAddress();
                if (mac != null) {
                    /*
                     * Extract each array of mac address and convert it
                     * to hexadecimal with the following format
                     * 08-00-27-DC-4A-9E.
                     */
                    for (int i = 0; i < mac.length; i++) {
                        System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
                    }
                } else {
                    System.out.println("Address doesn't exist or is not accessible.");
                }
            } else {
                System.out.println("Network Interface for the specified address is not found.");
            }
        } catch (UnknownHostException | SocketException e) {
            e.printStackTrace();
        }
    }
}
Wayan

4 Comments

  1. I’m skeptic to this code example. Granted, this is absolutely something that runs and will get you the mac address on your local interface if that is the IP address you supply. However obtaining “a mac address” generally on your local subnet you would use an ARP request and I was just researching how to to that for a java app and as I understand you can’t do it natively in Java, please enlighten me if I’m wrong.

    Did you mean to write the post “How do I get MY mac address?” or am I missing something?

    Reply
    • Hi Trent,

      The parameter definition of the method is System.out.format(String format, Object... args) it means that it takes a string as the first parameter and a variable number of objects as the following parameters. The ... symbol also called a varargs, it allows you to pass an arbitrary number of values to a method.

      Reply

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.