-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathfXHRScanIPAddressPorts.js
30 lines (30 loc) · 1013 Bytes
/
fXHRScanIPAddressPorts.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
function fXHRScanIPAddressPorts(sIPAddress, auPortNumbers, fCallback) {
var auDetectedPorts = [];
(function fLoop() {
if (auPortNumbers.length) {
var uPortNumber = auPortNumbers.pop(),
oXHR = new XMLHttpRequest(),
bFinished = false,
oTimeout = setTimeout(function fXHRTimeout() {
if (!bFinished) {
bFinished = true;
oXHR.abort();
fLoop();
};
}, 1500);
oXHR.onreadystatechange = function fXHRReadyStateChangeEventHandler(oEvent) {
if (oXHR.readyState == 4 && !bFinished) {
bFinished = true;
clearTimeout(oTimeout);
auDetectedPorts.push(uPortNumber);
fLoop();
};
};
oXHR.open("GET", location.protocol + "//" + sIPAddress + ":" + uPortNumber);
oXHR.send();
} else {
console.log("IP: " + sIPAddress + ", ports: " + (auDetectedPorts.join(", ") || "none"));
fCallback(auDetectedPorts);
};
})();
};