Name

global.NetworkDiscoveryUtil

Description

This script is used as a helper for networking related operations Taken from MID script include

Script

var NetworkDiscoveryUtil = Class.create();

NetworkDiscoveryUtil.isBroadcastAddress = function(ipAddress, netmask) {
  ipAddress = NetworkDiscoveryUtil.stringIpToInt(ipAddress);
  netmask = NetworkDiscoveryUtil.stringIpToInt(netmask);

  var networkAddress = ipAddress & netmask;
  var netmaskCidr = NetworkDiscoveryUtil.netmaskToCidr(NetworkDiscoveryUtil.convertIntIpToDotRepresentation(netmask));
  var broadcastAddress = networkAddress | (~netmask);
  return netmaskCidr < 31 && ipAddress == (0xFFFFFFFF & broadcastAddress);
}

NetworkDiscoveryUtil.isNetworkAddress = function(ipAddress, netmask) {
  ipAddress = NetworkDiscoveryUtil.stringIpToInt(ipAddress);
  netmask = NetworkDiscoveryUtil.stringIpToInt(netmask);

  var networkAddress = ipAddress & netmask;
  var netmaskCidr = NetworkDiscoveryUtil.netmaskToCidr(NetworkDiscoveryUtil.convertIntIpToDotRepresentation(netmask));
  return netmaskCidr < 31 && ipAddress == (0xFFFFFFFF & networkAddress);
}

NetworkDiscoveryUtil.stringIpToInt = function(ip) {
  if (!ip)
  	return '';

  if (typeof ip === 'string' || ip instanceof String) {
  	var octets = ip.split('.');
  	return (((+octets[0])<<24)+((+octets[1])<<16)+((+octets[2])<<8)+(+octets[3]));
  }

  return ip;
}

NetworkDiscoveryUtil.doesIpContainedInNetwork = function(ip, mask, network) {
  return (network == (ip & mask)) &&
  	(!NetworkDiscoveryUtil.isBroadcastAddress(ip,mask));
}

NetworkDiscoveryUtil.getNetworkFromIpAndMask = function(address,netmask){

  var networkAsInt = '';

  if(address && netmask){
  	var addressAsLong = NetworkDiscoveryUtil.stringIpToInt(address);
  	var netmaskAsLong = NetworkDiscoveryUtil.stringIpToInt(netmask);

  	networkAsInt = (addressAsLong & netmaskAsLong);
  }

  return networkAsInt;
}

NetworkDiscoveryUtil.netmaskToCidr = function (netmask) {
  var cidr = 0;
  var parts = netmask.split('.');
  var part;
  for (var i=0; i < parts.length; i++) {
  	part = Number(parts[i]);
  	while (0x80 == (part & 0x80)) {
  		++cidr;
  		part = part << 1 & 0xff;
  	}
  }
  return(String(cidr));
}

NetworkDiscoveryUtil.extractFirstMatchWithRegex = function(stringToMatch,regex)
{
  var regexObject = new RegExp(regex);
  var match = stringToMatch.match(regexObject);
  return match ? match[1] : null;
}

NetworkDiscoveryUtil.dottedIpv6toHex = function(dottedIpv6){
  var groupAsString = '';
  var partAsInt;
  var partAsString;
  var ipv6Hex = '';
  var parts;

  if (dottedIpv6 == null){
  	return null;
  }

  parts = dottedIpv6.split(".");

  if (parts.length != 16){
  	return null;
  }

  for (var i=0; i < parts.length; i++) {
  	partAsString = parts[i];
  	partAsInt = parseInt(partAsString);

  	if (partAsString > 255 ||  partAsString < 0)
  		return null;

  	groupAsString += partAsInt.toString(16);

  	if (i%2 == 1) {
  		if(parseInt(groupAsString) == 0){
  			groupAsString = '';
  		}

  		ipv6Hex += groupAsString + ":";
  		groupAsString = '';
  	}
  }
  return (ipv6Hex.slice(0,-1));
}

NetworkDiscoveryUtil.netmaskFromCidrBitCount = function(bitCount) {
  var mask=[],
  	i;

  for(i = 0; i < 4; i++) {
  	var n = Math.min(bitCount, 8);
  	mask.push(256 - Math.pow(2, 8 - n));
  	bitCount -= n;
  }
  return mask.join('.');
}

NetworkDiscoveryUtil.convertIntIpToDotRepresentation = function(ipAsInt) {
  return [
  	(ipAsInt >>> 24) & 0xFF,
  	(ipAsInt >>> 16) & 0xFF,
  	(ipAsInt >>>  8) & 0xFF,
  	(ipAsInt >>>  0) & 0xFF
  ].join('.');
}

NetworkDiscoveryUtil.numIpsFromCidrBitCount = function(bitCount) {
  return (Math.pow(2, 32 - bitCount) - 2);
}

NetworkDiscoveryUtil.calculateBroadcastAddress = function(network, netmask) {
  var ipAsInt = NetworkDiscoveryUtil.stringIpToInt(network),
  	netmaskAsInt = NetworkDiscoveryUtil.stringIpToInt(netmask),
  	broadcastAsInt = (ipAsInt | ~netmaskAsInt) >>> 0; //to make it unsign

  return NetworkDiscoveryUtil.convertIntIpToDotRepresentation(broadcastAsInt);
}

NetworkDiscoveryUtil.calculateNetworkAddress = function(network, netmask) {
  var ipAsInt = NetworkDiscoveryUtil.stringIpToInt(network),
  	netmaskAsInt = NetworkDiscoveryUtil.stringIpToInt(netmask),
  	networkAsInt = (ipAsInt & netmaskAsInt) >>> 0; //to make it unsign

  return NetworkDiscoveryUtil.convertIntIpToDotRepresentation(networkAsInt);
}

NetworkDiscoveryUtil.prototype = {
  type: "NetworkDiscoveryUtil"
};

Sys ID

c7c1c0370f32b3001b54fe39b4767e87

Offical Documentation

Official Docs: