Now I could have just got the MAC address and used that to communicate with the server, but I wanted to take it to the extremes. Mainly because I wanted to obscure the communication with the previous methods of encryption so the server can identify which device is making a request.
For this I create a string using the devices host name and all the network interfaces connected to it with their MAC addresses. Although I might change this in the near future, at the moment, this gives a good length string for the server to identify the device.
Below is the code used to create this identity string.
public String host;
private void testMACAddress() {
try {
InetAddress ip = InetAddress.getLocalHost();
host = ip.getHostName();
Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
while (networks.hasMoreElements()) {
NetworkInterface network = networks.nextElement();
byte[] mac = network.getHardwareAddress();
if (mac != null) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
host += " " + network.getDisplayName() + " " + sb.toString();
}
}
} catch (UnknownHostException | SocketException e) {
System.out.println(e.getMessage());
}
}
As mentioned above, this identity string will then be encrypted and sent to the server. Further communication will commence if the server accepts it.
