Created
April 6, 2016 08:13
-
-
Save Q2h1Cg/bceb5a9d27ac7056081ea90639855cf6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
var net = require("net"); | |
var util = require("util"); | |
var commander = require("commander"); | |
var Bagpipe = require("bagpipe"); | |
var Netmask = require("netmask").Netmask; | |
var Q = require("q"); | |
var FS = require("q-io/fs"); | |
var PORTS = [ | |
1, | |
3, | |
4, | |
6, | |
7, | |
9, | |
13, | |
17, | |
19, | |
20, | |
21, | |
22, | |
23, | |
24, | |
25, | |
26, | |
30, | |
32, | |
33, | |
37, | |
42, | |
43, | |
49, | |
53, | |
70, | |
79, | |
80, | |
81, | |
82, | |
83, | |
84, | |
85, | |
88, | |
89, | |
90, | |
99, | |
100, | |
106, | |
109, | |
110, | |
111, | |
113, | |
119, | |
125, | |
135, | |
139, | |
143, | |
144, | |
146, | |
161, | |
163, | |
179, | |
199, | |
211, | |
212, | |
222, | |
254, | |
255, | |
256, | |
259, | |
264, | |
280, | |
301, | |
306, | |
311, | |
340, | |
366, | |
389, | |
406, | |
407, | |
416, | |
417, | |
425, | |
427, | |
443, | |
444, | |
445, | |
458, | |
464, | |
465, | |
481, | |
497, | |
500, | |
512, | |
513, | |
514, | |
515, | |
524, | |
541, | |
543, | |
544, | |
545, | |
548, | |
554, | |
555, | |
563, | |
587, | |
593, | |
616, | |
617, | |
625, | |
631, | |
636, | |
646, | |
648, | |
666, | |
667, | |
668, | |
683, | |
687, | |
691, | |
700, | |
705, | |
711, | |
714, | |
720, | |
722, | |
726, | |
749, | |
765, | |
777, | |
783, | |
787, | |
800, | |
801, | |
808, | |
843, | |
873, | |
880, | |
888, | |
898, | |
900, | |
901, | |
902, | |
903, | |
911, | |
912, | |
981, | |
987, | |
990, | |
992, | |
993, | |
995, | |
999, | |
1000, | |
1001, | |
1002, | |
1007, | |
1009, | |
1010, | |
1011, | |
1021, | |
1022, | |
1023, | |
1024, | |
1025, | |
1026, | |
1027, | |
1028, | |
1029, | |
1030, | |
1031, | |
1032, | |
1033, | |
1034, | |
1035, | |
1036, | |
1037, | |
1038, | |
1039, | |
1040, | |
1041, | |
1042, | |
1043, | |
1044, | |
1045, | |
1046, | |
1047, | |
1048, | |
1049, | |
1050, | |
1051, | |
1052, | |
1053, | |
1054, | |
1055, | |
1056, | |
1057, | |
1058, | |
1059, | |
1060, | |
1061, | |
1062, | |
1063, | |
1064, | |
1065, | |
1066, | |
1067, | |
1068, | |
1069, | |
1070, | |
1071, | |
1072, | |
1073, | |
1074, | |
1075, | |
1076, | |
1077, | |
1078, | |
1079, | |
1080, | |
1081, | |
1082, | |
1083, | |
1084, | |
1085, | |
1086, | |
1087, | |
1088, | |
1089, | |
1090, | |
1091, | |
1092, | |
1093, | |
1094, | |
1095, | |
1096, | |
1097, | |
1098, | |
1099, | |
1100, | |
1102, | |
1104, | |
1105, | |
1106, | |
1107, | |
1108, | |
1110, | |
1111, | |
1112, | |
1113, | |
1114, | |
1117, | |
1119, | |
1121, | |
1122, | |
1123, | |
1124, | |
1126, | |
1130, | |
1131, | |
1132, | |
1137, | |
1138, | |
1141, | |
1145, | |
1147, | |
1148, | |
1149, | |
1151, | |
1152, | |
1154, | |
1163, | |
1164, | |
1165, | |
1166, | |
1169, | |
1174, | |
1175, | |
1183, | |
1185, | |
1186, | |
1187, | |
1192, | |
1198, | |
1199, | |
1201, | |
1213, | |
1216, | |
1217, | |
1218, | |
1233, | |
1234, | |
1236, | |
1244, | |
1247, | |
1248, | |
1259, | |
1271, | |
1272, | |
1277, | |
1287, | |
1296, | |
1300, | |
1301, | |
1309, | |
1310, | |
1311, | |
1322, | |
1328, | |
1334, | |
1352, | |
1417, | |
1433, | |
1434, | |
1443, | |
1455, | |
1461, | |
1494, | |
1500, | |
1501, | |
1503, | |
1521, | |
1524, | |
1533, | |
1556, | |
1580, | |
1583, | |
1594, | |
1600, | |
1641, | |
1658, | |
1666, | |
1687, | |
1688, | |
1700, | |
1717, | |
1718, | |
1719, | |
1720, | |
1721, | |
1723, | |
1755, | |
1761, | |
1782, | |
1783, | |
1801, | |
1805, | |
1812, | |
1839, | |
1840, | |
1862, | |
1863, | |
1864, | |
1875, | |
1900, | |
1914, | |
1935, | |
1947, | |
1971, | |
1972, | |
1974, | |
1984, | |
1998, | |
1999, | |
2000, | |
2001, | |
2002, | |
2003, | |
2004, | |
2005, | |
2006, | |
2007, | |
2008, | |
2009, | |
2010, | |
2013, | |
2020, | |
2021, | |
2022, | |
2030, | |
2033, | |
2034, | |
2035, | |
2038, | |
2040, | |
2041, | |
2042, | |
2043, | |
2045, | |
2046, | |
2047, | |
2048, | |
2049, | |
2065, | |
2068, | |
2099, | |
2100, | |
2103, | |
2105, | |
2106, | |
2107, | |
2111, | |
2119, | |
2121, | |
2126, | |
2135, | |
2144, | |
2160, | |
2161, | |
2170, | |
2179, | |
2190, | |
2191, | |
2196, | |
2200, | |
2222, | |
2251, | |
2260, | |
2288, | |
2301, | |
2323, | |
2366, | |
2381, | |
2382, | |
2383, | |
2393, | |
2394, | |
2399, | |
2401, | |
2492, | |
2500, | |
2522, | |
2525, | |
2557, | |
2601, | |
2602, | |
2604, | |
2605, | |
2607, | |
2608, | |
2638, | |
2701, | |
2702, | |
2710, | |
2717, | |
2718, | |
2725, | |
2800, | |
2809, | |
2811, | |
2869, | |
2875, | |
2909, | |
2910, | |
2920, | |
2967, | |
2968, | |
2998, | |
3000, | |
3001, | |
3003, | |
3005, | |
3006, | |
3007, | |
3011, | |
3013, | |
3017, | |
3030, | |
3031, | |
3052, | |
3071, | |
3077, | |
3128, | |
3168, | |
3211, | |
3221, | |
3260, | |
3261, | |
3268, | |
3269, | |
3283, | |
3300, | |
3301, | |
3306, | |
3322, | |
3323, | |
3324, | |
3325, | |
3333, | |
3351, | |
3367, | |
3369, | |
3370, | |
3371, | |
3372, | |
3389, | |
3390, | |
3404, | |
3476, | |
3493, | |
3517, | |
3527, | |
3546, | |
3551, | |
3580, | |
3659, | |
3689, | |
3690, | |
3703, | |
3737, | |
3766, | |
3784, | |
3800, | |
3801, | |
3809, | |
3814, | |
3826, | |
3827, | |
3828, | |
3851, | |
3869, | |
3871, | |
3878, | |
3880, | |
3889, | |
3905, | |
3914, | |
3918, | |
3920, | |
3945, | |
3971, | |
3986, | |
3995, | |
3998, | |
4000, | |
4001, | |
4002, | |
4003, | |
4004, | |
4005, | |
4006, | |
4045, | |
4111, | |
4125, | |
4126, | |
4129, | |
4224, | |
4242, | |
4279, | |
4321, | |
4440, | |
4343, | |
4443, | |
4444, | |
4445, | |
4446, | |
4449, | |
4550, | |
4567, | |
4662, | |
4848, | |
4899, | |
4900, | |
4998, | |
5000, | |
5001, | |
5002, | |
5003, | |
5004, | |
5009, | |
5030, | |
5033, | |
5050, | |
5051, | |
5054, | |
5060, | |
5061, | |
5080, | |
5087, | |
5100, | |
5101, | |
5102, | |
5120, | |
5190, | |
5200, | |
5214, | |
5221, | |
5222, | |
5225, | |
5226, | |
5269, | |
5280, | |
5298, | |
5357, | |
5405, | |
5414, | |
5431, | |
5432, | |
5440, | |
5500, | |
5510, | |
5544, | |
5550, | |
5555, | |
5560, | |
5566, | |
5631, | |
5633, | |
5666, | |
5678, | |
5679, | |
5718, | |
5730, | |
5800, | |
5801, | |
5802, | |
5810, | |
5811, | |
5815, | |
5822, | |
5825, | |
5850, | |
5859, | |
5862, | |
5877, | |
5900, | |
5901, | |
5902, | |
5903, | |
5904, | |
5906, | |
5907, | |
5910, | |
5911, | |
5915, | |
5922, | |
5925, | |
5950, | |
5952, | |
5959, | |
5960, | |
5961, | |
5962, | |
5963, | |
5987, | |
5988, | |
5989, | |
5998, | |
5999, | |
6000, | |
6001, | |
6002, | |
6003, | |
6004, | |
6005, | |
6006, | |
6007, | |
6009, | |
6025, | |
6059, | |
6082, | |
6100, | |
6101, | |
6106, | |
6112, | |
6123, | |
6129, | |
6156, | |
6346, | |
6379, | |
6389, | |
6502, | |
6510, | |
6543, | |
6547, | |
6565, | |
6566, | |
6567, | |
6580, | |
6646, | |
6666, | |
6667, | |
6668, | |
6669, | |
6689, | |
6692, | |
6699, | |
6779, | |
6788, | |
6789, | |
6792, | |
6839, | |
6881, | |
6901, | |
6969, | |
7000, | |
7001, | |
7002, | |
7004, | |
7007, | |
7019, | |
7025, | |
7070, | |
7100, | |
7103, | |
7106, | |
7200, | |
7201, | |
7402, | |
7435, | |
7443, | |
7496, | |
7512, | |
7625, | |
7627, | |
7676, | |
7741, | |
7777, | |
7778, | |
7800, | |
7911, | |
7920, | |
7921, | |
7937, | |
7938, | |
7999, | |
8000, | |
8001, | |
8002, | |
8007, | |
8008, | |
8009, | |
8010, | |
8011, | |
8021, | |
8022, | |
8031, | |
8042, | |
8045, | |
8080, | |
8081, | |
8082, | |
8083, | |
8084, | |
8085, | |
8086, | |
8087, | |
8088, | |
8089, | |
8090, | |
8093, | |
8099, | |
8100, | |
8180, | |
8181, | |
8192, | |
8193, | |
8194, | |
8200, | |
8222, | |
8254, | |
8290, | |
8291, | |
8292, | |
8300, | |
8333, | |
8383, | |
8400, | |
8402, | |
8443, | |
8500, | |
8600, | |
8649, | |
8651, | |
8652, | |
8654, | |
8701, | |
8800, | |
8873, | |
8888, | |
8899, | |
8994, | |
9000, | |
9001, | |
9002, | |
9003, | |
9009, | |
9010, | |
9011, | |
9040, | |
9050, | |
9071, | |
9080, | |
9081, | |
9090, | |
9091, | |
9099, | |
9100, | |
9101, | |
9102, | |
9103, | |
9110, | |
9111, | |
9200, | |
9207, | |
9220, | |
9290, | |
9415, | |
9418, | |
9485, | |
9500, | |
9502, | |
9503, | |
9527, | |
9535, | |
9575, | |
9593, | |
9594, | |
9595, | |
9618, | |
9666, | |
9876, | |
9877, | |
9878, | |
9898, | |
9900, | |
9917, | |
9929, | |
9943, | |
9944, | |
9968, | |
9998, | |
9999, | |
10000, | |
10001, | |
10002, | |
10003, | |
10004, | |
10009, | |
10010, | |
10012, | |
10024, | |
10025, | |
10082, | |
10180, | |
10215, | |
10243, | |
10566, | |
10616, | |
10617, | |
10621, | |
10626, | |
10628, | |
10629, | |
10778, | |
11110, | |
11111, | |
11211, | |
11967, | |
12000, | |
12174, | |
12265, | |
12345, | |
13456, | |
13722, | |
13782, | |
13783, | |
14000, | |
14238, | |
14441, | |
14442, | |
15000, | |
15002, | |
15003, | |
15004, | |
15660, | |
15742, | |
16000, | |
16001, | |
16012, | |
16016, | |
16018, | |
16080, | |
16113, | |
16992, | |
16993, | |
17877, | |
17988, | |
18040, | |
18101, | |
18988, | |
19101, | |
19283, | |
19315, | |
19350, | |
19780, | |
19801, | |
19842, | |
20000, | |
20005, | |
20031, | |
20221, | |
20222, | |
20828, | |
21571, | |
22939, | |
23502, | |
24444, | |
24800, | |
25734, | |
25735, | |
26214, | |
27000, | |
27017, | |
27352, | |
27353, | |
27355, | |
27356, | |
27715, | |
27017, | |
28201, | |
30000, | |
30718, | |
30951, | |
31038, | |
31337, | |
32768, | |
32769, | |
32770, | |
32771, | |
32772, | |
32773, | |
32774, | |
32775, | |
32776, | |
32777, | |
32778, | |
32779, | |
32780, | |
32781, | |
32782, | |
32783, | |
32784, | |
32785, | |
33354, | |
33899, | |
34571, | |
34572, | |
34573, | |
35500, | |
38292, | |
40193, | |
40911, | |
41511, | |
42510, | |
44176, | |
44442, | |
44443, | |
44501, | |
45100, | |
48080, | |
49152, | |
49153, | |
49154, | |
49155, | |
49156, | |
49157, | |
49158, | |
49159, | |
49160, | |
49161, | |
49163, | |
49165, | |
49167, | |
49175, | |
49176, | |
49400, | |
49999, | |
50000, | |
50001, | |
50002, | |
50003, | |
50006, | |
50300, | |
50389, | |
50500, | |
50636, | |
50800, | |
51103, | |
51493, | |
52673, | |
52822, | |
52848, | |
52869, | |
54045, | |
54328, | |
55055, | |
55056, | |
55555, | |
55600, | |
56737, | |
56738, | |
57294, | |
57797, | |
58080, | |
60020, | |
60443, | |
61532, | |
61900, | |
62078, | |
63331, | |
64623, | |
64680, | |
65000, | |
65129, | |
65389 | |
]; | |
var TIMEOUT = 2000; | |
var bagpipe = new Bagpipe(500); | |
// 生成 IP 列表 | |
function generateIPList(ipStr, callback) { | |
var error = null; | |
var ipList = []; | |
if (ipStr.indexOf("/") != -1) { | |
try { | |
var block = new Netmask(ipStr); | |
block.forEach(function (ip) { | |
ipList.push(ip); | |
}); | |
} catch (ex) { | |
error = ex; | |
} | |
} else { | |
ipList.push(ipStr); | |
} | |
callback(error, ipList); | |
// callback(null, ["www.baidu.com"]); | |
} | |
// Promise GenerateIPList | |
function qGenerateIPList (ipStr) { | |
var deferred = Q.defer(); | |
generateIPList(ipStr, deferred.makeNodeResolver()); | |
return deferred.promise; | |
} | |
// TCP 连接 | |
function connectTCP(host, port, callback) { | |
var sd = net.connect({host: host, port: port}, function () { | |
callback(null, util.format("%s:%s", host, port)); | |
sd.destroy(); | |
}); | |
sd.setTimeout(TIMEOUT, function () { | |
callback(new Error("Timeout"), null); | |
sd.destroy(); | |
}); | |
sd.on("error", function (err) { | |
callback(err, null); | |
sd.destroy(); | |
}); | |
} | |
// Promise ConnectTCP | |
function qConnectTCP(host, port) { | |
var deferred = Q.defer(); | |
connectTCP(host, port, deferred.makeNodeResolver()); | |
return deferred.promise; | |
} | |
// Promise bagpipe.push | |
function qPush(host, port) { | |
var deferred = Q.defer(); | |
bagpipe.push(connectTCP, host, port, deferred.makeNodeResolver()); | |
return deferred.promise; | |
} | |
// log | |
function log(message) { | |
console.log(message); | |
return FS.append("portscan.log", message+"\n"); | |
} | |
// list | |
function list(val) { | |
var ret = []; | |
val.split(",").forEach(function (i) { | |
ret.push(parseInt(i)); | |
}); | |
return ret; | |
} | |
commander | |
.option("-n, --coroutineNum <n>", "Coroutine num", parseInt) | |
.option("-t, --timeout <t>", "Timeout", parseInt) | |
.option("-p, --ports <ports>", "Only scan specified ports, split with [,]", list) | |
.option("-a, --addition <ports>", "Scan additional ports except default ports, split with [,]", list) | |
.arguments("<target>", "Target specification") | |
.action(function (target) { | |
commander.target = target; | |
}) | |
.parse(process.argv); | |
if (!commander.target) { | |
console.error("No target given!"); | |
process.exit(1); | |
} | |
if (commander.coroutineNum) bagpipe = new Bagpipe(commander.coroutineNum); | |
if (commander.timeout) TIMEOUT = commander.timeout * 1000; | |
if (commander.ports) PORTS = commander.ports; | |
if (commander.addition) PORTS = PORTS.concat(commander.addition); | |
qGenerateIPList(commander.target) | |
.then(function (ipList) { | |
PORTS.forEach(function (port) { | |
ipList.forEach(function (host) { | |
qPush(host, port).then(log); | |
}); | |
}); | |
}, function (err) { | |
console.error(err); | |
process.exit(1); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment