0

我有一个java代码,它将关联计算机(本地主机除外)的所有IP地址和MAC ID返回到控制台。每个 IP 和关联的 MAC ID 将显示在新行中。我们可以将每一行存储在每个新变量中,比如 IP1、MACID1、IP2、MACID2 ... 吗?等待解决。提前致谢。

这是我的代码:

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

public class NIC {

public static void main(String args[]) throws Exception {

    List<InetAddress> addrList = new ArrayList<InetAddress>();
    Enumeration<NetworkInterface> interfaces = null;
    try {
        interfaces = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }

    InetAddress localhost = null;

    try {
        localhost = InetAddress.getByName("127.0.0.1");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

    while (interfaces.hasMoreElements()) {
        NetworkInterface ifc = interfaces.nextElement();
        Enumeration<InetAddress> addressesOfAnInterface = ifc.getInetAddresses();

        while (addressesOfAnInterface.hasMoreElements()) {
            InetAddress address = addressesOfAnInterface.nextElement();

            if (!address.equals(localhost) && !address.toString().contains(":")) {
                addrList.add(address);
                //System.out.println("\n");
                System.out.println(address.getHostAddress() + "\r");
                //System.out.println("\n");

try {
            //InetAddress address = InetAddress.getLocalHost();
            InetAddress address1 = InetAddress.getByName(address.getHostAddress());

            /*
             * Get NetworkInterface for the current host and then read
             * the hardware address.
             */
            NetworkInterface ni = 
                    NetworkInterface.getByInetAddress(address1);
            if (ni != null) {
                byte[] mac = ni.getHardwareAddress();
                if (mac != null) {
                    /*
                     * Extract each array of mac address and convert it 
                     * to hexa 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) ? "-" : "" +"\n");
                    }
                } 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 e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        }
            }
        }
    }

}
}
4

2 回答 2

1

您应该能够随时将每个 IP/MAC 地址添加到 ArrayList 中。然后当你完成时,你会把它们都放在一个地方

于 2012-10-04T04:40:30.480 回答
1

使用地图怎么样??如果是这样,您可以将您的 IP 地址和 MAC ID 一起保存。

Map<String,String> addressMap = new HashMap<String,String>();

        String macStr = "";
        for (int i = 0; i < mac.length; i++) {
            System.out.format("%02X%s",mac[i], (i < mac.length - 1) ? "-" : "" +"\n");
            macStr += String.format("%02X%s",mac[i], (i < mac.length - 1) ? "-" : "" +"\n");
        }
        System.out.println("macStr" + macStr);
        addressMap.put(address.getHostAddress(), macStr);

迭代地图。

for (Map.Entry<String, String> entry : addressMap.entrySet())
        {
            System.out.println(entry.getKey() + "/" + entry.getValue());
        }

整个代码

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

public class NIC {

    public static void main(String args[]) throws Exception {

        List<InetAddress> addrList = new ArrayList<InetAddress>();
        Map<String,String> addressMap = new HashMap<String,String>();

        Enumeration<NetworkInterface> interfaces = null;
        try {
            interfaces = NetworkInterface.getNetworkInterfaces();
        } catch (SocketException e) {
            e.printStackTrace();
        }

        InetAddress localhost = null;

        try {
            localhost = InetAddress.getByName("127.0.0.1");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

        while (interfaces.hasMoreElements()) {
            NetworkInterface ifc = interfaces.nextElement();
            Enumeration<InetAddress> addressesOfAnInterface = ifc.getInetAddresses();

            while (addressesOfAnInterface.hasMoreElements()) {
                InetAddress address = addressesOfAnInterface.nextElement();

                if (!address.equals(localhost) && !address.toString().contains(":")) {
                    addrList.add(address);
                    //System.out.println("\n");
                    System.out.println(address.getHostAddress() + "\r");
                    //System.out.println("\n");

                    try {
                        //InetAddress address = InetAddress.getLocalHost();
                        InetAddress address1 = InetAddress.getByName(address.getHostAddress());

                        /*
                         * Get NetworkInterface for the current host and then read
                         * the hardware address.
                         */
                        NetworkInterface ni = 
                                NetworkInterface.getByInetAddress(address1);
                        if (ni != null) {
                            byte[] mac = ni.getHardwareAddress();
                            if (mac != null) {
                                /*
                                 * Extract each array of mac address and convert it 
                                 * to hexa with the following format 
                                 * 08-00-27-DC-4A-9E.
                                 */

                                String macStr = "";
                                for (int i = 0; i < mac.length; i++) {
                                    macStr += String.format("%02X%s",mac[i], (i < mac.length - 1) ? "-" : "" +"\n");
                                }
                                addressMap.put(address.getHostAddress(), macStr);
                            } 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 e) {
                        e.printStackTrace();
                    } catch (SocketException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        for (Map.Entry<String, String> entry : addressMap.entrySet())
        {
            System.out.println(entry.getKey() + "/" + entry.getValue());
        }
    }
}
于 2012-10-04T05:17:40.653 回答