add: ability to set max workers and add useragent list

This commit is contained in:
kayos@tcp.direct 2021-09-13 03:08:04 -07:00
parent 50c2df0752
commit 4ba04f5eac
5 changed files with 20057 additions and 19 deletions

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

@ -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
} }
} }

@ -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
}

@ -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++
} }

File diff suppressed because it is too large Load Diff