@@ -880,6 +880,17 @@ async def test_url(url, rserver):
880880print (body .decode ('utf8' , 'ignore' ))
881881print (f'============ success ============' )
882882
883+ def print_server_started (option , server , print_fn ):
884+ for s in server .sockets :
885+ # https://github.com/MagicStack/uvloop/blob/master/uvloop/pseudosock.pyx
886+ laddr = s .getsockname () # tuple size varies with protocol family
887+ h = laddr [0 ]
888+ p = laddr [1 ]
889+ f = str (s .family )
890+ ipversion = "ipv4" if f == "AddressFamily.AF_INET" else ("ipv6" if f == "AddressFamily.AF_INET6" else "ipv?" ) # TODO better
891+ bind = ipversion + ' ' + h + ':' + str (p )
892+ print_fn (option , bind )
893+
883894def main (args = None ):
884895parser = argparse .ArgumentParser (description = __description__ + '\n Supported protocols: http,socks4,socks5,shadowsocks,shadowsocksr,redirect,pf,tunnel' , epilog = f'Online help: <{ __url__ } >' )
885896parser .add_argument ('-l' , dest = 'listen' , default = [], action = 'append' , type = proxies_by_uri , help = 'tcp server uri (default: http+socks4+socks5://:8080/)' )
@@ -942,27 +953,36 @@ def main(args = None):
942953from . import verbose
943954verbose .setup (loop , args )
944955servers = []
956+ def print_fn (option , bind = None ):
957+ print ('Serving on' , (bind or option .bind ), 'by' , "," .join (i .name for i in option .protos ) + ('(SSL)' if option .sslclient else '' ), '({}{})' .format (option .cipher .name , ' ' + ',' .join (i .name () for i in option .cipher .plugins ) if option .cipher and option .cipher .plugins else '' ) if option .cipher else '' )
945958for option in args .listen :
946- print ('Serving on' , option .bind , 'by' , "," .join (i .name for i in option .protos ) + ('(SSL)' if option .sslclient else '' ), '({}{})' .format (option .cipher .name , ' ' + ',' .join (i .name () for i in option .cipher .plugins ) if option .cipher and option .cipher .plugins else '' ) if option .cipher else '' )
947959try :
948960server = loop .run_until_complete (option .start_server (vars (args )))
961+ print_server_started (option , server , print_fn )
949962servers .append (server )
950963except Exception as ex :
964+ print_fn (option )
951965print ('Start server failed.\n \t ==>' , ex )
966+ def print_fn (option , bind = None ):
967+ print ('Serving on UDP' , (bind or option .bind ), 'by' , "," .join (i .name for i in option .protos ), f'({ option .cipher .name } )' if option .cipher else '' )
952968for option in args .ulisten :
953- print ('Serving on UDP' , option .bind , 'by' , "," .join (i .name for i in option .protos ), f'({ option .cipher .name } )' if option .cipher else '' )
954969try :
955970server , protocol = loop .run_until_complete (option .udp_start_server (vars (args )))
971+ print_server_started (option , server , print_fn )
956972servers .append (server )
957973except Exception as ex :
974+ print_fn (option )
958975print ('Start server failed.\n \t ==>' , ex )
976+ def print_fn (option , bind = None ):
977+ print ('Serving on' , (bind or option .bind ), 'backward by' , "," .join (i .name for i in option .protos ) + ('(SSL)' if option .sslclient else '' ), '({}{})' .format (option .cipher .name , ' ' + ',' .join (i .name () for i in option .cipher .plugins ) if option .cipher and option .cipher .plugins else '' ) if option .cipher else '' )
959978for option in args .rserver :
960979if isinstance (option , ProxyBackward ):
961- print ('Serving on' , option .bind , 'backward by' , "," .join (i .name for i in option .protos ) + ('(SSL)' if option .sslclient else '' ), '({}{})' .format (option .cipher .name , ' ' + ',' .join (i .name () for i in option .cipher .plugins ) if option .cipher and option .cipher .plugins else '' ) if option .cipher else '' )
962980try :
963981server = loop .run_until_complete (option .start_backward_client (vars (args )))
982+ print_server_started (option , server , print_fn )
964983servers .append (server )
965984except Exception as ex :
985+ print_fn (option )
966986print ('Start server failed.\n \t ==>' , ex )
967987if servers :
968988if args .sys :
0 commit comments