@Override
        public void run() {

            if (cancelled) return;

            try {
                InetAddress ia = InetAddress.getByName(address);
                PingResult pingResult = Ping.onAddress(ia).setTimeOutMillis(timeOutMillis).doPing();
                if (pingResult.isReachable) {
                    Device device = new Device(ia);

                    // Add the device MAC address if it is in the cache
                    if (ipMacHashMap.containsKey(ia.getHostAddress())) {
                        device.mac = ipMacHashMap.get(ia.getHostAddress());
                    }

                    device.time = pingResult.timeTaken;
                    subnetDeviceFound(device);
                }
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
        }
Starts the scan to find other devices on the subnet

@param listener - to pass on the results
@return this object so we can call cancel on it if needed
library/src/main/java/com/stealthcopter/networktools/SubnetDevices.java