V Qc@sdZddlZddlZddlZddlZddlZddlZddlZdZdZ ddZ dZ dZ dZd Zdd lmZe dS( sIA multi-threaded telnet-like server that gives a Python prompt. This is really a prototype for the same thing in C. Usage: pysvr.py [port] For security reasons, it only accepts requests from the current host. This can still be insecure, but restricts violations from people who can log in on your machine. Use with caution! iNicCsyDtjtjdd\}}t|dkrCtjdnWn tjk rf}t|nXx|D] \}}qnW|rytj|d}Wqtk r}t|qXnt }t |dS(NitsToo many arguments.i( tgetopttsystargvtlenterrortusagetstringtatoit ValueErrortPORTt main_thread(toptstargstmsgtotatport((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pytmainscCs3tjt_|r|GHndGtGtjddS(Ns i(Rtstderrtstdoutt__doc__texit(R((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyR%s  cCstjtjtj}|jd|f|jddG|GdGHxl|j\}}|d|jdkr|jdG|dGdGHqHntj t ||f~~qHdS(NRisListening on ports...is'Refusing connection from non-local hostt.( tsockettAF_INETt SOCK_STREAMtbindtlistentacceptt getsocknametclosetthreadtstart_new_threadtservice_thread(Rtsocktconntaddr((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyR ,s   cCsl|\}}dttj|fG|jd}|jdd}t||dttjGdS(Ns"Thread %s has connection from %s. trtwisThread %s is done. (tstrR t get_identtmakefiletrun_interpreter(R$R%tcaddrtcporttstdinR((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyR":s  cCs{i}yttjWndt_nXd}x7|jtj|j}|d dkrhd}n| rz| rzPn|ddkr|d d}n||}yt|}Wn5tk r}d}tjt|dd|q3nX|sq3nd}yt ||||Wq3t k rf}|rbyt|}Wn d}nX|jd |nPq3Xq3|jd dS( Ns>>> Risis s tfilesExit %s s Goodbye. ( R(Rtps1twritetreadlinetcompile_commandt SyntaxErrort tracebacktprint_exceptiontNonet run_commandt SystemExit(R.Rtglobalstsourcetlinetcodeterrthow((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyR+CsH     c Bsejejejf}z|e_e_|e_y ||UWnlek rk}e|ejdnDej\}}}|r|j}nej|||~nXWd|\e_e_e_XdS(Ni( RR.RRR9texc_infottb_nextR5R6( R=R.RR:tsaveR?ttypetvaluettb((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyR8is    (R3(RRtosRRR RR5R RR7RR R"R+R8R=R3(((s(/usr/lib64/python2.7/Demo/pysvr/pysvr.pyt sT    &