2016-03-23
참고 : http://b1ix.net/240

위 참고 글은 php로 만들어진 소스이고, 이 글은 javascript로 만든 소스이다.
<script>

function long2ip(ip) 
{
    if (!isFinite(ip))  return false;
    return [ip >>> 24, ip >>> 16 & 0xFF, ip >>> 8 & 0xFF, ip & 0xFF].join('.');
}

/*function ip2long(IP) 
{
    var i = 0;
    IP = IP.match(/^([1-9]\d*|0[0-7]*|0x[\da-f]+)(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?/i); 

    if (!IP) return false; 

    IP[0] = 0;
    for (i = 1; i < 5; i += 1) {
        IP[0] += !! ((IP[i] || '').length);
        IP[i] = parseInt(IP[i]) || 0;
    }

    IP.push(256, 256, 256, 256);

    IP[4 + IP[0]] *= Math.pow(256, 4 - IP[0]);

    if (IP[1] >= IP[5] || IP[2] >= IP[6] || IP[3] >= IP[7] || IP[4] >= IP[8]) return false;

    return IP[1] * (IP[0] === 1 || 16777216) + IP[2] * (IP[0] <= 2 || 65536) + IP[3] * (IP[0] <= 3 || 256) + IP[4] * 1;
}
*/

function ip2long ( ip_address ) 
{  
    var output = false;  
    if ( ip_address.match ( /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ ) ) {  
      var parts = ip_address.split ( '.' );  
      var output = 0;  
      output = ( parts [ 0 ] * Math.pow ( 256, 3 ) ) +  
               ( parts [ 1 ] * Math.pow ( 256, 2 ) ) +  
               ( parts [ 2 ] * Math.pow ( 256, 1 ) ) +  
               ( parts [ 3 ] * Math.pow ( 256, 0 ) );  
    }  
      
    return output<<0;  
}  


document.write(ip2long('112.234.0.1'));

function ip_chk( ip, subnet, chk_ip)
{
    long_ip = ip2long(ip);
    long_subnet = ip2long(subnet);
    long_max = ip2long('255.255.255.255');
    long_chk_ip = ip2long(chk_ip);

    range_from = long_ip & long_subnet;

    range_bo = long_subnet ^ long_max;
    range_to = long_ip | range_bo;

    console.log( long_ip, range_from, range_to );

    if( long_chk_ip > range_from && long_chk_ip < range_to ) return 1;
    else return 0;
}

console.log(ip_chk('192.168.123.1', '255.255.255.252', '192.168.123.3'));
console.log(ip_chk('192.168.123.1', '255.0.0.0', '192.158.11.1'));
console.log(ip_chk('123.11.0.1', '255.255.255.252', '123.11.0.3'));
console.log(ip_chk('123.11.0.1', '255.0.0.0', '123.158.11.1'));

</script>
-1062700287 -1062700288 -1062700285
0
-1062700287 -1073741824 -1056964609
1
2064318465 2064318464 2064318467
0
2064318465 2063597568 2080374783
1