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: | 1890 / 12856 |
| Version history: | 1 change(s) |
| Referenced in: | [show references] |