Browserless stress testing tool for Sekampadi survey system with TLS fingerprinting and realistic data randomization.
Legitimate stress testing tool for the Sekampadi survey system (sekampadi.kalbarprov.go.id) to test system performance, load capacity, and reliability under concurrent user load.
- Browserless HTTP Client: No headless browser, uses HTTP client with TLS fingerprinting
- TLS Fingerprinting: Chrome macOS profile for anti-bot bypass
- Realistic Data Randomization: Indonesian names, phone numbers, ages, and feedback
- Concurrent Execution: Configurable worker pool for parallel requests
- CSRF Token Handling: Automatic token extraction and session management
- Progress Tracking: Real-time progress bar during execution
- Graceful Shutdown: Handles SIGINT/SIGTERM for clean cancellation
- Metrics Collection: Success rate, duration metrics, HTTP status codes
- Custom Payload Support: JSON-based custom payload configuration
- Go 1.25 or higher
- Windows/macOS/Linux
- Clone the repository
git clone https://github.com/yourusername/SP_Perkim_Inject.git
cd SP_Perkim_Inject- Build the tool
go build -o bin/stress.exe ./cmd/stress- Run the tool
# Basic usage
./bin/stress.exe -n 10 -c 5
# With random data
./bin/stress.exe -n 10 -c 5 -random
# With custom payload
./bin/stress.exe -n 10 -c 5 -payload custom.json-n <int> Total number of requests (default: 10)
-c <int> Number of concurrent workers (default: 5)
-payload <file> Custom payload JSON file (optional)
-random Use random realistic data for each request
-timeout <dur> Request timeout (default: 30s)
Basic stress test
./bin/stress.exe -n 5 -c 1Moderate load with random data
./bin/stress.exe -n 50 -c 10 -randomHigh load test
./bin/stress.exe -n 200 -c 50 -randomCustom payload
./bin/stress.exe -n 20 -c 5 -payload custom.json{
"penyandang_disabilitas": "tidak",
"id_satker": 35,
"id_layanan": 99,
"umur": 30,
"jk": "lk",
"id_pekerjaan": 3,
"id_pendidikan": 5,
"no_hp": "081234567890",
"u1": 4,
"u2": 4,
"u3": 4,
"u4": 4,
"u5": 4,
"u6": 4,
"u7": 4,
"u8": 4,
"u9": 4,
"penilaian_umum": 4,
"transparan": 4,
"integritas": 4,
"saran": "Custom feedback"
}SP_Perkim_Inject/
βββ cmd/stress/
β βββ main.go # CLI entry point
βββ internal/
β βββ httpx/
β β βββ client.go # HTTP client with TLS
β β βββ profile.go # Browser profile (macOS)
β β βββ cookie/
β β βββ jar.go # Cookie jar
β βββ parser/
β β βββ token.go # CSRF token extraction
β βββ payload/
β β βββ builder.go # Survey payload builder
β βββ engine/
β β βββ worker.go # Worker pool engine
β βββ metrics/
β β βββ collector.go # Metrics collection
βββ bin/
β βββ stress.exe # Compiled binary
βββ go.mod
βββ go.sum
βββ README.md
βββ AGENTS.md
βββββββββββββββββββ
β CLI Start β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Parse Flags β
β -n, -c, -random β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Load Payload β
β Default/Random β
β Custom JSON β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Init HTTP Clientβ
β TLS Fingerprint β
β Chrome macOS β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Worker Pool β
β Concurrency β
β Semaphore β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β For Each Worker β
β β
β βββββββββββββββ β
β β GET Request β β
β β CSRF Token β β
β β Cookies β β
β ββββββββ¬βββββββ β
β β β
β βΌ β
β βββββββββββββββ β
β β POST Requestβ β
β β Survey Data β β
β β + Token β β
β ββββββββ¬βββββββ β
ββββββββββΌβββββββββ
β
βΌ
βββββββββββββββββββ
β Collect Metrics β
β Success/Fail β
β Duration β
β Status Codes β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Print Report β
β Summary Stats β
β Performance β
βββββββββββββββββββ
- CLI Input: Parse command-line flags and load payload
- HTTP Client: Initialize with TLS fingerprinting (Chrome macOS)
- Worker Pool: Create goroutines with semaphore-based rate limiting
- GET Request: Fetch CSRF token and session cookies
- POST Request: Submit survey data with token and cookies
- Metrics Collection: Track success rate, duration, HTTP status codes
- Report Generation: Display comprehensive summary statistics
Default: Chrome macOS (Chrome 146)
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
- TLS Profile: Chrome 146
- Sec-CH-UA: Google Chrome v146
const (
targetURL = "https://sekampadi.kalbarprov.go.id"
getEndpoint = "/survey2?opd=MzU%3D"
postEndpoint = "/survey2"
)- Age: 18-60 years
- Phone: Indonesian mobile numbers (0812, 0813, 0857, etc.)
- Service ID: 99-101 (Data, Consultation, Complaint)
- Job ID: 1-6 (ASN, Military, Private, etc.)
- Education ID: 1-6 (SD to S2/S3)
- Scores: 1-4 (for all survey questions)
π SP Perkim Inject - Stress Testing Tool
========================================
Requests: 10
Concurrency: 5
Timeout: 30s
========================================
β
Using random payload for each request
π Initializing HTTP client with browser TLS fingerprinting...
β
HTTP client initialized
π Starting stress test...
Progress: [βββββββββββββββββββββββββββββββββββββββββββββββ] 50.0% (5/10)
β
Stress test completed
========================================
STRESS TEST SUMMARY REPORT
========================================
Total Requests: 10
Successful: 10 (100.0%)
Failed: 0
Cancelled: 0
--- Duration Metrics ---
Average: 1.12s
Minimum: 527ms
Maximum: 1.81s
P95: 1.81s
P99: 1.81s
--- HTTP Status Codes ---
200: 10
========================================
403 Forbidden
- Server anti-bot protection active
- Try with different IP or wait some time
- TLS fingerprinting helps but not 100% effective
419 Page Expired
- CSRF token expired or invalid
- Tool automatically handles this with GET β POST flow
- Check if target website structure changed
Connection Timeout
- Network connectivity issues
- Increase timeout with
-timeoutflag - Check if target server is accessible
High Failure Rate
- Server under heavy load
- Reduce concurrency with
-cflag - Check server status manually
# Test single request
./bin/stress.exe -n 1 -c 1
# Increase timeout
./bin/stress.exe -n 5 -c 1 -timeout 60s
# Test with default payload
./bin/stress.exe -n 5 -c 1π‘οΈ Security Features:
- β TLS fingerprinting for anti-bot bypass
- β CSRF token handling
- β Session management
- β No data persistence
- β HTTPS communication
π Legal Considerations:
- Use only on systems you own or have permission to test
- Respect rate limits and server capacity
- Do not use for malicious purposes
- Comply with local laws and regulations
- Check troubleshooting section
- Review AGENTS.md for detailed flow
- Test with single request first
- Check network connectivity
- Fork the repository
- Create feature branch
- Test thoroughly
- Submit pull request
Optimal Concurrency
- Start with
-c 5for initial testing - Increase gradually based on server response
- Monitor success rate and adjust accordingly
Load Testing Strategy
- Baseline: Single request to verify functionality
- Light Load: 10 requests with 2-3 workers
- Moderate Load: 50 requests with 10 workers
- Heavy Load: 200+ requests with 50+ workers
Monitoring
- Watch success rate (should be >90%)
- Monitor response times (should be <2s)
- Check for increasing failure rates
- Adjust concurrency based on results
π Built with Go 1.25 for performance and reliability
Last updated: July 2026