Skip to main content

Overview

Minecraft Ping is a specialized Layer 7 attack designed specifically for Minecraft Java Edition servers. It exploits the Server List Ping protocol by flooding the server with status requests, forcing it to process packet parsing, JSON serialization, and response generation for each request.
This attack uses the legitimate Minecraft protocol and appears as normal server list pings.

How it works

The Minecraft Ping attack implements the official Minecraft Server List Ping protocol:
  1. TCP Connection: Establishes connection to target server (default port 25565)
  2. Handshake Packet: Sends protocol handshake with:
    • Packet ID: 0x00
    • Protocol Version: 754 (Minecraft 1.16.4+)
    • Server Address: Target hostname
    • Server Port: Target port
    • Next State: 1 (status)
  3. Status Request: Sends status request packet (0x00)
  4. Response Handling: Reads partial response and discards it
  5. Connection Close: Closes connection immediately
  6. Repeat: Each thread continuously sends new ping requests

Minecraft protocol structure

When to use

Minecraft Ping is effective for:
  • Minecraft server stress testing: Test your server’s capacity to handle status requests
  • Query flood simulation: Simulate massive server list queries (like from server lists)
  • DDoS protection testing: Verify if anti-DDoS plugins (like TCPShield) work correctly
  • Resource exhaustion: Test server’s JSON serialization and packet handling under load
  • Plugin stress testing: Test if monitoring/status plugins can handle high request rates
This attack can severely impact Minecraft server performance. Only use on servers you own or have permission to test.

Usage

Basic Minecraft Ping attack (uses default port 25565):
Explicit port specification:
High-intensity attack:

Parameters

string
required
Minecraft server hostname or IP. Can include tcp:// prefix and :port suffix.
int
default:"60"
Attack duration in seconds
int
default:"500"
Delay between ping requests in milliseconds per thread
int
default:"512"
Not used in Minecraft Ping (kept for API consistency)
int
default:"0"
Number of concurrent threads (0 = number of CPU cores)
boolean
default:"false"
Show detailed logs for each ping request
boolean
default:"false"
Allow running without proxies (not recommended)

Expected behavior

Console output

Standard mode:
Verbose mode:

Server-side impact

On the Minecraft server, each ping request causes:
  1. Packet parsing: Deserialize VarInt-encoded handshake packet
  2. Protocol handling: Validate protocol version and state transition
  3. Status generation: Serialize server info to JSON:
  4. Response transmission: Send JSON response with VarInt length prefix
  5. Connection cleanup: Close connection and free resources

Technical implementation

Implementation details from internal/attacks/game/minecraft_ping.go:19-73:
  • Protocol version: Uses 754 (compatible with Minecraft 1.16-1.20+)
  • VarInt encoding: Custom writeVarInt() implementation
  • String encoding: Length-prefixed UTF-8 strings via writeString()
  • Port handling: Defaults to 25565 if target uses scheme-less format with port 80
  • Response reading: Reads 256 bytes + copies 64 more to prevent buffer clog
  • Timeout: 3-second deadline for entire operation
  • Proxy support: Full SOCKS5/HTTP proxy support

Packet construction

Attack effectiveness

  • CPU-intensive: JSON serialization for every ping
  • Favicon encoding: Base64 PNG encoding in response
  • Plugin overhead: Many plugins hook into status events
  • No caching: Most servers regenerate JSON for each request
  • Query plugins: Additional overhead from query/vote plugins
At high request rates (500+ pings/sec):
  • CPU usage spikes (JSON serialization bottleneck)
  • Network thread saturation
  • Increased tick time (gameplay lag)
  • Potential crash if max-tick-time exceeded
  • Plugin event handlers slow down
  • Lower delay: 100-200ms for aggressive attacks
  • More threads: 50-100 threads typical
  • More proxies: Harder to IP-block
  • Longer duration: Sustain pressure over time

Defense mechanisms

If you’re protecting a Minecraft server:
1

Use DDoS protection

Services like TCPShield, Cosmic Guard, or cloudflare Spectrum specifically protect Minecraft servers.
2

Rate limit status requests

Plugins like ProtocolLib can limit status requests per IP:
3

Cache status responses

Implement response caching to avoid repeated JSON serialization.
4

Firewall rules

Use iptables or cloud firewall to limit connections:
5

Monitor connection rates

Alert when new connection rate exceeds baseline.

Real-world scenarios

Testing server capacity

Validating DDoS protection

Protocol compatibility

Protocol Version 754:
  • Compatible with Minecraft 1.16 through 1.20+
  • Works with Paper, Spigot, Purpur, Fabric, Forge servers
  • BungeeCord and Velocity proxies also vulnerable
  • Bedrock Edition servers not affected (different protocol)

Comparison with other attacks

Minecraft Ping:
  • Protocol-specific, appears legitimate
  • Triggers server-side processing
  • Harder to distinguish from real traffic
TCP Flood:
  • Generic TCP, random data
  • Minimal server processing
  • Easier to detect and block

Advanced techniques

Protocol version randomization

Modify the attack to randomize protocol versions to test version validation:

Hostname spoofing

Test virtual host routing by varying the hostname sent:

TCP Flood

Generic TCP flood for any service

HTTP Flood

Layer 7 HTTP request flood