get Mac Address from InetAddress - Java Network

Java examples for Network:Mac Address

Description

get Mac Address from InetAddress

Demo Code

/* //w w  w .j  a va2 s .co  m
 * Copyright 2013 The Athena-Peacock Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Revision History
 * Author         Date            Description
 * ---------------   ----------------   ------------
 * Sang-cheon Park   2013. 7. 22.      First Draft.
 */
//package com.java2s;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] argv) throws Exception {
        System.out.println(getMacAddress());
    }

    public static String getMacAddress() throws Exception {
        return getMacAddress(InetAddress.getLocalHost());
    }

    public static String getMacAddress(InetAddress host) throws Exception {
        String macAddress = null;
        NetworkInterface iface = NetworkInterface.getByInetAddress(host);

        if (iface != null) {
            byte[] hardware = iface.getHardwareAddress();

            if (hardware != null && hardware.length == 6
                    && hardware[1] != (byte) 0xff) {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < hardware.length; i++) {
                    sb.append(String.format("%02x%s", hardware[i],
                            (i < hardware.length - 1) ? ":" : ""));
                }

                macAddress = sb.toString().toLowerCase()
                        .replaceAll(":", "").replaceAll("-", "");
            }
        }

        return macAddress;
    }

    public static String getMacAddress(String name) throws Exception {
        String macAddress = null;
        List<String> macAddressList = null;
        Set<String> macAddressSet = null;
        Enumeration<NetworkInterface> ifs = NetworkInterface
                .getNetworkInterfaces();

        if (ifs != null) {
            macAddressSet = new LinkedHashSet<String>();

            NetworkInterface nifs = null;
            while (ifs.hasMoreElements()) {
                nifs = ifs.nextElement();
                Enumeration<InetAddress> hosts = nifs.getInetAddresses();

                if (hosts != null) {
                    macAddress = null;

                    while (hosts.hasMoreElements()) {
                        macAddress = getMacAddress(hosts.nextElement());

                        if (macAddress != null) {
                            if (nifs.getName().equals(name)) {
                                return macAddress;
                            } else {
                                macAddressSet.add(macAddress);
                            }
                        }
                    }
                }
            }
        }

        if (macAddressSet == null) {
            return null;
        }

        macAddressList = new ArrayList<String>(macAddressSet);
        Collections.sort(macAddressList);
        Collections.reverse(macAddressList);

        return macAddressList.get(0);
    }
}

Related Tutorials