Wi-Fi-модем - как получить список подключенных клиентов - PullRequest
4 голосов
/ 03 апреля 2012

Можно ли получить список подключенных MAC-адресов, когда мой телефон находится в режиме модема Wi-Fi?

Ответы [ 4 ]

9 голосов
/ 19 апреля 2012

Во-первых, у вас должно быть рутированное устройство.Когда это будет сделано, просто прочитайте файл dnsmasq.leases .Обычно он размещается по адресу: / data / misc / dhcp / dnsmasq.leases .Структура файла довольно проста - каждая строка представляет собой сводку подключенного пользователя.Сводка имеет несколько полей, включая MAC.Я не нашел возможности получить MAC без рута.Пожалуйста, поправьте меня, если я ошибаюсь.

7 голосов
/ 29 марта 2013

Чтение /proc/net/arp предоставит информацию как для статических клиентов, так и для клиентов DHCP, которые общались с устройством в течение последних 60 секунд (настроено в /proc/sys/net/ipv4/neigh/wl0.1/gc_stale_time, где wl0.1 - это интерфейс беспроводной сети на моем телефоне).

Доступно и для пользователей без полномочий root.

1 голос
/ 10 ноября 2016
@SuppressWarnings("ConstantConditions")
public static String getClientMacByIP(String ip)
{
    String res = "";
    if (ip == null)
        return res;

    String flushCmd = "sh ip -s -s neigh flush all";
    Runtime runtime = Runtime.getRuntime();
    try
    {
        runtime.exec(flushCmd,null,new File("/proc/net"));
    }

    BufferedReader br;
    try
    {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null)
        {
            String[] sp = line.split(" +");
            if (sp.length >= 4 && ip.equals(sp[0]))
            {Assistance.Log(sp[0]+sp[2]+sp[3],ALERT_STATES.ALERT_STATE_LOG);
                String mac = sp[3];
                if (mac.matches("..:..:..:..:..:..") && sp[2].equals("0x2"))
                {
                    res = mac;
                    break;
                }
            }
        }

        br.close();
    }
    catch (Exception e)
    {}

    return res;
}

// --------------------------------------------------------

@SuppressWarnings("ConstantConditions")
public static String getClientIPByMac(String mac)
{
    String res = "";
    if (mac == null)
        return res;

    String flushCmd = "sh ip -s -s neigh flush all";
    Runtime runtime = Runtime.getRuntime();
    try
    {
        runtime.exec(flushCmd,null,new File("/proc/net"));
    }

    BufferedReader br;
    try
    {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null)
        {
            String[] sp = line.split(" +");
            if (sp.length >= 4 && mac.equals(sp[3]))
            {
                String ip = sp[0];
                if (ip.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}") && sp[2].equals("0x2"))
                {
                    res = ip;
                    break;
                }
            }
        }

        br.close();
    }
    catch (Exception e)
    {}

    return res;
}
0 голосов
/ 12 ноября 2016
public static ArrayList<String> getConnectedDevicesMac()
{
    ArrayList<String> res = new ArrayList<String>();
    //NetManager.updateArpFile();

    BufferedReader br;
    try
    {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        line = br.readLine();
        while ((line = br.readLine()) != null)
        {
            String[] sp = line.split(" +");
            if (sp[3].matches("..:..:..:..:..:.."))
                res.add(sp[3]);
        }

        br.close();
    }
    catch (Exception e)
    {}

    return res;
}
...