forked from projectdiscovery/interactsh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bench.go
81 lines (69 loc) · 1.7 KB
/
bench.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"flag"
"fmt"
"log"
"github.com/JanHoffmannTU/interactsh/pkg/client"
"github.com/miekg/dns"
"github.com/projectdiscovery/retryabledns"
"github.com/remeh/sizedwaitgroup"
)
var (
serverURL = flag.String("url", "https://hackwithautomation.com", "URL of the interactsh server")
serverIP = flag.String("ip", "138.68.140.25", "IP of benchmarked server")
pollCount = flag.Int("poll-count", 10, "Number of poll interactions per registered URL")
n = flag.Int("n", 1000, "Number of interactsh sessions to register")
concurrency = flag.Int("c", 300, "Number of concurrent requests to send")
token = flag.String("token", "gg", "Authentication token for the server")
)
var (
errors = int64(0)
requests = int64(0)
polls = int64(0)
)
func main() {
flag.Parse()
if err := process(); err != nil {
log.Fatalf("Could not process: %s\n", err)
}
}
func process() error {
swg := sizedwaitgroup.New(*concurrency)
for i := 0; i < *n; i++ {
swg.Add()
go func() {
benchmarkServer()
swg.Done()
}()
}
swg.Wait()
fmt.Printf("Send: errors=%v requests=%v polls=%v\n", errors, requests, polls)
return nil
}
func benchmarkServer() {
client, err := client.New(&client.Options{
ServerURL: *serverURL,
Token: *token,
})
if err != nil {
errors++
log.Printf("Unexpected register response: %v\n", err)
return
}
dnsClient, err := retryabledns.New([]string{*serverIP + ":53"}, 1)
if err != nil {
log.Fatal(err)
}
for i := 0; i < *pollCount; i++ {
client.URL()
polls++
data, err := dnsClient.Query(client.URL(), dns.TypeA)
if err != nil {
errors++
log.Printf("Unexpected resolve response: %v\n", err)
continue
}
_ = data
}
requests++
}