Files
Shadowsocks-For-WHMCS/Server/shadowsocks/asyncdns.pyc

76 lines
13 KiB
Plaintext
Raw Normal View History

2016-05-27 11:18:25 +08:00
<EFBFBD><EFBFBD>
T#zUc @sfddkZddkZddkZddkZddkZddkZddkZddkZddkZdZ ei
dei <00>Z ei <00>dZdZdZdZdZdZd <00>Zd
<00>Zd <00>Zd <00>Zed <00>Zd<00>Zd<00>Zd<00>Zd<00>Zdefd<00><00>YZdZ dZ!defd<00><00>YZ"d<00>Z#e$djo e#<00>ndS(i<><69><EFBFBD><EFBFBD>Nis(?!-)[A-Z\d-]{1,63}(?<!-)$i<>iiiicCs<>|id<00>}|id<00>}g}xL|D]D}t|<00>}|djodS|it|<00><00>|i|<00>q+W|id<00>di|<00>S(Nt.i?tt(tstriptsplittlentNonetappendtchrtjoin(taddresstlabelstresultstlabeltl((s%/home/wwwroot/shadowsocks/asyncdns.pyt build_addressPs   c CsQtid|dddddd<00>}t|<00>}tid|t<00>}|||S(Ns!HBBHHHHiis!HH(tstructtpackRt QCLASS_IN(R
tqtypet
request_idtheadertaddrt qtype_qclass((s%/home/wwwroot/shadowsocks/asyncdns.pyt build_request^s$ cCs<>|tjotiti||||!<21>S|tjotiti||||!<21>S|ttgjot||<00>dS||||!SdS(Ni( tQTYPE_Atsockett inet_ntoptAF_INETt
QTYPE_AAAAtAF_INET6t QTYPE_CNAMEtQTYPE_NSt
parse_name(taddrtypetdatatlengthtoffset((s%/home/wwwroot/shadowsocks/asyncdns.pytparse_ipes  cCs|}g}t||<19>}x<>|djo<>|d @d
jomtid|||d!<21>d}|dM}t||<00>}|i|d<19>|d7}||di|<00>fS|i||d|d|!<21>|d|7}t||<19>}qW||ddi|<00>fS( Nii<>i@s!Hii<>?iRi<>i<>(tordRtunpackR!RR (R#R%tpR Rtpointertr((s%/home/wwwroot/shadowsocks/asyncdns.pyR!ps  !

 c
Cs<>t||<00>\}}|pptid|||||d!<21>\}}}}t|||||d<17>} |d||| |||ffStid|||||d!<21>\}}|d|d||ddffSdS(Ns!HHiHi
s!HHi(R!RR(R&R(
R#R%tquestiontnlentnamet record_typet record_classt
record_ttltrecord_rdlengthtip((s%/home/wwwroot/shadowsocks/asyncdns.pyt parse_record<72>s+ %c
Cs<>t|<00>djo<>tid|d <20>}|d}|dd@}|dd@}|dd@}|dd@}|d}|d }|d
} |d }
|||||||| |
f SdS( Ni s!HBBHHHHiii<>iiiiii(RRR(R( R#Rtres_idtres_qrtres_tctres_rat res_rcodet res_qdcountt res_ancountt res_nscountt res_arcount((s%/home/wwwroot/shadowsocks/asyncdns.pyt parse_header<65>s




cCsy<>t|<00>djo<>t|<00>}|pdS|\ }}}}}}}} }
g} g} d} xQtd|<00>D]@}t|| t<00>\}}| |7} |o| i|<00>qqqqWxNtd|<00>D]=}t|| <00>\}}| |7} |o| i|<00>q<>q<>Wx6td| <00>D]%}t|| <00>\}}| |7} qWx6td|
<00>D]%}t|| <00>\}}| |7} qOWt<00>}| o| dd|_nx3| D]+}|i i|d|d|df<00>q<>W|SWn9t
j
o-}ddk }|i <00>t i|<00>dSXdS(Ni iiiii<><69><EFBFBD><EFBFBD>(RR>RtxrangeR4tTrueRt DNSResponsethostnametanswerst Exceptiont tracebackt print_exctloggingterror(R#RR5R6R7R8R9R:R;R<R=tqdstansR%tiRR+tresponsetanteRE((s%/home/wwwroot/shadowsocks/asyncdns.pytparse_response<73>sR !

 )  
 c Cs[xTtitifD]@}yti||<00>|SWqttttfj
oqXqWtS(N( RRRt inet_ptont TypeErrort
ValueErrortOSErrortIOErrortFalse(R
tfamily((s%/home/wwwroot/shadowsocks/asyncdns.pytis_ip<69>s cCsTt|<00>djotS|ddjo|d }ntd<00>|id<00>D<><00>S(Ni<4E>i<><69><EFBFBD><EFBFBD>Rcss"x|]}ti|<00>VqWdS(N(tVALID_HOSTNAMEtmatch(t.0tx((s%/home/wwwroot/shadowsocks/asyncdns.pys <genexpr><3E>s (RRUtallR(RB((s%/home/wwwroot/shadowsocks/asyncdns.pytis_valid_hostname<6D>s
RAcBseZd<00>Zd<00>ZRS(cCsd|_g|_dS(N(RRBRC(tself((s%/home/wwwroot/shadowsocks/asyncdns.pyt__init__<5F>s cCsd|it|i<00>fS(Ns%s: %s(RBtstrRC(R^((s%/home/wwwroot/shadowsocks/asyncdns.pyt__str__<5F>s(t__name__t
__module__R_Ra(((s%/home/wwwroot/shadowsocks/asyncdns.pyRA<00>s it DNSResolvercBsneZd<00>Zd<00>Zd<00>Zd<00>Zd d<00>Zd<00>Zd<00>Z d<00>Z
d<00>Z d <00>Z d
<00>Z RS( cCs<>d|_d|_h|_h|_h|_h|_tidd<00>|_ t
i
<00>|_ d|_ d|_ |i<00>|i<00>dS(Nittimeouti,(Rt_loopt _request_idt_hostst_hostname_statust_hostname_to_cbt_cb_to_hostnamet lru_cachetLRUCachet_cachettimet
_last_timet_sockt_serverst _parse_resolvt _parse_hosts(R^((s%/home/wwwroot/shadowsocks/asyncdns.pyR_s        
c
Csg|_y<>tdd<00>ii<00>}z<>|~}|i<00>}x<>|D]<5D>}|i<00>}|oo|id<00>o[|i<00>}t|<00>djo8|d}t |<00>t
i jo|ii |<00>q<>q<>q<>qEqEWWdQXWnt j
onX|ipddg|_ndS(Ns/etc/resolv.conftrbt
nameserveriis8.8.4.4s8.8.8.8(Rrtopent__exit__t __enter__t readlinesRt
startswithRRRWRRRRT(R^t_[1]tftcontenttlinetpartstserver((s%/home/wwwroot/shadowsocks/asyncdns.pyRss$ &   
.
c Cs(d}tiid<00>otidd}ny<>t|d<00>ii<00>}z<>|~}x<>|i<00>D]<5D>}|i<00>}|i<00>}t |<00>djoa|d}t
|<00>oFxCt dt |<00><00>D](}||}|o||i |<q<>q<>Wq<57>qdqdWWdQXWn t j
od|i d <nXdS(
Ns
/etc/hoststWINDIRs/system32/drivers/etc/hostsRuiiis 127.0.0.1t localhost(tostenviront __contains__RwRxRyRzRRRRWR?RhRT( R^tetc_pathR|R}RR<>R3RKRB((s%/home/wwwroot/shadowsocks/asyncdns.pyRt+s&&   
 
+cCs~|iotd<00><00>n||_titititi<00>|_|iit<00>|i |it
i <00>|i |i <00>dS(Nsalready add to loop(RfRDRRt
SOCK_DGRAMtSOL_UDPRqt setblockingRUtaddt eventlooptPOLL_INt add_handlert handle_events(R^tloop((s%/home/wwwroot/shadowsocks/asyncdns.pyt add_to_loop>s
 cCs<>|ii|g<00>}xq|D]i}|ii|<00>o|i|=n|p|o|||f|<00>q||dftd|<16><00>qW|ii|<00>o|i|=n|ii|<00>o|i|=ndS(Nsunknown hostname %s(RjtgetRkR<>RRDRi(R^RBR3RHt callbackstcallback((s%/home/wwwroot/shadowsocks/asyncdns.pyt_call_callbackIs cCs<>t|<00>}|o<>|io<>|i}d}xH|iD]=}|dttfjo |dtjo|d}Pq6q6W| o=|ii|t <00>t
jo!t |i|<|i |t<00>q<>|o||i |<n|i ||<00>ndS(Niii(RORBRRCRRRRiR<>t STATUS_IPV6t STATUS_IPV4t _send_reqRnR<>(R^R#RLRBR3tanswer((s%/home/wwwroot/shadowsocks/asyncdns.pyt _handle_dataXs"  

 
 cCsAx|D]<5D>\}}}||ijoqn|ti@o{tid<00>|ii|i<00>|ii<00>titi ti
ti <00>|_|ii t <00>|ii|iti<00>nI|id<00>\}}|d|ijotid<00>Pn|i|<00>PqWti<00>}||itjo|ii<00>||_ndS(Nsdns socket erriis$received a packet other than our dns(RqR<>tPOLL_ERRRGRHRftremovetcloseRRR<>R<>R<>RUR<>R<>trecvfromRrtwarnR<6E>RoRptCACHE_SWEEP_INTERVALRntsweep(R^teventstsocktfdteventR#Rtnow((s%/home/wwwroot/shadowsocks/asyncdns.pyR<79>ks,      cCs<>|ii|<00>}|oq|i|=|ii|d<00>}|oG|i|<00>|p/|i|=|ii|<00>o|i|=q<>q<>q<>ndS(N(RkR<>RjRR<>RiR<>(R^R<>RBtarr((s%/home/wwwroot/shadowsocks/asyncdns.pytremove_callback<63>s
 
cCs<>|id7_|idjo d|_nt|||i<00>}x@|iD]5}tid|||<00>|ii||df<00>qKWdS(Nii<00>s)resolving %s with type %d using server %si5(RgRRrRGtdebugRqtsendto(R^RBRtreqR<71>((s%/home/wwwroot/shadowsocks/asyncdns.pyR<79><00>s 
  cCst|p|dtd<00><00>nSt|<00>o|||fd<00>n/|ii|<00>o4tid|<00>|i|}|||fd<00>n<>|ii|<00>o4tid|<00>|i|}|||fd<00>n<>t|<00>p|dtd|<16><00>dS|i i
|d<00>}|p>t |i |<|i |t<00>|g|i |<||i|<n|i|<00>|i |t<00>dS(Nsempty hostnames hit hosts: %ss hit cache: %ssinvalid hostname: %s(RRDRWRhR<>RGR<>RnR]RjR<>R<>RiR<>RRkR(R^RBR<>R3R<>((s%/home/wwwroot/shadowsocks/asyncdns.pytresolve<76>s.      cCs(|io|ii<00>d|_ndS(N(RqR<>R(R^((s%/home/wwwroot/shadowsocks/asyncdns.pyR<79><00>s
 N(RbRcR_RsRtR<>RR<>R<>R<>R<>R<>R<>R<>(((s%/home/wwwroot/shadowsocks/asyncdns.pyRds      
cCs<>gtid<00>_tidtidddddd<00>d <00>}ti<00>}t<00>}|i|<00>xKd
d d d dddddddddddgD]}|i ||<00>q<>W|i
<00>dS(NRtleveltformats'%(asctime)s %(levelname)-8s %(message)stdatefmts%Y-%m-%d %H:%M:%Stfilemodesa+cSs |G|GHdS(N((R
RH((s%/home/wwwroot/shadowsocks/asyncdns.pyt _callback<63>sswww.google.coms8.8.8.8R<EFBFBD>sactivate.adobe.comswww.twitter.comsipv6.google.comsipv6.l.google.coms www.gmail.coms!r4---sn-3qqp-ioql.googlevideo.coms www.baidu.comswww.a.shifen.coms
m.baidu.jps www.youku.com( RGt getLoggerthandlerst basicConfigtDEBUGR<47>t EventLoopRdR<>R<>trun(R<>R<>tresolverRB((s%/home/wwwroot/shadowsocks/asyncdns.pyttest<73>s4     t__main__(%RoR<>RRtreRGtcommonRlR<>R<>tcompilet
IGNORECASERXt patch_sockett QTYPE_ANYRRRR RRRR&R!RUR4R>RORWR]tobjectRAR<>R<>RdR<>Rb(((s%/home/wwwroot/shadowsocks/asyncdns.pyt<module>sB         
!   +   )
 <16> !