Updated Jul 14, 2026

Network

Find open TCP ports on an IP or subnet

Node.js TCP connect scanner for a single IP or CIDR.

Agent

overview

What evilscan does

Point evilscan at one IP or a CIDR and set --port to the ports or ranges to test. Default method is a full TCP connect (--scan=tcpconnect). Cap sockets with --concurrency and stall time with --timeout.

Enrich open ports with --banner, attach hostnames with --reverse, optional --geo for MaxMind location, and keep only wanted states with --status (O open, R refused, T timeout, U unreachable). Choose --display json, xml, or console.

Trickest runs evilscan as a managed Network node: target in, folder and file out. Prefer --display=json when httpx or another prober should consume the live ports next.

source github.com/eviltik/evilscan

use cases

Where evilscan fits

Scan an IP or subnet for open ports

Point evilscan at a single IP or a CIDR range with --port to find which TCP ports answer across a whole segment in one pass.

Grab banners and hostnames alongside ports

Turn on --banner, --reverse, and --geo so every open port arrives with the service banner, a reverse-DNS hostname, and a GeoIP location, not a bare port number.

Emit JSON for downstream nodes

Set --display=json so open ports feed cleanly into an httpx or nuclei stage instead of staying as console text.

Tune throughput for a bounded range

Adjust --concurrency and --timeout to balance speed against accuracy on flaky hosts, and use --status to keep only the port states you care about.

reference

evilscan inputs and flags

14 inputs
NameTypeFlagDescription
ip-address-or-subnetSTRING·IP address or subnet to scan (positional target).
portsSTRING--portPort(s) or ranges to scan, e.g. --port=21,22,23,5900-5902.
scan-methodSTRING--scanScan method: tcpconnect (full connect, default).
statusSTRING--statusPort states to include: T timeout, R refused, O open (default), U unreachable.
concurrencySTRING--concurrencyMaximum number of simultaneous sockets open (default 500).
timeoutSTRING--timeoutMaximum milliseconds before closing a connection (default 2000).
bannerBOOLEAN--bannerGrab and display the service banner for each open port.
result-formatSTRING--displayResult output format: json, xml, or console.

Showing key inputs. evilscan exposes 14 inputs in total.

Full flag reference (14 inputs)
NameTypeFlagDescription
geoipBOOLEAN--geoDisplay a GeoIP location for each result (free MaxMind data).
portsSTRING--portPort(s) or ranges to scan, e.g. --port=21,22,23,5900-5902.
bannerBOOLEAN--bannerGrab and display the service banner for each open port.
statusSTRING--statusPort states to include in results: T timeout, R refused, O open (default), U unreachable.
timeoutSTRING--timeoutMaximum milliseconds before closing a connection (default 2000).
hugescanBOOLEAN--hugescanAllow an IP/port combination count greater than 16,580,355.
progressBOOLEAN--progressDisplay a progress indicator every second.
valid-dnsBOOLEAN--reversevalidOnly display results with a valid reverse DNS, unless ports are specified.
concurrencySTRING--concurrencyMaximum number of simultaneous sockets open (default 500).
scan-methodSTRING--scanScan method: tcpconnect (full connect, default). tcpsyn and udp are listed but not yet implemented.
banner-lengthSTRING--bannerlenNumber of banner bytes to grab (default 512).
result-formatSTRING--displayResult output format: json, xml, or console.
display-dns-lookupBOOLEAN--reverseDisplay the reverse DNS lookup for each host.
ip-address-or-subnetSTRING·IP address or subnet to scan (positional target).

example

Run evilscan

evilscan · command
# TCP connect sweep of a subnet, grab banners, emit JSONevilscan 198.51.100.0/24 --port=22,80,443,8080 --banner --reverse --display=json
sample output
{"ip":"198.51.100.10","port":22,"status":"open","banner":"SSH-2.0-OpenSSH_8.9p1 Ubuntu"}{"ip":"198.51.100.10","port":80,"status":"open","banner":"nginx/1.24.0"}{"ip":"198.51.100.10","port":443,"status":"open","banner":"nginx/1.24.0"}{"ip":"198.51.100.23","port":22,"status":"open","banner":"SSH-2.0-OpenSSH_9.6"}{"ip":"198.51.100.23","port":8080,"status":"open","banner":"gunicorn/21.2.0"}{"ip":"198.51.100.42","port":443,"status":"open","banner":"Apache/2.4.57"}{"ip":"198.51.100.77","port":22,"status":"open","banner":""}

guidance

Choosing evilscan

Use evilscan for a bounded TCP connect sweep of an IP or subnet when you also want banners, reverse DNS, or GeoIP in one pass. For internet-scale volume, prefer masscan or naabu.

masscan

Asynchronous internet-scale port scanner. Faster on huge ranges; evilscan stays simpler when you want banners and reverse DNS together.

naabu

Fast Go port scanner built for recon pipelines. Sibling for the same open-port discovery role.

faq

evilscan questions

Pass the IP as the positional target and ports with --port, for example evilscan 198.51.100.10 --port=1-1000. On Trickest, set the ip-address-or-subnet and ports inputs.

Run evilscan yourself

A subnet feeds evilscan, which sweeps it for open ports and passes the results to httpx so live services land as a queryable output.

Facts on this page come from the live Trickest tool library.