package io.evercam.network.discovery; public class ScanRange { private long routerIp; private String routerIpString; private long scanStart; private long scanEnd; private int cidr; public ScanRange(String routerIp, String subnetMask) throws Exception { this.routerIp = IpTranslator.getUnsignedLongFromIp(routerIp); this.routerIpString = routerIp; cidr = IpTranslator.maskIpToCidr(subnetMask); setUpStartAndEnd(cidr); } // TODO: Temporary disabled this because get cidr from interface is not // working sometimes // public ScanRange(NetworkInterface networkInterface) throws Exception // { // scanIp = IpTranslator.getUnsignedLongFromIp(NetworkInfo // .getIpFromInterface(networkInterface)); // int cidr = NetworkInfo.getCidrFromInterface(networkInterface); // setUpStartAndEnd(cidr); // } private void setUpStartAndEnd(int cidr) { int shift = (32 - cidr); if (cidr < 31) { scanStart = (routerIp >> shift << shift) + 1; scanEnd = (scanStart | ((1 << shift) - 1)) - 1; } else { scanStart = (routerIp >> shift << shift); scanEnd = (scanStart | ((1 << shift) - 1)); } } /** * @return true if the given IP is in this scan range */ public boolean containIp(String ip) throws Exception { int shift = (32 - cidr); long ipLong = IpTranslator.getUnsignedLongFromIp(ip); return scanStart == ((ipLong >> shift << shift) + 1); } public int size() { return (int) (scanEnd - scanStart + 1); } protected long getRouterIp() { return routerIp; } public String getRouterIpString() { return routerIpString; } protected long getScanStart() { return scanStart; } protected long getScanEnd() { return scanEnd; } protected void setScanIp(long scanIp) { this.routerIp = scanIp; } protected void setScanStart(long scanStart) { this.scanStart = scanStart; } protected void setScanEnd(long scanEnd) { this.scanEnd = scanEnd; } }