123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- (function ()
- {
- var ipaddr = require('ipaddr.js'),
- ip6 = require('ip6');
-
- function isIP(addr)
- {
- return ipaddr.isValid(addr);
- }
-
- function isRange(range)
- {
- try {
- var cidr = ipaddr.parseCIDR(range);
- return true;
- } catch(err) {
- return false;
- }
-
- }
-
- function ver(addr)
- {
- try {
- var parse_addr = ipaddr.parse(addr);
- var kind = parse_addr.kind();
-
- if (kind === 'ipv4')
- {
- return 4; //IPv4
- }
- else if (kind === 'ipv6')
- {
- return 6; //IPv6
- }
- else
- {
- return 0; //not 4 or 6
- }
-
- }
- catch(err) {
- return 0; //not 4 or 6
- }
-
- }
-
- function isV4(addr)
- {
- return (ver(addr) === 4);
- }
-
- function isV6(addr)
- {
- return (ver(addr) === 6);
- }
-
- function storeIP(addr)
- {
- try {
- var parse_addr = ipaddr.parse(addr);
- var kind = parse_addr.kind();
-
- if (kind === 'ipv4') //is a plain v4 address
- {
- return addr;
- }
- else if (kind === 'ipv6')
- {
- if (parse_addr.isIPv4MappedAddress()) //convert v4 mapped to v6 addresses to a v4 in it's original format
- {
- return parse_addr.toIPv4Address().toString();
- }
- else //is a v6, abbreviate it
- {
- return ip6.abbreviate(addr);
- }
-
- }
- else
- {
- return null; //invalid IP address
- }
-
- }
- catch(err) {
- return null; //invalid IP address
- }
-
- }
-
- function displayIP(addr)
- {
- try {
- var parse_addr = ipaddr.parse(addr);
- var kind = parse_addr.kind();
-
- if (kind === 'ipv4') //is a plain v4 address
- {
- return addr;
- }
- else if (kind === 'ipv6')
- {
- if (parse_addr.isIPv4MappedAddress()) //convert v4 mapped to v6 addresses to a v4 in it's original format
- {
- return parse_addr.toIPv4Address().toString();
- }
- else //is a v6, normalize it
- {
- return ip6.normalize(addr);
- }
-
- }
- else
- {
- return ''; //invalid IP address
- }
-
- }
- catch(err) {
- return ''; //invalid IP address
- }
-
- }
-
- function inRange(addr, range)
- {
- if (typeof range === 'string')
- {
- if (range.indexOf('/') !== -1)
- {
- try {
- var range_data = range.split('/');
-
- var parse_addr = ipaddr.parse(addr);
- var parse_range = ipaddr.parse(range_data[0]);
-
- return parse_addr.match(parse_range, range_data[1]);
- }
- catch(err) {
- return false;
- }
- }
- else
- {
- addr = (isV6(addr)) ? ip6.normalize(addr) : addr; //v6 normalize addr
- range = (isV6(range)) ? ip6.normalize(range) : range; //v6 normalize range
-
- return isIP(range) && addr === range;
- }
- }
- else if (range && typeof range === 'object') //list
- {
- for (var check_range in range)
- {
- if (inRange(addr, range[check_range]) === true)
- {
- return true;
- }
- }
- return false;
- }
- else
- {
- return false;
- }
- }
-
- // Export public API
- var range_check = {};
- //Validate IP Address
- range_check.vaild_ip = range_check.vaildIp = isIP;
- range_check.valid_ip = range_check.validIp = isIP;
- range_check.isIP = isIP;
-
- //isV4 and isV6
- range_check.isV4 = isV4;
- range_check.isV6 = isV6;
-
- //storeIP, searchIP and displayIP
- range_check.storeIP = storeIP;
- range_check.searchIP = storeIP;
- range_check.displayIP = displayIP;
-
- //Validate Range
- range_check.valid_range = range_check.validRange = isRange;
- range_check.isRange = isRange;
-
- //Others
- range_check.ver = ver;
- range_check.in_range = range_check.inRange = inRange;
-
- module.exports = range_check;
- }());
|