add: ability to set max workers and add useragent list
This commit is contained in:
parent
50c2df0752
commit
4ba04f5eac
28
defs.go
28
defs.go
@ -30,18 +30,22 @@ type Swamp struct {
|
|||||||
|
|
||||||
scvm []string
|
scvm []string
|
||||||
swampopt *SwampOptions
|
swampopt *SwampOptions
|
||||||
|
started bool
|
||||||
mu *sync.RWMutex
|
mu *sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// DefaultUserAgents representts our default list of useragents
|
defaultStaleTime = time.Duration(1) * time.Hour
|
||||||
|
defWorkers = 100
|
||||||
// DefaultStaleTime represents our default setting for stale proxies
|
|
||||||
DefaultStaleTime = time.Duration(1) * time.Hour
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func defOpt() *SwampOptions {
|
func defOpt() *SwampOptions {
|
||||||
return &SwampOptions{UserAgents: DefaultUserAgents, Stale: DefaultStaleTime}
|
return &SwampOptions{
|
||||||
|
UserAgents: DefaultUserAgents,
|
||||||
|
Stale: defaultStaleTime,
|
||||||
|
MaxWorkers: defWorkers,
|
||||||
|
Debug: false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SwampOptions holds our configuration for Swamp instances
|
// SwampOptions holds our configuration for Swamp instances
|
||||||
@ -53,6 +57,8 @@ type SwampOptions struct {
|
|||||||
Stale time.Duration
|
Stale time.Duration
|
||||||
// Debug when enabled will print results as they come in
|
// Debug when enabled will print results as they come in
|
||||||
Debug bool
|
Debug bool
|
||||||
|
// MaxWorkers determines the maximum amount of workers used for checking proxies
|
||||||
|
MaxWorkers int
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -85,17 +91,17 @@ func init() {
|
|||||||
|
|
||||||
// NewDefaultSwamp returns a Swamp with basic options.
|
// NewDefaultSwamp returns a Swamp with basic options.
|
||||||
func NewDefaultSwamp() *Swamp {
|
func NewDefaultSwamp() *Swamp {
|
||||||
return &Swamp{
|
s := &Swamp{
|
||||||
Socks5: make(chan *Proxy, 500),
|
Socks5: make(chan *Proxy, 500),
|
||||||
Socks4: make(chan *Proxy, 500),
|
Socks4: make(chan *Proxy, 500),
|
||||||
Socks4a: make(chan *Proxy, 500),
|
Socks4a: make(chan *Proxy, 500),
|
||||||
Pending: make(chan string, 1000),
|
Pending: make(chan string, 1000),
|
||||||
|
|
||||||
Stats: &Statistics{
|
Stats: &Statistics{
|
||||||
validated4: 0,
|
Valid4: 0,
|
||||||
validated4a: 0,
|
Valid4a: 0,
|
||||||
validated5: 0,
|
Valid5: 0,
|
||||||
mu: &sync.Mutex{},
|
mu: &sync.Mutex{},
|
||||||
},
|
},
|
||||||
|
|
||||||
Dispensed: 0,
|
Dispensed: 0,
|
||||||
@ -104,4 +110,6 @@ func NewDefaultSwamp() *Swamp {
|
|||||||
swampopt: defOpt(),
|
swampopt: defOpt(),
|
||||||
mu: &sync.RWMutex{},
|
mu: &sync.RWMutex{},
|
||||||
}
|
}
|
||||||
|
go s.feed()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
17
main.go
17
main.go
@ -37,11 +37,21 @@ func (s *Swamp) LoadProxyTXT(seedFile string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scan := bufio.NewScanner(f)
|
scan := bufio.NewScanner(f)
|
||||||
go s.tossUp()
|
|
||||||
|
if !s.started {
|
||||||
|
go s.tossUp()
|
||||||
|
}
|
||||||
|
|
||||||
for scan.Scan() {
|
for scan.Scan() {
|
||||||
s.scvm = append(s.scvm, scan.Text())
|
s.scvm = append(s.scvm, scan.Text())
|
||||||
}
|
}
|
||||||
go s.feed()
|
|
||||||
|
if !s.started {
|
||||||
|
go s.feed()
|
||||||
|
}
|
||||||
|
|
||||||
|
s.started = true
|
||||||
|
|
||||||
if err := f.Close(); err != nil {
|
if err := f.Close(); err != nil {
|
||||||
s.dbgPrint(err.Error())
|
s.dbgPrint(err.Error())
|
||||||
return err
|
return err
|
||||||
@ -216,10 +226,13 @@ func (s *Swamp) tossUp() {
|
|||||||
|
|
||||||
switch p.Proto {
|
switch p.Proto {
|
||||||
case "4":
|
case "4":
|
||||||
|
s.Stats.v4()
|
||||||
s.Socks4 <- p
|
s.Socks4 <- p
|
||||||
case "4a":
|
case "4a":
|
||||||
|
s.Stats.v4a()
|
||||||
s.Socks4a <- p
|
s.Socks4a <- p
|
||||||
case "5":
|
case "5":
|
||||||
|
s.Stats.v5()
|
||||||
s.Socks5 <- p
|
s.Socks5 <- p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
setters.go
13
setters.go
@ -1,5 +1,7 @@
|
|||||||
package pxndscvm
|
package pxndscvm
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
// AddUserAgents appends to the list of useragents we randomly choose from during proxied requests
|
// AddUserAgents appends to the list of useragents we randomly choose from during proxied requests
|
||||||
func (s *Swamp) AddUserAgents(uagents []string) {
|
func (s *Swamp) AddUserAgents(uagents []string) {
|
||||||
// mutex lock so that RLock during proxy checking will block while we change this value
|
// mutex lock so that RLock during proxy checking will block while we change this value
|
||||||
@ -15,14 +17,25 @@ func (s *Swamp) SetUserAgents(uagents []string) {
|
|||||||
s.swampopt.UserAgents = append(s.swampopt.UserAgents, uagents...)
|
s.swampopt.UserAgents = append(s.swampopt.UserAgents, uagents...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EnableDebug enables printing of verbose messages during operation
|
||||||
func (s *Swamp) EnableDebug() {
|
func (s *Swamp) EnableDebug() {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
s.swampopt.Debug = true
|
s.swampopt.Debug = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DisableDebug enables printing of verbose messages during operation
|
||||||
func (s *Swamp) DisableDebug() {
|
func (s *Swamp) DisableDebug() {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
s.swampopt.Debug = false
|
s.swampopt.Debug = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetMaxWorkers set the maximum workers for proxy checking, this must be set before calling LoadProxyTXT fpr tje forst time
|
||||||
|
func (s *Swamp) SetMaxWorkers(num int) error {
|
||||||
|
if s.started {
|
||||||
|
return errors.New("can't change max workers during proxypool operation, only before")
|
||||||
|
}
|
||||||
|
s.swampopt.MaxWorkers = num
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
12
stats.go
12
stats.go
@ -4,9 +4,9 @@ import "sync"
|
|||||||
|
|
||||||
// Statistics is used to encapsulate various swampy stats
|
// Statistics is used to encapsulate various swampy stats
|
||||||
type Statistics struct {
|
type Statistics struct {
|
||||||
validated4 int
|
Valid4 int
|
||||||
validated4a int
|
Valid4a int
|
||||||
validated5 int
|
Valid5 int
|
||||||
|
|
||||||
mu *sync.Mutex
|
mu *sync.Mutex
|
||||||
}
|
}
|
||||||
@ -14,17 +14,17 @@ type Statistics struct {
|
|||||||
func (stats *Statistics) v4() {
|
func (stats *Statistics) v4() {
|
||||||
stats.mu.Lock()
|
stats.mu.Lock()
|
||||||
defer stats.mu.Unlock()
|
defer stats.mu.Unlock()
|
||||||
stats.validated4++
|
stats.Valid4++
|
||||||
}
|
}
|
||||||
|
|
||||||
func (stats *Statistics) v4a() {
|
func (stats *Statistics) v4a() {
|
||||||
stats.mu.Lock()
|
stats.mu.Lock()
|
||||||
defer stats.mu.Unlock()
|
defer stats.mu.Unlock()
|
||||||
stats.validated4a++
|
stats.Valid4a++
|
||||||
}
|
}
|
||||||
|
|
||||||
func (stats *Statistics) v5() {
|
func (stats *Statistics) v5() {
|
||||||
stats.mu.Lock()
|
stats.mu.Lock()
|
||||||
defer stats.mu.Unlock()
|
defer stats.mu.Unlock()
|
||||||
stats.validated5++
|
stats.Valid5++
|
||||||
}
|
}
|
||||||
|
20006
useragents.go
20006
useragents.go
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user