package io.evercam.network; import io.evercam.network.discovery.Device; import io.evercam.network.discovery.DiscoveredCamera; import io.evercam.network.discovery.NetworkInfo; import io.evercam.network.discovery.ScanRange; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; public class Main { private static final String ARG_IP = "-ip"; private static final String ARG_SUBNET_MASK = "-m"; /** * Discover all cameras in local network and print them in console * * @param args * pass parameter -v/--verbose to enable verbose logging */ public static void main(String[] args) { String ip = ""; String subnetMask = ""; if (args.length > 0) { List<String> argsArray = Arrays.asList(args); if (argsArray.contains("-v") || argsArray.contains("--verbose")) { Constants.ENABLE_LOGGING = true; } if (argsArray.contains(ARG_IP) && argsArray.contains(ARG_SUBNET_MASK)) { int ipIndex = argsArray.indexOf(ARG_IP) + 1; int subnetIndex = argsArray.indexOf(ARG_SUBNET_MASK) + 1; ip = argsArray.get(ipIndex); subnetMask = argsArray.get(subnetIndex); } } if (ip.isEmpty()) ip = NetworkInfo.getLinuxRouterIp(); if (subnetMask.isEmpty()) subnetMask = NetworkInfo.getLinuxSubnetMask(); // String deviceIp = ""; // String subnetMask = ""; // try // { // NetworkInterface networkInterface = // NetworkInfo.getNetworkInterfaceByName("wlan0"); // deviceIp = NetworkInfo.getIpFromInterface(networkInterface); // subnetMask = // IpTranslator.cidrToMask(NetworkInfo.getCidrFromInterface(networkInterface)); // } // catch (Exception e) // { // // TODO: handle exception // } EvercamDiscover.printLogMessage("Router IP address: " + ip + " subnet mask: " + subnetMask); EvercamDiscover.printLogMessage("Scanning..."); try { ScanRange scanRange = new ScanRange(ip, subnetMask); DiscoveryResult discoveryResult = new EvercamDiscover() .withDefaults(true).discoverAllLinux(scanRange); ArrayList<DiscoveredCamera> cameraList = discoveryResult .getCameras(); ArrayList<Device> nonCameraList = discoveryResult.getOtherDevices(); EvercamDiscover.printLogMessage("Scanning finished, found " + cameraList.size() + " cameras and " + nonCameraList.size() + " other devices."); printAsJson(cameraList, nonCameraList); EvercamDiscover.printLogMessage("On normal completion: 0"); System.exit(0); } catch (Exception e) { if (Constants.ENABLE_LOGGING) { e.printStackTrace(); } EvercamDiscover.printLogMessage("On error: 1"); System.exit(1); } } public static void printAsJson(ArrayList<DiscoveredCamera> cameraList, ArrayList<Device> nonCameraList) { if (cameraList != null) { JSONArray cameraJsonArray = new JSONArray(); JSONArray nonCameraJsonArray = new JSONArray(); for (DiscoveredCamera camera : cameraList) { cameraJsonArray.put(camera.toJsonObject()); } for (Device device : nonCameraList) { nonCameraJsonArray.put(device.toJsonObject()); } JSONObject arrayJsonObject = new JSONObject(); arrayJsonObject.put("cameras", cameraJsonArray); arrayJsonObject.put("other_devices", nonCameraJsonArray); System.out.println(arrayJsonObject.toString(4)); } } }