@@ -14,6 +14,7 @@ import (
1414
1515 "github.com/eahydra/socks"
1616 "github.com/elazarl/goproxy"
17+ "github.com/jamesbcook/print"
1718)
1819
1920var (
@@ -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
154177func (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
164197func BuildUpstreamRouter (proxies []string ) socks.Dialer {
165198 var allForward []socks.Dialer
0 commit comments