static class ProgramScan { static int threads = isWindows() ? 500 : 10; static int timeout = 5000; // hmm... static String ip = "127.0.0.1"; // This range is not used anymore anyway static int quickScanFrom = 10000, quickScanTo = 10999; static int maxNumberOfVMs_android = 4; // Android will always only have one if we don't screw up static int maxNumberOfVMs_nonAndroid = 50; // 100; static int maxNumberOfVMs; static boolean verbose; static class Program { int port; String helloString; *(int *port, String *helloString) {} } static List<Program> scan() ctex { return scan(1, 65535); } static List<Program> scan(int fromPort, int toPort) { return scan(fromPort, toPort, new int[0]); } static List<Program> scan(int fromPort, int toPort, int[] preferredPorts) ctex { Set<int> preferredPortsSet = new HashSet<int>(asList(preferredPorts)); int scanSize = toPort-fromPort+1; S name = toPort < 10000 ? "bot" : "program"; int threads = isWindows() ? min(500, scanSize) : min(scanSize, 10); final ExecutorService es = Executors.newFixedThreadPool(threads); if (verbose) print(firstToUpper(name) + "-scanning " + ip + " with timeout " + timeout + " ms in " + threads + " threads."); startTiming(); new List<Future<Program>> futures; new L<Int> ports; for (int port : preferredPorts) { futures.add(checkPort(es, ip, port, timeout)); ports.add(port); } for (int port = fromPort; port <= toPort; port++) if (!preferredPortsSet.contains(port) && !forbiddenPort(port)) { futures.add(checkPort(es, ip, port, timeout)); ports.add(port); } es.shutdown(); new List<Program> programs; long time = now(); int i = 0; for (final Future<Program> f : futures) { if (verbose) print("Waiting for port " + get(ports, i++) + " at time " + (now()-time)); Program p = f.get(); if (p != null) programs.add(p); } //stopTiming("Port Scan " + scanSize + ", " + n(threads, "threads") + ": ", 250); if (verbose) print("Found " + programs.size() + " " + name + "(s) on " + ip); return programs; } static Future<Program> checkPort(final ExecutorService es, final String ip, final int port, final int timeout) { return es.submit(new Callable<Program>() { @Override public Program call() { try { Socket socket = new Socket(); try { socket.setSoTimeout(timeout); socket.connect(new InetSocketAddress(ip, port), timeout); //if (verbose) print("Connected to " + ip + ":" + port); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream(), "UTF-8")); S hello = or(in.readLine(), "?"); return new Program(port, hello); } finally { socket.close(); } } catch (Exception ex) { return null; } } }); } static List<Program> quickScan() { return scan(quickScanFrom, quickScanTo); } static List<Program> quickBotScan() { return quickBotScan(new int[0]); } static List<Program> quickBotScan(int[] preferredPorts) { if (maxNumberOfVMs == 0) maxNumberOfVMs = isAndroid() ? maxNumberOfVMs_android : maxNumberOfVMs_nonAndroid; return scan(4999, 5000+maxNumberOfVMs-1, preferredPorts); } }
Began life as a copy of #1000802
download show line numbers debug dex old transpilations
Travelled to 21 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, imzmzdywqqli, ishqpsrjomds, jtubtzbbkimh, lpdgvwnxivlt, lulzaavyztxj, mqqgnosmbjvj, onxytkatvevr, ppjhyzlbdabe, pyentgdyhuwx, pzhvpgtvlbxg, sawdedvomwva, tslmcundralx, tvejysmllsmz, vouqrxazstgt, wtqryiryparv
ID | Author/Program | Comment | Date |
---|---|---|---|
1111 | stefan | TODO: this seems to hang on windows... (e.g. in tel bot) | 2015-10-03 15:59:44 |
Snippet ID: | #1000804 |
Snippet name: | ProgramScan (include) |
Eternal ID of this version: | #1000804/2 |
Text MD5: | 340d56e86ac71b3bad102ce64c1e5d59 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2017-04-08 21:46:18 |
Source code size: | 3565 bytes / 100 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 1171 / 12150 |
Version history: | 1 change(s) |
Referenced in: | [show references] |