mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-17 21:35:26 +00:00
Added retryablehttp
This commit is contained in:
parent
4cb8324b68
commit
2db1ad6ce9
1
go.mod
1
go.mod
@ -7,6 +7,7 @@ require (
|
|||||||
github.com/miekg/dns v1.1.29 // indirect
|
github.com/miekg/dns v1.1.29 // indirect
|
||||||
github.com/projectdiscovery/gologger v1.0.0
|
github.com/projectdiscovery/gologger v1.0.0
|
||||||
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361
|
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361
|
||||||
|
github.com/projectdiscovery/retryablehttp-go v0.0.0-20200404113336-78da8dcb5040
|
||||||
github.com/projectdiscovery/shuffledns v1.0.2 // indirect
|
github.com/projectdiscovery/shuffledns v1.0.2 // indirect
|
||||||
github.com/rs/xid v1.2.1
|
github.com/rs/xid v1.2.1
|
||||||
github.com/stretchr/testify v1.5.1
|
github.com/stretchr/testify v1.5.1
|
||||||
|
|||||||
2
go.sum
2
go.sum
@ -19,6 +19,8 @@ github.com/projectdiscovery/gologger v1.0.0 h1:XAQ8kHeVKXMjY4rLGh7eT5+oHU077BNEv
|
|||||||
github.com/projectdiscovery/gologger v1.0.0/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
|
github.com/projectdiscovery/gologger v1.0.0/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
|
||||||
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361 h1:HXHngEMCoJGgEUigUwX5L2PD1Fpj2EcQMplXgPwpkD4=
|
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361 h1:HXHngEMCoJGgEUigUwX5L2PD1Fpj2EcQMplXgPwpkD4=
|
||||||
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361/go.mod h1:F4246OEiiR3iUPQDt0BRUdEZdlrQVyM+I3Wl3AcFaUg=
|
github.com/projectdiscovery/massdns v0.0.0-20200331204010-f72d136ae361/go.mod h1:F4246OEiiR3iUPQDt0BRUdEZdlrQVyM+I3Wl3AcFaUg=
|
||||||
|
github.com/projectdiscovery/retryablehttp-go v0.0.0-20200404113336-78da8dcb5040 h1:vQQ/wys6mfOVVRyMw+W9lS52J6Iiy7MZp3DXFI94UY0=
|
||||||
|
github.com/projectdiscovery/retryablehttp-go v0.0.0-20200404113336-78da8dcb5040/go.mod h1:SrN6iLZilNG1X4neq1D+SBxoqfAF4nyzvmevkTkWsek=
|
||||||
github.com/projectdiscovery/shuffledns v1.0.2 h1:0gvWe6eHNaUr1xkJCRaYVi33dcFVU/bSaOmKp16mTis=
|
github.com/projectdiscovery/shuffledns v1.0.2 h1:0gvWe6eHNaUr1xkJCRaYVi33dcFVU/bSaOmKp16mTis=
|
||||||
github.com/projectdiscovery/shuffledns v1.0.2/go.mod h1:sp+rOgvOckLYxyzAM8WtxQKkuPyHNcG/xLWkKwLm/Vo=
|
github.com/projectdiscovery/shuffledns v1.0.2/go.mod h1:sp+rOgvOckLYxyzAM8WtxQKkuPyHNcG/xLWkKwLm/Vo=
|
||||||
github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E=
|
github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E=
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package runner
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -10,15 +11,17 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/projectdiscovery/gologger"
|
"github.com/projectdiscovery/gologger"
|
||||||
"github.com/projectdiscovery/nuclei/pkg/matchers"
|
"github.com/projectdiscovery/nuclei/pkg/matchers"
|
||||||
"github.com/projectdiscovery/nuclei/pkg/templates"
|
"github.com/projectdiscovery/nuclei/pkg/templates"
|
||||||
|
retryablehttp "github.com/projectdiscovery/retryablehttp-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Runner is a client for running the enumeration process.
|
// Runner is a client for running the enumeration process.
|
||||||
type Runner struct {
|
type Runner struct {
|
||||||
client *http.Client
|
client *retryablehttp.Client
|
||||||
options *Options
|
options *Options
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,6 +30,26 @@ func New(options *Options) (*Runner, error) {
|
|||||||
runner := &Runner{
|
runner := &Runner{
|
||||||
options: options,
|
options: options,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create the HTTP Client
|
||||||
|
client := retryablehttp.NewWithHTTPClient(&http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
MaxIdleConnsPerHost: -1,
|
||||||
|
TLSClientConfig: &tls.Config{
|
||||||
|
Renegotiation: tls.RenegotiateOnceAsClient,
|
||||||
|
InsecureSkipVerify: true,
|
||||||
|
},
|
||||||
|
DisableKeepAlives: true,
|
||||||
|
},
|
||||||
|
Timeout: time.Duration(options.Timeout) * time.Second,
|
||||||
|
CheckRedirect: func(_ *http.Request, _ []*http.Request) error {
|
||||||
|
return http.ErrUseLastResponse
|
||||||
|
},
|
||||||
|
}, retryablehttp.DefaultOptionsSpraying)
|
||||||
|
client.Backoff = retryablehttp.FullJitterBackoff()
|
||||||
|
client.CheckRetry = retryablehttp.HostSprayRetryPolicy()
|
||||||
|
|
||||||
|
runner.client = client
|
||||||
return runner, nil
|
return runner, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/projectdiscovery/nuclei/pkg/matchers"
|
"github.com/projectdiscovery/nuclei/pkg/matchers"
|
||||||
|
retryablehttp "github.com/projectdiscovery/retryablehttp-go"
|
||||||
"github.com/valyala/fasttemplate"
|
"github.com/valyala/fasttemplate"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,14 +27,14 @@ type Request struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MakeRequest creates a *http.Request from a request template
|
// MakeRequest creates a *http.Request from a request template
|
||||||
func (r *Request) MakeRequest(baseURL string) ([]*http.Request, error) {
|
func (r *Request) MakeRequest(baseURL string) ([]*retryablehttp.Request, error) {
|
||||||
parsed, err := url.Parse(baseURL)
|
parsed, err := url.Parse(baseURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
hostname := parsed.Hostname()
|
hostname := parsed.Hostname()
|
||||||
|
|
||||||
requests := make([]*http.Request, 0, len(r.Path))
|
requests := make([]*retryablehttp.Request, 0, len(r.Path))
|
||||||
for _, path := range r.Path {
|
for _, path := range r.Path {
|
||||||
// Replace the dynamic variables in the URL if any
|
// Replace the dynamic variables in the URL if any
|
||||||
t := fasttemplate.New(path, "{{", "}}")
|
t := fasttemplate.New(path, "{{", "}}")
|
||||||
@ -67,7 +68,12 @@ func (r *Request) MakeRequest(baseURL string) ([]*http.Request, error) {
|
|||||||
req.Header.Set("Connection", "close")
|
req.Header.Set("Connection", "close")
|
||||||
req.Close = true
|
req.Close = true
|
||||||
|
|
||||||
requests = append(requests, req)
|
request, err := retryablehttp.FromRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
requests = append(requests, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
return requests, nil
|
return requests, nil
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user