Android 10: Как получить MA C адрес из Socket / Client P C без / proc / net / arp - PullRequest
0 голосов
/ 28 мая 2020

Уже 2 дня ищу решение своей проблемы с MA C адресом подключенного сервера. В моем приложении «Remote for iTunes DJ & UpNext» мне нужен MA C адрес iTunes P C для функции WOL.

К сожалению, функция FileReader("/proc/net/arp") больше не работает с Android 10.

Я пробовал много таких вещей, как:

InetAddress address = socket.getInetAddress();
NetworkInterface network = NetworkInterface.getByInetAddress(address);
byte[] mac = network.getHardwareAddress();

... но в результате получаю только NULL ...

В Google Play I нашел такие приложения, как "Network Analyzer", с этим приложением. Я видел MA C адрес сервера iTunes P C.

Похоже, что есть способ получить MA C адрес устройство в сети.

Любая идея, как я могу получить адреса MA C?

Спасибо, Erdal

1 Ответ

0 голосов
/ 04 июня 2020

Я нашел решение со следующим кодом:

private static final String IP_CMD = "ip neighbor";
...
BufferedReader reader = null;

try {
    Process ipProc = Runtime.getRuntime().exec(IP_CMD);
    ipProc.waitFor();
    if (ipProc.exitValue() != 0) {
        throw new Exception("Unable to access ARP entries");
    }

    reader = new BufferedReader(new InputStreamReader(ipProc.getInputStream(), "UTF-8"));
    String line;
    while ((line = reader.readLine()) != null) {
        String[] neighborLine = line.split("\\s+");

        // We don't have a validated ARP entry for this case.
        if (neighborLine.length <= 4) {
            continue;
        }

        String ipaddr = neighborLine[0];
        InetAddress addr = InetAddress.getByName(ipaddr);
        if (addr.isLinkLocalAddress() || addr.isLoopbackAddress()) {
            continue;
        }

        String macAddress = neighborLine[4];
        ....
...