Hay alguna forma de obtener una lista de conectados direcciones MAC cuando mi teléfono es el Wi-Fi tethering modo?

Por favor revise este enlace. stackoverflow.com/questions/21522961/…

OriginalEl autor Fiur | 2012-04-03

4 Comentarios

  1. 9

    En primer lugar, usted debe tener un dispositivo de raíces. Cuando se hace que acaba de leer dnsmasq.arrendamientos archivo. Normalmente se coloca en: /data/misc/dhcp/dnsmasq.arrendamientos.
    Una estructura de los archivos es muy sencillo: cada línea es un resumen de un usuario conectado. El resumen tiene varios campos como el de MAC.
    No he encontrado una posibilidad de obtener un MAC sin necesidad de root. Por favor me corrija si estoy equivocado.

    ¿qué acerca de los clientes conectados con ip estática dhcp, no aparecerán en el dnsmasq, ¿tiene usted alguna idea?
    No hay ninguna clase de android paquete para hacer este trabajo?

    OriginalEl autor Pavel

  2. 7

    Lectura /proc/net/arp proporcionaría la información tanto estáticas como clientes DHCP que se han comunicado con el dispositivo durante los últimos 60 segundos (configurado en /proc/sys/net/ipv4/neigh/wl0.1/gc_stale_time donde wl0.1 es la interfaz de red inalámbrica en mi teléfono).

    Está disponible para usuarios no root también.

    Es cierto que bajo /proc/net/arp no es siempre la actualización de la lista cuando el dispositivo (cliente) desconectado de la AP @Romano?

    OriginalEl autor Roman

  3. 1
    @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;
    }
    Si bien puede haber algunos problemas con esta respuesta desde el punto de vista de la «sh ip -s -s relincho vaciar todos los comandos», que conduce en la dirección correcta. Si está conectado, /proc/net/arp debe tener la actual neighbords en el archivo, y este archivo es accesible desde la no-raíces de dispositivos, haciendo de esta solución viable para leer este archivo, y analizar fuera de la dirección del p2p-wlan0-0 dispositivo, que en mi dispositivo siempre está en el 192.168.49.* rango de direcciones.

    OriginalEl autor Ali Bagheri

  4. 0
    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;
    }
    Por favor proporcione alguna información adicional sobre lo que hace el código. Es difícil decir para cualquier persona nueva lo que está pasando.

    OriginalEl autor Ali Bagheri

Dejar respuesta

Please enter your comment!
Please enter your name here