-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaddressLogic.js
97 lines (97 loc) · 2.94 KB
/
addressLogic.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
var output = {};
var punycode = require("punycode");
output.isDomain = function(address) {
if (!address) {
return false;
}
if (address=="localhost") {
return true;
}
var url = punycode.encode(address);
if (address.length > 253) {
return false;
}
var segments = address.split(".");
if(segments.length < 2) {
return false;
}
var pattern = new RegExp("([A-Z]|[a-z]|[0-9]|_|-)","g");
for(var index = 0; index < segments.length; index++) {
if (segments[index].length==0) {
return false;
}
if(pattern.test(segments[index])==false) {
return false;
}
}
return true;
};
output.addressType = function(address) {
var VPI8regex = new RegExp("(0|1){8,8}","g");
if (VPI8regex.test(address)==true) {
return "VPI-UNI";
}
var VPI12regex = new RegExp("(0|1){12,12}","g");
if (VPI12regex.test(address)==true) {
return "VPI-NNI";
}
var VPI16regex = new RegExp("(0|1){16,16}","g");
if (VPI16regex.test(address)==true) {
return "VCI";
}
var MAC48regex = new RegExp("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$");
if (MAC48regex.test(address)==true) {
return "EUI-48";
}
var MAC64regex = new RegExp("^([0-9A-Fa-f]{2}[:-]){7}([0-9A-Fa-f]{2})$");
if (MAC64regex.test(address)==true) {
return "EUI-64";
}
var IPv4regex = new RegExp("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
if ((IPv4regex.test(address))== true) {
return "IPv4";
}
var IPv6regex = RegExp("(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))");
if ((IPv6regex.test(address))== true) {
return "IPv6";
}
if (output.isDomain(address)==true) {
return "DNS";
}
return "unknown";
};
output.ipFormat = function(address) {
if (address.indexOf(":") > -1) {
return "IPv6";
}
return "IPv4";
};
output.get6Addresses = function(domainName, callback) {
dns.resolve6(domainName, function(err, results){
if (err) {
callback([]);
return;
}
callback(results);
return;
});
};
output.get4Addresses = function(domainName, callback) {
dns.resolve4(domainName, function(err, results){
if (err) {
callback([]);
return;
}
callback(results);
return;
});
};
output.getAddresses = function(domainName, callback) {
output.get6Addresses(domainName, function(result6) {
output.get4Addresses(domainName, function(result4){
callback(result6.concat(result4));
});
});
};
var dns = require("dns");
module.exports = exports = output;