Как сделать приложение для Android, чтобы получить IP-адрес компьютера от моего устройства Android, подключенного к тому же Wi-Fi - PullRequest
3 голосов
/ 08 марта 2019

Я хочу сделать приложение для Android, чтобы найти IP-адрес всех подключенных устройств, подключенных к одному и тому же Wi-Fi. Я попробовал это:

for (int i = lower; i <= upper; i++) {
    String host = subnet + i;

    try {
        InetAddress inetAddress = InetAddress.getByName(host);
        if (inetAddress.isReachable(timeout)){
            publishProgress(inetAddress.toString());
        }

    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Но он может получить только IP-адрес подключенного мобильного телефона, а не ПК. Как также получить IP-адрес подключенного компьютера?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Многие сети полностью запрещают эту практику, известную как «беспроводная изоляция» или «изоляция клиента», которая экономит батарею, повышает пропускную способность, улучшает конфиденциальность, если сеть общедоступна, за счет того, что одному клиенту трудно найти другие хосты в той же WLAN.

Для остальных из них пингование всех адресов в подсети, как правило, будет лучшим способом, даже если он будет немного медленным. Ваш код выглядит нормально, при условии, что строка subnet оканчивается точкой.

Все это бессмысленно, конечно, для IPv6.

0 голосов
/ 08 марта 2019

Попробуйте

public ArrayList<String> getClientList() {
    ArrayList<String> clientList = new ArrayList<>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] clientInfo = line.split(" +");
            String mac = clientInfo[3];
            if (mac.matches("..:..:..:..:..:..")) { // To make sure its not the title
                clientList.add(clientInfo[0]);
            }
        }
    } catch (java.io.IOException aE) {
        aE.printStackTrace();
        return null;
    }
    return clientList;
}

и используйте вот так

ArrayList<String> list = getClientList();
        for (String ip:list) {
            Log.e(TAG,ip);
        }

Результат:

192.168.1.9 192.168.1.1 192.168.1.5

также проверьте вопрос

...