The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Saurabh Gupta
Kilo Patron
Kilo Patron

We can create a client callable script include for that

 

var onDemandDiscoveryUtil = Class.create();
onDemandDiscoveryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	checkIP: function(ip) {
		ip = ip ? ip : this.getParameter('sysparm_ip');
		ip = String(ip);
		var range_obj = {
			within_range: false,
			range: ''
		};
		rangeArray = this._myIPSubnet()
			.split(',')
			.filter(function(x) {
			return x;
		});

		for (var i = 0; i < rangeArray.length; i++) {
			if (this._isIp4InCidr(ip, rangeArray[i])) {
				range_obj.within_range = true;
				range_obj.range = rangeArray[i];
				break;
			}
		}
		return JSON.stringify(range_obj);
	},
	_ip4ToInt: function(ip) 
	{
		return ip.split('.').reduce(function(integer, oct) 
									{
			return (integer << 8 )  + parseInt(oct, 10);
		}, 0) >>> 0;
	},
	_isIp4InCidr: function(ip, cidr) {
		var split = cidr.split('/');
		var range = split[0];
		var bits = split[1];
		var mask = -1 << (32 - bits);

		// check if the masked IP is the same as the range
		return (this._ip4ToInt(ip) & mask) == (this._ip4ToInt(range));
	},
	_myIPSubnet:function()
	{
		var ipsunetRet=[];
		var ipsubnet=new GlideRecord('discovery_range_item');
		ipsubnet.addEncodedQuery("active=true^summaryISNOTEMPTY^type=IP Network");
		ipsubnet.query();
		while(ipsubnet.next())
		{
			ipsunetRet.push(ipsubnet.getValue('summary'));
		}
		return ipsunetRet.join(",");
	},
	ifNotInRange:function(ipAddresses)
	{
		var app=ipAddresses.split(",");
		var au=new ArrayUtil();
		var ips=au.unique(app);
		var retArr=[];
		for(var i=0;i<ips.length;i++)
		{
			var retStr=this.checkIP(ips[i]);
			var retObj=JSON.parse(retStr);
			if(retObj.within_range==false)
				retArr.push(ips[i]);	
		}
		return JSON.stringify(retArr); 
		
	},


	type: 'onDemandDiscoveryUtil'
});

 

 

 

//Calling fuction

var ips='10.143.98.67,10.88.132.143,10.255.133.134,10.88.131.120,10.255.133.154,10.255.133.147,172.16.2.1,10.143.139.163,10.143.120.131,10.143.180.117172.16.2.1,10.143.50.195';
var api=new onDemandDiscoveryUtil();
gs.info("IPs Not in Range: "+api.ifNotInRange(ips))

 


Output: 

SaurabhGupta_0-1694930866015.png

 

C

If you found value in this blog/article, I'd be grateful if you could either bookmark it or mark it as helpful.