@@ -165,14 +165,15 @@ def _randbelow(n):
165165
166166
167167class session (Thread ):
168- def __init__ (self , conn , pSocket , connectURLs , redirectURLs ):
168+ def __init__ (self , conn , pSocket , connectURLs , redirectURLs , FwdTarget ):
169169 Thread .__init__ (self )
170170 self .pSocket = pSocket
171171 self .connectURLs = connectURLs
172172 self .redirectURLs = redirectURLs
173173 self .conn = conn
174174 self .connect_closed = False
175- self .socks_connected = False
175+ self .session_connected = False
176+ self .fwd_target = FwdTarget
176177
177178 def url_sample (self ):
178179 return random .choice (self .connectURLs )
@@ -269,6 +270,13 @@ def handleSocks(self, sock):
269270 except timeout :
270271 return False
271272
273+ def handleFwd (self , sock ):
274+ log .debug ("Forward detected" )
275+ host , port = self .fwd_target .split (':' , 1 )
276+ mark = self .setupRemoteSession (host , int (port ))
277+ return bool (mark )
278+
279+
272280 def error_log (self , str_format , headers ):
273281 if K ['X-ERROR' ] in headers :
274282 message = headers [K ["X-ERROR" ]]
@@ -431,8 +439,12 @@ def writer(self):
431439
432440 def run (self ):
433441 try :
434- self .socks_connected = self .handleSocks (self .pSocket )
435- if self .socks_connected :
442+ if self .fwd_target :
443+ self .session_connected = self .handleFwd (self .pSocket )
444+ else :
445+ self .session_connected = self .handleSocks (self .pSocket )
446+
447+ if self .session_connected :
436448 log .debug ("Staring reader" )
437449 r = Thread (target = self .reader )
438450 r .start ()
@@ -449,7 +461,7 @@ def run(self):
449461 log .error ('[RUN] {}' .format (e ))
450462 raise e
451463 finally :
452- if self .socks_connected :
464+ if self .session_connected :
453465 self .closeRemoteSession ()
454466
455467
@@ -607,6 +619,7 @@ def file_write(filename, data):
607619 parser = argparse .ArgumentParser (description = "Socks server for Neoreg HTTP(s) tunneller. DEBUG MODE: -k (debug_all|debug_base64|debug_headers_key|debug_headers_values)" )
608620 parser .add_argument ("-u" , "--url" , metavar = "URI" , required = True , help = "The url containing the tunnel script" , action = 'append' )
609621 parser .add_argument ("-r" , "--redirect-url" , metavar = "URL" , help = "Intranet forwarding the designated server (only jsp(x))" , action = 'append' )
622+ parser .add_argument ("-t" , "--target" , metavar = "IP:PORT" , help = "Network forwarding Target, After setting this parameter, port forwarding will be enabled" )
610623 parser .add_argument ("-k" , "--key" , metavar = "KEY" , required = True , help = "Specify connection key" )
611624 parser .add_argument ("-l" , "--listen-on" , metavar = "IP" , help = "The default listening address.(default: 127.0.0.1)" , default = "127.0.0.1" )
612625 parser .add_argument ("-p" , "--listen-port" , metavar = "PORT" , help = "The default listening port.(default: 1080)" , type = int , default = 1080 )
@@ -701,7 +714,15 @@ def file_write(filename, data):
701714 INIT_COOKIE = args .cookie
702715 PROXY = { 'http' : args .proxy , 'https' : args .proxy } if args .proxy else None
703716
704- print (" Starting socks server [%s:%d]" % (args .listen_on , args .listen_port ) )
717+ if args .target :
718+ if not re .match (r'[^:]+:\d+' , args .target ):
719+ print ("[!] Target parameter error: {}" .format (args .target ))
720+ exit ()
721+ print (" Starting Forward [%s:%d] => [%s]" % (args .listen_on , args .listen_port , args .target ))
722+ else :
723+ print (" Starting SOCKS5 server [%s:%d]" % (args .listen_on , args .listen_port ))
724+
725+
705726 print (" Tunnel at:" )
706727 for url in urls :
707728 print (" " + url )
@@ -746,7 +767,7 @@ def file_write(filename, data):
746767 sock , addr_info = servSock .accept ()
747768 sock .settimeout (SOCKTIMEOUT )
748769 log .debug ("Incomming connection" )
749- session (conn , sock , urls , redirect_urls ).start ()
770+ session (conn , sock , urls , redirect_urls , args . target ).start ()
750771 except KeyboardInterrupt as ex :
751772 break
752773 except timeout :
0 commit comments