[removed] Is IP In One Of These Subnets?

前端 未结 6 550
独厮守ぢ
独厮守ぢ 2021-01-30 23:26

So I have ~12600 subnets:

eg. 123.123.208.0/20

and an IP.

I can use a SQLite Database or an array or whatever

There was a similar question asked

6条回答
  •  独厮守ぢ
    2021-01-31 00:12

    Try this:

    var ip2long = function(ip){
        var components;
    
        if(components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))
        {
            var iplong = 0;
            var power  = 1;
            for(var i=4; i>=1; i-=1)
            {
                iplong += power * parseInt(components[i]);
                power  *= 256;
            }
            return iplong;
        }
        else return -1;
    };
    
    var inSubNet = function(ip, subnet)
    {   
        var mask, base_ip, long_ip = ip2long(ip);
        if( (mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip=ip2long(mask[1])) >= 0) )
        {
            var freedom = Math.pow(2, 32 - parseInt(mask[2]));
            return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1);
        }
        else return false;
    };
    

    Usage:

    inSubNet('192.30.252.63', '192.30.252.0/22') => true
    inSubNet('192.31.252.63', '192.30.252.0/22') => false
    

提交回复
热议问题