From a801231a84863f26ea8dda930924047eb8be6d0c Mon Sep 17 00:00:00 2001 From: Robert Whitney Date: Sun, 25 Sep 2022 10:44:43 -0500 Subject: [PATCH] version filter. Closes issue #1 --- README.md | 6 ++++-- package.json | 1 + scanner.js | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ae7f031..a3265da 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,16 @@ This scans for MineCraft servers... really really fast! ## Usage Run `node ./scanner.js [options] --ip ` -### Example +### Examples `node ./scanner.js --ip 192.168.1.0/24 --port 25565-25569 --show-desc --min-players 1 --max-players 100 --out report.csv` - +`node ./scanner.js --ip 192.168.1.0/24 --port 25565-25569 --show-desc --min-players 1 --max-players 100 --version '1.8.*' --out 1.8.x-servers.csv` +`node ./scanner.js --ip 192.168.1.0/24 --port 25565-25569 --show-desc --min-players 1 --max-players 100 --version '*forge*' --out forge-servers.csv` ### CLI Options * `--ip ` - IP Address or Range of IP Addresses with CIDR notation (eg- 192.168.1.0/24) * `--port ` - Ports to look for minecraft servers on. (Default: `25565-25566`) * `--min-players ` - Minimum number of players. * `--max-players ` - Maximum player count. +* `--version ` - Glob expression to filter version (eg- `1.19.*`, or `1.1*.*`). (Default: `*`) #### Output Options * `--show-desc` - Enable showing of server description in output. diff --git a/package.json b/package.json index b47469c..49e9fa9 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "maxmind": "^4.3.5", "minecraft-status": "^1.1.0", "mineflayer": "^4.0.0", + "minimatch": "^3.0.4", "node-mcpe-color-parser": "^0.1.1", "tar-stream": "^2.2.0", "zlib": "^1.0.5" diff --git a/scanner.js b/scanner.js index 402dbe1..23cac77 100644 --- a/scanner.js +++ b/scanner.js @@ -1,6 +1,7 @@ var Scanner = require('evilscan'); var status = require('minecraft-status').MinecraftServerListPing; var mc = require('mineflayer'); +var minimatch = require("minimatch"); var fs = require('fs'); var maxmind; var mcp = require('node-mcpe-color-parser'); @@ -11,6 +12,7 @@ var SCAN_MIN_PLAYERS = (process.params['min-players'] || 0); var SCAN_OPTS_HOSTS = (process.params['ip']||'0.0.0.0/0').toString(); var SCAN_OPTS_PORTS = (process.params['port'] || MINECRAFT_DEFAULT_PORT).toString(); var SCAN_OPTS_OUTPUT_CSV = (process.params['out']||null); +var SCAN_OPTS_VERSION_FILTER = (process.params['version']||'*'); var CLIENT_TOKEN; if(process.params['geo-ip']) @@ -118,6 +120,7 @@ if (SCAN_OPTS_OUTPUT_CSV) { scan.on('result', function(data){ //console.log(data); status.ping(757, data.ip, data.port, (process.params['timeout']||15)*1000).then(function(pingRes){ + if(!minimatch(pingRes.version.name, SCAN_OPTS_VERSION_FILTER)) { return; } // Does not match version filter if (pingRes.players.online >= SCAN_MIN_PLAYERS && (!process.params['max-players'] || (process.params['max-players'] && pingRes.players.max <= process.params['max-players']))) { var theText = data.ip + ":" + data.port + "\t" + pingRes.version.name + "\t" + pingRes.players.online + " of " + pingRes.players.max + " players";