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.