66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"git.sual.in/casual/gobuster-lib/cli"
|
||
|
"git.sual.in/casual/gobuster-lib/gobustervhost"
|
||
|
"git.sual.in/casual/gobuster-lib/libgobuster"
|
||
|
)
|
||
|
|
||
|
func BenchmarkVhostMode(b *testing.B) {
|
||
|
h := httpServer(b, "test")
|
||
|
defer h.Close()
|
||
|
|
||
|
pluginopts := gobustervhost.NewOptionsVhost()
|
||
|
pluginopts.URL = h.URL
|
||
|
pluginopts.Timeout = 10 * time.Second
|
||
|
|
||
|
wordlist, err := os.CreateTemp("", "")
|
||
|
if err != nil {
|
||
|
b.Fatalf("could not create tempfile: %v", err)
|
||
|
}
|
||
|
defer os.Remove(wordlist.Name())
|
||
|
for w := 0; w < 1000; w++ {
|
||
|
_, _ = wordlist.WriteString(fmt.Sprintf("%d\n", w))
|
||
|
}
|
||
|
wordlist.Close()
|
||
|
|
||
|
globalopts := libgobuster.Options{
|
||
|
Threads: 10,
|
||
|
Wordlist: wordlist.Name(),
|
||
|
NoProgress: true,
|
||
|
}
|
||
|
|
||
|
ctx := context.Background()
|
||
|
oldStdout := os.Stdout
|
||
|
oldStderr := os.Stderr
|
||
|
defer func(out, err *os.File) { os.Stdout = out; os.Stderr = err }(oldStdout, oldStderr)
|
||
|
devnull, err := os.Open(os.DevNull)
|
||
|
if err != nil {
|
||
|
b.Fatalf("could not get devnull %v", err)
|
||
|
}
|
||
|
defer devnull.Close()
|
||
|
log := libgobuster.NewLogger(false)
|
||
|
|
||
|
// Run the real benchmark
|
||
|
for x := 0; x < b.N; x++ {
|
||
|
os.Stdout = devnull
|
||
|
os.Stderr = devnull
|
||
|
plugin, err := gobustervhost.NewGobusterVhost(&globalopts, pluginopts)
|
||
|
if err != nil {
|
||
|
b.Fatalf("error on creating gobusterdir: %v", err)
|
||
|
}
|
||
|
|
||
|
if err := cli.Gobuster(ctx, &globalopts, plugin, log); err != nil {
|
||
|
b.Fatalf("error on running gobuster: %v", err)
|
||
|
}
|
||
|
os.Stdout = oldStdout
|
||
|
os.Stderr = oldStderr
|
||
|
}
|
||
|
}
|