找到连接到同一Wifi网络的所有设备的MAC地址

时间:2015-08-07 05:38:45

标签: java ping router mac-address arp

我正在尝试构建一个软件,用于检查连接到家庭网络的设备,并每10分钟左右返回一次设备的MAC地址列表。

我的方法是ping网络上所有可能的IP地址,然后调用“arp -a”。

以下代码用于查找设备是否在IP地址上注册,但我不知道如何从中获取MAC地址。

 session.onStateChanged(new Listener<Session>() {
    public void onEvent(final Session session) {
        print("Session state: " + session.getState());
    }
 });

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

试试这个one

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

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();

    }

   }

}

NetworkInterfaceNetworkInterface.getHardwareAddress()方法只允许访问localhost MAC地址,而不是远程主机MAC地址。

注意:您无法在远程为PC或设备在java中执行此操作。但是您可以使用C#和WMI来完成此操作 - WMI with netowrk in .NET language

答案 1 :(得分:0)

您一味地假设IPV4,这几天已经不那么合理了。

您正在尝试挖掘路由器和接入点首先没有充分理由公开的信息(至少不是针对那些不会通过以下方式验证自己为管理员身份的机器人)路由器或访问点的管理页面的访问权限。