Что ж, в своем приложении я использую некоторый код для обнаружения всех доступных устройств в локальной сети. Теперь я хочу получить MAC-адрес устройства, используя локальный IP-адрес.
Хочу примерно так: getMacAddress("192.168.1.23")
public static String getMacAddress(String ip)
{
String macAddress = ...
return macAddress;
}
Я нашел это для получения моего собственного MAC-адреса, а как насчет остальных IP-адресов в локальной сети?
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String address = info.getMacAddress();




Эта функция работает только для получения вашего собственного MAC, но даже в этом случае она имеет серьезные ограничения на современном Android. То, что вы хотите, - это не функция Android.
Есть много приложений для Android, которые могут это сделать, например, fing или другие приложения для игровых магазинов. Так как они это делают?
На какой версии Android вы их тестировали? Начиная с версии 6.0, вы даже не можете получить свой собственный MAC-адрес - он возвращает жестко запрограммированный 02: 00: 00: 00: 00: 00
/proc/net/arp - это локальный кэш ARP, в котором, по крайней мере, есть кэшированные записи (которые могут быть отключены).
protected String getMacAddress(String ipAddress) {
try {
BufferedReader br = new BufferedReader(new FileReader(new File("/proc/net/arp")));
String line;
while((line = br.readLine()) != null) {
if (line.contains(ipAddress)) {
/* this string still would need to be sanitized */
return line;
}
}
System.out.println(output);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
в качестве альтернативы можно сканировать весь сегмент локальной сети -
или получить кэш ARP с локального сетевого маршрутизатора.
Ссылка: Как я могу узнать количество устройств, подключенных через точку доступа телефона?
вы можете подсчитать подключенные устройства на точке доступа и получить MAC-адрес оборудования по ссылке ниже на android: http://www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address-of-a-remote-host/
код из ссылки выше:
/**
* Try to extract a hardware MAC address from a given IP address using the
* ARP cache (/proc/net/arp).<br>
* <br>
* We assume that the file has this structure:<br>
* <br>
* IP address HW type Flags HW address Mask Device
* 192.168.18.11 0x1 0x2 00:04:20:06:55:1a * eth0
* 192.168.18.36 0x1 0x2 00:22:43:ab:2a:5b * eth0
*
* @param ip
* @return the MAC from the ARP cache
*/
public static String getMacFromArpCache(String ip) {
if (ip == null)
return null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null) {
String[] splitted = line.split(" +");
if (splitted != null && splitted.length >= 4 && ip.equals(splitted[0])) {
// Basic sanity check
String mac = splitted[3];
if (mac.matches("..:..:..:..:..:..")) {
return mac;
} else {
return null;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
or if u have problem on code try below code:
public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) {
ArrayList<InetAddress> ret = new ArrayList<InetAddress>();
LoopCurrentIP = 0;
String IPAddress = "";
String[] myIPArray = YourPhoneIPAddress.split("\\.");
InetAddress currentPingAddr;
for (int i = 0; i <= 255; i++) {
try {
// build the next IP address
currentPingAddr = InetAddress.getByName(myIPArray[0] + "." +
myIPArray[1] + "." +
myIPArray[2] + "." +
Integer.toString(LoopCurrentIP));
ad = currentPingAddr.toString(); /////////////////
Log.d("MyApp",ad); //////////////
// 50ms Timeout for the "ping"
if (currentPingAddr.isReachable(50)) {
ret.add(currentPingAddr);
ad = currentPingAddr.toString(); /////////////////
Log.d("MyApp",ad); //////////////
}
} catch (UnknownHostException ex) {
} catch (IOException ex) {
}
LoopCurrentIP++;
}
return ret;
}
Описанный метод получения вашего собственного MAC-адреса не работает с Android 6. Метод всегда возвращает постоянное значение «02: 00: 00: 00: 00: 00».