Я создаю проект Java, который показывает имя хоста, IP-адрес и MAC-адрес подключенных устройств с использованием Java.Я использую InetAddress, но он показывает только Ip и имя хоста подключенных компьютеров без MAC, а также не видит подключенные мобильные телефоны, такие как устройства Android.
Я испробовал почти все решения на StackOverFlow, но ни одна из тем не работает
public class HostDiscovery
{
private String address;
private int discoveryTimeout;
HostDiscovery( String address, int discoveryTimeout)
{
this.address = address;
this.discoveryTimeout = discoveryTimeout;
}
public Future<HostDiscoveryResult> multithreadedHostDicovery(final ExecutorService exService){
return exService.submit(() -> {
try
{
String HostName = null;
String MacAddress = null;
boolean result = InetAddress.getByName(address).isReachable(discoveryTimeout);
InetAddress ip = InetAddress.getByName(address);
if (result)
{
HostName = InetAddress.getByName(address).getHostName();
if(HostName.endsWith(".mshome.net")){
HostName = HostName.replaceAll(".mshome.net", "");
}
MacAddress = getMacAddress(ip);
}
return new HostDiscoveryResult(address, result, HostName, MacAddress);
} catch (SocketException ex)
{
return new HostDiscoveryResult(address, false, null, null);
}
});
}
private static String getMacAddress(InetAddress ip) throws UnknownHostException {
String address = null;
try {
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
address = sb.toString();
} catch (SocketException ex) {
ex.printStackTrace();
}
return address;
}
}