Прошу прощения за мой плохой английский. Есть простой Java-сервер для управления умным домом. Я хочу организовать проверку безопасности, используя список доверенных MAC-адресов. Сервер примет, если MAC-адрес клиента является доверенным.
Я столкнулся с проблемой. Я вообще не могу получить клиентский Mac и понятия не имею, как это сделать. Помоги мне, пожалуйста :(
PS: я использую стандартные библиотеки java nio.
Мой код:
ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
SocketChannel client = ssc.accept();
char [] tempIP = client.socket().getInetAddress().toString().toCharArray();
StringBuilder temp = new StringBuilder ();
for (char ch : tempIP) {
if (ch == '/')
continue;
temp.append(ch);
}
String clientIP = temp.toString();
System.out.println(clientIP);
InetAddress address = InetAddress.getByName(clientIP);
NetworkInterface ni = NetworkInterface.getByInetAddress(address);
if (ni != null) {
byte [] mac = ni.getHardwareAddress();
if (mac != null) {
for (int i=0; i!=mac.length; i++) {
System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
}
} else {
System.out.println("Address doen't not exist or is not accessiable");
}
} else {
System.out.println("Network Interface for the specified address is not found!");
}
client.configureBlocking(false);
client.setOption(StandardSocketOptions.SO_KEEPALIVE, true);
client.setOption(StandardSocketOptions.TCP_NODELAY, true);
client.register(selector, SelectionKey.OP_READ);
System.out.println("Client is connected!");
NetworkInterface
по IP-адресу клиента на стороне сервера. Вы должны найтиNetworkInterface
на стороне клиента и отправить клиентский Mac на сервер через сокет. - person zhh   schedule 22.07.2018