MCPcopy
hub / github.com/tsenart/vegeta / FuzzAttackerHTTP

Function FuzzAttackerHTTP

lib/attack_fuzz.go:72–129  ·  view source on GitHub ↗

FuzzAttackerHTTP fuzzes valid HTTP responses to attacker.

(fuzz []byte)

Source from the content-addressed store, hash-verified

70
71// FuzzAttackerHTTP fuzzes valid HTTP responses to attacker.
72func FuzzAttackerHTTP(fuzz []byte) int {
73 // Decode response
74 code, headers, body, ok := decodeFuzzResponse(fuzz)
75 if !ok {
76 return -1
77 }
78
79 // Start server
80 directory, err := os.MkdirTemp("/tmp", "fuzz")
81 if err != nil {
82 panic(err.Error())
83 }
84 socket := fmt.Sprintf("%s/attacker.sock", directory)
85 listener, err := net.Listen("unix", socket)
86 if err != nil {
87 panic(err.Error())
88 }
89 handler := func(response http.ResponseWriter, request *http.Request) {
90 for name, values := range headers {
91 for _, value := range values {
92 response.Header().Add(name, value)
93 }
94 }
95 response.WriteHeader(int(code))
96 _, err := response.Write(body)
97 if err != nil {
98 panic(err.Error())
99 }
100 }
101 server := http.Server{
102 Handler: http.HandlerFunc(handler),
103 }
104 defer server.Close()
105 defer listener.Close()
106 defer os.RemoveAll(directory)
107 go server.Serve(listener)
108
109 // Setup targeter
110 targeter := Targeter(func(target *Target) error {
111 target.Method = "GET"
112 target.URL = "http://vegeta.test"
113 return nil
114 })
115
116 // Deliver a single hit
117 attacker := NewAttacker(
118 UnixSocket(socket),
119 Workers(1),
120 MaxWorkers(1),
121 Timeout(time.Second),
122 KeepAlive(false),
123 )
124 result := attacker.hit(targeter, "fuzz")
125 if result.Error != "" {
126 return 0
127 }
128 return 1
129}

Callers

nothing calls this directly

Calls 12

hitMethod · 0.95
decodeFuzzResponseFunction · 0.85
TargeterFuncType · 0.85
NewAttackerFunction · 0.85
UnixSocketFunction · 0.85
WorkersFunction · 0.85
MaxWorkersFunction · 0.85
TimeoutFunction · 0.85
KeepAliveFunction · 0.85
WriteMethod · 0.80
AddMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected