/
client.go
91 lines (72 loc) · 1.71 KB
/
client.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
82
83
84
85
86
87
88
89
90
91
package BasicAuthBruteForce
import (
"crypto/tls"
"encoding/base64"
"fmt"
"golang.org/x/net/proxy"
"log"
"net/http"
)
//var count int
const (
authorizationHeader = "Authorization"
userAgentHeader = "User-Agent"
defaultAuthorizationHeader = "Basic "
)
var maxRetries = 20
var response *http.Response
type Client struct {
client *http.Client
}
func NewClient() *Client {
return &Client{
client: &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
},
}
}
func (c *Client) SetProxy(dialer proxy.Dialer) {
transport := &http.Transport{
Dial: dialer.Dial,
}
c.client.Transport = transport
}
func (c *Client) SetHeader(siteurl, agent, user, pass string) bool {
req, err := http.NewRequest(http.MethodGet, siteurl, nil)
if err != nil {
log.Panic(err.Error())
}
// Encode to base64
data := user + ":" + pass
userpass := base64.StdEncoding.EncodeToString([]byte(data))
// fmt.Println(data)
// Set HTTP headers
req.Header.Set(userAgentHeader, agent)
req.Header.Set(authorizationHeader, defaultAuthorizationHeader+userpass)
for i := 0; i < maxRetries; i++ {
response, err = c.client.Do(req)
if err == nil && response != nil {
// Success, break out of the loop
break
} else {
}
}
defer func() {
if err := response.Body.Close(); err != nil {
recover()
log.Println(err)
}
}()
if response.StatusCode == http.StatusOK || response.StatusCode == http.StatusMovedPermanently {
return true
} else if response.StatusCode == http.StatusUnauthorized {
//fmt.Println(response.StatusCode, user, pass)
return false
} else {
fmt.Println(response.StatusCode, "User name :"+user, "Password : "+pass)
return false
}
return true
}