ServerSeeker is a multi-threaded scanner for Minecraft servers. It connects to a PostgreSQL database, reads a list of target IPs from a file, and pings each server to check whether any players are currently online. When players are found, the results are logged to the database along with a timestamp.
The main use case for this tool is sniping — finding servers with active players as quickly as possible.
output.mp4
Given a text file containing a list of server IPs, ServerSeeker will:
- Load the IP list from the provided file.
- Spin up a configurable number of worker threads.
- Ping each server using the Minecraft server list ping protocol.
- Check the response for online player counts.
- If players are detected, log the server (IP, player count, timestamp) to the connected database.
This allows large IP lists to be scanned quickly in parallel, rather than checking servers one at a time.
- Multi-threaded scanning with a user-defined thread count
- Reads target IPs from a simple text file
- Pings servers using the standard Minecraft protocol
- Detects and logs servers with online players
- Stores results in a PostgreSQL database with timestamps
- A PostgreSQL database (accessible via URI connection string)
- A text file containing the list of IPs to scan (one IP per line)
This project uses vcpkg for dependency management. Required packages:
spdloglibpqxxnlohmann-jsonboostcpp-httplibargs
Database connection settings are defined in CONFIGURATION.h.
Currently, only a PostgreSQL URI connection string is supported for the database configuration. Example format:
postgres://username:password@host:port/database
Edit CONFIGURATION.h and set your connection URI before building/running the program.
./serverseeker <thread_count> <ips.txt>
| Argument | Description |
|---|---|
thread_count |
Number of threads to use for scanning |
ips.txt |
Path to a file containing the list of IPs to scan |
./serverseeker 256 ips.txt
If you dont have a IP list yet, you can use a sample from here.
This runs the scanner with 256 threads against the IP list in ips.txt, if you want to how it output's look here.
- Warning: If you get
Too many open files.error, you need to setulimit -n 65535to bypass limits. - Note: After some testing, i found 512 threads is a sweet spot for gigabit connection.
- Input parsing — the IP list file is read and split into individual targets.
- Thread pool — the specified number of threads is spawned to process the IP list concurrently.
- Server ping — each thread pings its assigned IP(s) on the Minecraft server port to retrieve server status (including online player count).
- Player check — if the response indicates one or more players online, the server is flagged as a hit.
- Logging — hits are written to the configured PostgreSQL database, including the IP and the timestamp of detection.
ServerSeeker runs a lightweight built-in API server on port 1337, used to monitor the program while it is running.
| Endpoint | Method | Description |
|---|---|---|
/api/v1/heartbeat |
GET | Returns a simple status check confirming the program is running |
/api/v1/status |
GET | Returns the current number of active jobs |
The API server starts automatically alongside the scanner and listens on all network interfaces (0.0.0.0:1337).
This is an early version of the API and will continue to be expanded with more endpoints and monitoring data over time.
- Support custom port scanning (currently hardcoded to the default Minecraft port
25565) - Expand API with more endpoints and detailed monitoring data
Made with love by kenanwastaken.