Skip to content

Commit ee3e213

Browse files
committed
Added better verbose output
If the verbose flag is passed the program will display what socks proxies will be used and what the current socks/http listeners are in use. Next, the verbose flag will show what proxy it's using each time there is a connection
1 parent ed709cb commit ee3e213

File tree

2 files changed

+54
-21
lines changed

2 files changed

+54
-21
lines changed

main.go

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/eahydra/socks"
1616
"github.com/elazarl/goproxy"
17+
"github.com/jamesbcook/print"
1718
)
1819

1920
var (
@@ -69,59 +70,73 @@ func main() {
6970
myFlags := flagSetup()
7071
f, err := os.Open(myFlags.userAgentFile)
7172
if err != nil {
72-
log.Fatal(err)
73+
print.Badln(err)
7374
}
7475
f2, err := os.Open(myFlags.socks5File)
7576
if err != nil {
76-
log.Fatal(err)
77+
print.Badln(err)
7778
}
7879
var buf bytes.Buffer
7980
buf.ReadFrom(f)
8081
ua := &UserAgent{}
8182
if err := json.Unmarshal(buf.Bytes(), ua); err != nil {
82-
log.Fatal(err)
83+
print.Badln(err)
8384
}
8485
buf.Reset()
8586
proxies := &SocksProxy{}
8687
buf.ReadFrom(f2)
8788
if err := json.Unmarshal(buf.Bytes(), proxies); err != nil {
88-
log.Fatal(err)
89+
print.Badln(err)
90+
}
91+
var router socks.Dialer
92+
proxy := goproxy.NewProxyHttpServer()
93+
if myFlags.verbose {
94+
router = logBuildUpStream(BuildUpstreamRouter)(proxies.Names)
95+
proxy.ConnectDial = func(network, address string) (net.Conn, error) {
96+
return logDialer(router.Dial)(network, address)
97+
}
98+
proxy.Tr.Dial = func(network, address string) (net.Conn, error) {
99+
return logDialer(router.Dial)(network, address)
100+
}
101+
} else {
102+
router = BuildUpstreamRouter(proxies.Names)
103+
proxy.ConnectDial = func(network, address string) (net.Conn, error) {
104+
return router.Dial(network, address)
105+
}
106+
proxy.Tr.Dial = func(network, address string) (net.Conn, error) {
107+
return router.Dial(network, address)
108+
}
89109
}
90-
router := BuildUpstreamRouter(proxies.Names)
91110
socksListen, err := net.Listen("tcp", myFlags.socksListener)
92111
if err != nil {
93-
log.Fatal(err)
112+
print.Badln(err)
113+
}
114+
if myFlags.verbose {
115+
print.Goodf("Started socks listener on %s\n", myFlags.socksListener)
94116
}
95117
socksvr, err := socks.NewSocks5Server(router)
96118
if err != nil {
97-
log.Fatal(err)
119+
print.Badln(err)
98120
}
99121
httpListen, err := net.Listen("tcp", myFlags.httpListener)
100122
if err != nil {
101-
log.Fatal(err)
123+
print.Badln(err)
124+
}
125+
if myFlags.verbose {
126+
print.Goodf("Started http listener on %s\n", myFlags.httpListener)
102127
}
103-
proxy := goproxy.NewProxyHttpServer()
104128
proxy.OnRequest().HandleConnect(goproxy.AlwaysMitm)
105129
proxy.OnRequest().DoFunc(
106130
func(r *http.Request, ctx *goproxy.ProxyCtx) (*http.Request, *http.Response) {
107131
r.Header.Set("User-Agent", ua.randomName())
108132
return r, nil
109133
})
110-
proxy.ConnectDial = func(network, address string) (net.Conn, error) {
111-
return router.Dial(network, address)
112-
}
113-
proxy.Tr.Dial = func(network, address string) (net.Conn, error) {
114-
return router.Dial(network, address)
115-
}
116-
if myFlags.verbose {
117-
proxy.Verbose = true
118-
}
119-
120134
go func() {
121135
http.Serve(httpListen, proxy)
122136
}()
137+
print.Goodln("Ready")
123138
if err := socksvr.Serve(socksListen); err != nil {
124-
log.Fatal(err)
139+
print.Badln(err)
125140
}
126141
}
127142

@@ -150,6 +165,14 @@ func (u *UpstreamDialer) getRandomDialer() socks.Dialer {
150165
return u.forwardDialers[randomDialer]
151166
}
152167

168+
func logDialer(f func(network, address string) (net.Conn, error)) func(network, address string) (net.Conn, error) {
169+
return func(network, address string) (net.Conn, error) {
170+
conn, err := f(network, address)
171+
print.Statusf("Connecting to %v\n", conn.RemoteAddr())
172+
return conn, err
173+
}
174+
}
175+
153176
//Dial is a custom dialer that picks a random dialer before it makes it's connection
154177
func (u *UpstreamDialer) Dial(network, address string) (net.Conn, error) {
155178
router := u.getRandomDialer()
@@ -160,6 +183,16 @@ func (u *UpstreamDialer) Dial(network, address string) (net.Conn, error) {
160183
return conn, nil
161184
}
162185

186+
func logBuildUpStream(f func(proxies []string) socks.Dialer) func(proxies []string) socks.Dialer {
187+
return func(proxies []string) socks.Dialer {
188+
for x := range proxies {
189+
print.Statusf("Loading %s\n", proxies[x])
190+
}
191+
defer print.Goodln("Loading complete")
192+
return f(proxies)
193+
}
194+
}
195+
163196
//BuildUpstreamRouter populates the slice of dialers
164197
func BuildUpstreamRouter(proxies []string) socks.Dialer {
165198
var allForward []socks.Dialer

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.1.0
1+
0.2.0

0 commit comments

Comments
 (0)