From 9e5b2140b328cd52dc9ec84d83d60b9f8736655d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:18:00 -0700 Subject: [PATCH 01/18] Add files via upload --- images/output_client.PNG | Bin 0 -> 37365 bytes images/output_server.PNG | Bin 0 -> 33867 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/output_client.PNG create mode 100644 images/output_server.PNG diff --git a/images/output_client.PNG b/images/output_client.PNG new file mode 100644 index 0000000000000000000000000000000000000000..959e258cbd96bb33f25f34495a0a922aeaae6d36 GIT binary patch literal 37365 zcmaHycT`hN_wPXz6cJQVdQp1sC3GwxgpPo8q(yoOJrG0$R3P*s9U&mnr1vJh1qd}% z={-mdAp|Zy@ALkC_x^LUR#whAE1AsMvuE#pKHr(o+L|i&Na;uk2ng<}zIvfcKtSX| zKtM=)oA~<5{+74o^#>tXSLGQ&DS~0^`s5}^NkfT%pgj8S#oJrg=Xcy*8G#81$UFbO z2@`qA=?Ms8zo@=YdhKhzm(dI}tDXv{*w<%azpeAlRFR7N)>UTQho`25TgZg!XDmPnbtr`tCW#U%{u#?JiMqB**y6+A8H7lWytAGmd65qr6Y-kNeU3q&dO ziu^jP7`9DKUvAiXY^w5A>#Jx6e(!$iGoL77$wVw(+^(ye{u;EyPdH^Cf z;N~<*Keiu$_r!=qf&$ZePdjHA+T9(+W-|7Dw8o;m^9jI_%h8F3jXhVmMRfacEAwf= z;R(7C;_4%4&gfm1P*@?>pLx8s=0|cV25;h+okC676G-phkG%@>@;o^lRbhaIyDc!! zscuYY<@r+M;@n{Jt86Oa*L|}f9bRB0f0?@G=%%qOJd#yCyyk0?E+g%OW}EL$;XVeG zBP!h8PVo!9xv{uw)#wo2^poKb1^U>NHWRzGz&97qEMr)^92Sf305wW#A?U7_Dlv_X ziwkX<2RG}F@U@Nef(ivL=xrnYBtiMvy@i$qJanUIz8T{hSKq`mJ7t8tXoaHWP(EQ4 zKEn%(^K$1dFqFrSs(ws+IVwE76@7`_mIDwG8yBwv$|0|Cd4G2Cdv_0Nq9z^3^!?E>MK24N;3&( z98IpAQ~sFFT7LLu zyUn~MpdNC5{D&TL(O+Md6^F>3pPw%or)5IQ4t@;8&o|HGESUDq@zA8jBNdgLi(13fVAk#qp2%xWlyBI$9*P6M?R>4q^zcyR6a7JW|QB0>~47w@SW1;ee^ptm>y$wZC$6#hmuFt9IXMJrTeThNqM* z>@Lio+i}judb$Ljc7=OhVj-Bfx3hrt0cj)L7KwV1hC2`_NPyuT+@vum#T2#AStC^| zeS+J^WHIkEDO~ztwoevu_=tdV9Nz>g?MNC@jyuU}Y{cQd=VCfu&S2S_@uz6?ylD4C zC2MQe)Yu#Z{saW%wA(gn3?OmvSC$#|k;Qo>=Upi3B^l6H?|=pPakh_6w{pwE@sG=x zvJ{#Rx7|(Ulr|i#^&82&=!?AtCcv)6KVXHQ9cXK^7pU9P%j;fFA!aswQ1Y{5KSXV| zXFw17+p4FJe0-wG4^Ar>`o)W^86 z;U%GYh3xsN()Q~yjl*n3}Bt(D2H_!84PekcD+a}WlP)@W#N zf%dBrSDKkp7xvx=YC*~QxxLy)HQE$At_#slFR~dSj{M^QT(#a9^p%$cBn3G)kC&KJ z2W^P1+zCx zY5od-rh7}wD#j2q!d~XM^VTCQ`t-6qj%g3Kls4JMdiDW&Bh*6d{HVSN;9*q7nz;3}L7B$N?Kc%WOPq zJgs6|23H1?e1GDw&+|cIw)WLJjq)J9YKx>w$;?)~4E(Acm9Ax7oN5~~fjH^@v5?~L zG|3nNdEGOfA2?ZB`2e^3w9jQe`K}Cp5Fs6rhL+qyy*Iyh4G!RZ(AoVmdCll)qp9RU zcN`~od(JcAFmbQ){j&wMc~LMls2PGAR(fEvVZ1AYlxZAxWoD3yTraHR=z8L)mpwAJl zuHO3W<16Po!ae^i?q*VyaP)6dEXkTT26!3UL)l*AnC_iZ__XfEt+=&6n_iw{@ZU3R zz1n7@&AMoS1nn0y2Vmy~=2gP=HmcC!fIQssoTcA@rLRlOP@`ezjE6vW9;lDyLc;!+ zC(7UXb=k1Av)QxI{!?HC^y(1hBj}?LaA}3H4DBlt-L}?mCgZ0shL!>hyn4m~Roh^w zg?3T$>6bsD}GGr9) zd~a_)cM&>0f3=f5k2A3s0$7li^u-a!Y%pi44ufRP<)ASz1ynOCum*P;-tDm$Jb5&7 zFxU8}C*>oBV9&b=Bm7(ub!$FTB<*LU{Q#;ymQ2{hkGlq zzu0Su^>gLQqE!O#Kl%r>OQW- z)`FZUp8zT2a6EqHW;mk6OCVc6Rn%=dZt<`K(TW-TCG8dmTTJdHZ_ZF{B38Qsm( zA{W80x1x%iN8&0w-f~|a9$iU&n(m@Z@cHR1I961d#5Xp8h&%7FxB@g{vzlk|M>|Fv z!eTh%62W&rO(Fmq^PJf!(mB?)1Ti?al;he6pPRroI#N1S%=|U z<>IcQ`3Q@}eV6?)NIlL4V|Ufl39)^}J$I!9EN$J(T!gejyxS{YeK|q-;54tWxwCyE z(H<>8Nj>abQO|YAXlbp5cwUmkDeSi3o{kmM?i$X=d5hllk4;J!RqcnkZujfdI`4?> z6mt)xS1h6e6KDLddiU_NJ3~nQH8Sa;N_6W-6#O+v3mWJ%qGb@b$T9R~ygyk%B<9yZ zMD(u&`*{ko`>O4i>-$Ft4xo#$8-rDi5f1t;c^_ej@vdD+T)27uH_;9wm~H(t8SI&M zHSWlSJ7kiZo|BZ2aZ;Q(7p7jX0PN2@M z=d#VIk1P3ssG#XA`|jDcFnM-){8sc8a#-bl%jN!-tKb#xQgdrg|D()RApW@a${ZTR zDbo^~?sJK|TpPQJ`$dgll&P`-z$IqBAvECuy$7>Fg_XP?^+qX4u3zCrcM9wT0aB4+ zX=RPpye@Y72y?K%L}M*}cH|-0V76vC!N%U*Y&HGm>3r4Qx2rm~|9Mbzl7HK^x5(To zyG!@a1?xzFc+;}o--o#Cb50ne78P_{gI_rAfm{?)EJCfyEr&4-$CI0Q^qjk?|$}L=c(-I8lGU0z(pN}+( zetU2!68eVQ30&;0=?+dXCu5C5_EUJmgd8lZRzEgfuvQ@>``_?9kK#uT4j6n%-uP_( zN(H*67#b(QT}E?rR)-`rKN~Nr*(8w^EM@f?q4(ZDxho`;SNat zaP}m$mfH=T+#x>_+qvVBz_j$1G=R)8PsagEsN9H%U65BHX8Kh7u;2IiPs;o7_y>b{we>Bwol)%ebd zPUhd*LV6YG%QJFjN0cj=G!9FP8?QOKn=MzLPx2#5G+cLCTql4Fn8Er22)4R=ydKlR zK!3}4!{NApDpw*O*8jD3l!3l0W#`uyD5A{?wZ?5eHFLW9Wrj*&4d&*CmKuxDe8TDeIHN7XP4K$x6 z)mmmA+pZ@E>hMZ_m%UiuFlp$luJ&}?Yb$?K_F;wfkN%Z0K+X9@%gtrCOy`V{h32PL zL17n;7$eq%{@Pp3hZ9m=zNXL3)*6u8Cbd$M)HVfV^$5N7$?4cB;4WmEnm;4@_|P$` z5WF9rnqK0aRRnB4RMJS!7Rx`i=^O5nNVU#AW^vwn@B|j+n0?IcLvgs_-}i8*ioM|6 z_0|OSIAX$PS;|cln>gd`+*^iE=7aUFTeV->lp6J|R@BWIyzmIWsbIFWy*hPXG9o(Jq9bgKPf{>gvJ?e4BJI zTO5fxKFqbw?Z`jeWMIzwNhPhWojXot!=ocS@kG$pKDFGL@Rm&$YROs&np;_{h!dKn zQ{o&+WJ_P)7{9OK>XP>Iolws+S_tH-J30N`%B9QXIS+6^t`kIBS+S@_Ls_~BpkQY z@J59JF&L2HD5$!>Rs!7fe&?Z9)n88=f_q0-XEQ0EXQm>w;NtnE?g}peCVMTfIoGx6 z^&k~L%^Y(L0uk^@&N9M4HU!63wDi|%;R1Hf*>Z|VMBtvO>)=*Yl!@D*d!@wXgRGv% zfS$Ztt-D|be~Ab2+&>)At~L%i9>L2G@&sAWjgXb8dgt=0`luqOo~^W?2&e?&Ug zoZMdRSsYCu&XS^xOLi4N-j&W_kmlTu%J$c5eg!%@U&^<&G*BUQ0?VCbk-(pud#3jO zvX;WKwA@4v?U&OvAGSwy2(CRtl$}DDd%aW>w)GNbg2@etA4}(4+fO^ba#HzzMyYYe zL_Z1qviN1uutUzd?x%z6IXbF#Wc^-xIg{@s_MiA8?(aO_(Blw!EVo*@K5ap-x3NHB z_7s;Y=<7)&Ug(~7h@UIRkNiQmrJ`YtJU{VFL*_U+;ijZ z%Sw)s=*SH6zUC5YC?zfqL=)%SD3o1x(^S(3f^QD7#FV;xtY&deu+qrS zH*zo`(?%-RZ~cD1cMtRsk#o-;XeafQOwB>T%W{s*4>E#wm&j92XOGLd|5o;GX|oX{GvqOaZj;9Rw7jAgQjKO$YhC1f^p<2kl%QX_XGqy zFMbR>ucQMb(`AUSgEinEYXO=iQpZ3i=b1@};ZPAGzaC*PG@d}uIicFqDq%8ZCLTVe zTz&2|ii9s*8!VCIx9mu?;L8(aT)h9X)K3R^`D2HTS3X0+DplKXLr|6d=lT^p!B&1t z5%zU}tw-exEd>+*ni@X#n(gNgS77wScM=nP=D4WBDibovlkltu-hA3BPyV`Z(UNWYoa7;UC3%2GkR0s{plmAc-V`uEIZU= z>X+v!aQQh(`|w_p2*rY+G#kM6X}l(Qwq5(5fc#jLh_#p}e-4 zyM`ExLxb3}LdI7rh{o*?2;VAaM~}&w?0sk((h%_FV`3A%VLd0ZP`0v`8q9;BtEj~;rwVt1!sv$<&D zOkd`B+qUT7J3LEVjz0EQBUb@+89a+u6kRv^z>-1l&P}_T7pA`oEO&{bddj6LUuduB zYV%n0RA0PDXm9lTtj2!MOdlLnRIl_QI!4;i8urw+ThTf=#d1{5c;D@16?}eY0zx5e zp4q{n0T-7Jc_EvGdKBIMlOsBNZ#0-j@WY(!Hml!lIE*FS(NnHi_->es5Lco$%6(>; z=fPUU$v1@XFP0ua>1Rxbso8dQ2-Cs$MEFZpM7{Gkk44enytyr08vwRXEbH?6JoPtq z)Jim$=T7|1o5_)Xvjsqcv?pJbJl7w;|uSx%@>?9)xcwPRb_12nSwz7zX{yhV~-mRnkPtiB{8H{otn~kHo zkaWp^aWO0W!TjO@;FcL(ET!?rV1s&zV`go8+sNRg)78 z$v*6TCu;IG!1<;7I`ciha6x=ePq$ccjt44Tj(XGEMu;Wj%W`HF7E<{~rVvJ@Q@sXeO~!Lv zs^;HmOa| zl`S|9bYlJ;Cf1!!3_ib)w#85ubQA_mb_JLo?`9_9MS7UTrm~Xw=PG^52v=YxyH(il z%*yt(igL)&W&6t9LJ7?|ynd-cJ#uVbMmC-p(Wk5Wc@ma`K|W1Bcbz?gdNbmH8XevT<&lMcK|ivta3F<`AB=zeu(l1g!zw{H0Uw zXPdma)}x{MTw6ObR9s$u@HhF7w%9c5o7}7{7&<-;(Hj12zFpA}cfMZN{z00(4nDP; z8H$F+*{-R6eO{zO$0_P{jf*m(=ikg1wSwygSKaSP3J3Rm`P5_CA&5I5o?;6%pnUJB zdUx3&IQw$c7WS54%o1u*Y4kTd{$iUYQ& z$IIiP#qrZ$%QUn&X=22AFT#j;wRx|H#Kg<9%Np@w! z9}J*ydD?5jCobpc&U1c)KjU3u#*P*J;8wgU>x|&B<7#j~y`0oHplMdEv*6zW8Kw>Is9ifBBTj5@_KVGAJ@L7=dSL9cGV^R?tGdtJcQPs)jpyMXRv#6q z8CnM2Bpqt|t_(X^&%aZC!~V9H1aL%yOf29<2(jcaRZ^a6U}ud!ZLOFCForouh4Rsx zPNRaR07ptrN;OG&NoKcuL^wn4cUDRVo&t2?bAt?=>h=~}f{gYsBm=FY@~4ww*GnG_ z){0`I7F{z;cJ7LKVvA+nz(Kz3=0n@DY^o<&0F1@wB+X5xcxZ`N*-5{-MVDDUmytl$AawiTg5~Jr+CFcIQ-D;N40YiUisa8t!&r}rbu8cz@NCY zV?-DG#ASGo)7ZY|-J0P}Jj6C@EGRRzW!&?d{;7G^T!<`qHlfPl^tY**@i)N|h^+v) z`%({?Y#um?4mWQ~;wNJd+!C%t^d@CdNkk3<+;FAg)`P1Dx>oa#FHdBn#Votp4oYw_)~A%>&81rc(*4%P>gP{5 zy)-UagQR~xg4Z}#TSPAeM#QVt1Jx%g0gRBSbl`i;Lrg40rJ%W=wBR@Z?+k+V>NIk~hHx^Brb$J0-#@HO!Z+is2a z%U7X7zIr)&Jg#gCLy^U{48Ok%pM9_~mp)TQy-E{#A*IEt`ISF2&91~bH@65Dwr5So zx2n`UHhQY)?LwBAb*Oz>vX+pU6Cy$&Ue024mSM$kqtb+3%&pUCUdO?HQX8+AociPo zUo2dicj(%86rs}nz7{`A2s}$SwJv0C|GpT)`Uz5{P=7tzW8>6oCM2WBX_va^+ z!fpY16i@K=UL_UUS#mYIoN5igAf9ktKcP**KG%O|B5M`eq+6AYZANlk<{JnuUqtOX z1hx8Ty&;)cgiKD=97nz;Kysh-iPuE~Pa|T;gtbzNfWVnDud?j@ypS6A z`V-U_>gcr^H!Ta}!L4C2CTOWrw%j{CJqQC@+(Y!yMe*_Qt?eoIo<{C?LlliiHHtUxSlX2v3&R3oii3s+J zaT?Y5z*5>0t>bW*uD{aAZ(~!0XxeG!51z zUk}1m?ItJ5N$JYN)|?w(Hg7U`y|<3hYh<2W=Q*~G@Z~r0Eo_!4Pn|Qev zuN8E@(i#+Wap*)*r}{1iu<#u#r37L@P_-3q>1rSVZlc0m-$fJZ9&KVlDAYPTPiULA@m3Nd((#xp zHBMGuP46g=x(Np7=z$*JPYJd49`Uyw6obukLdb-=t45{~@u9{28gJuP{)_e2^HMPX z1NMYfI$&x4!F}E7QUz;u2kHe2NaTkds^edu`HfN+%U7H3@RjToGRP=^1Al7LSeM?w z$aSaBld#IS8}s!=Q%5|oP;!+sBek~;Y(Ft|Un!CL2*`Sv(t*7A)YyGjm;khN zYvcY++i{C2jW%L1tA^U`*DFOQ-_y?sxSy4v${#SC8XGyP$ zclZ%s?JYkZnti1kFF`+&zC3&UTE5`HY)&FCH;{b;M(b?(n&zP?}BGlS{J ze>-*9lI>NhTo$liXUULwY*RH4&T!o-_=-q}kX^T5Dc};0W!M@sq-KZLY^Yy}fDW0G|Ik4Tw@+{?D zv^jJ!|GxaXUrtG1NHmnxhBk)-R3w-(t98u{KS(qp&hMB4nc%+SM(-Vgw#j5d)%%2G zGRNFV$JqXMlQD~Z|*@T$N6Ej9$eOnZGM znQER_vQJo!N_dj2C(@PxIp>)nWOL;%)uwY0{dAC&WcFuiw@E%YaBZjzIbPjX_AH@N zxdf2_g_`~Wygvp%Ml(R~SX{&CX^>22bdERLo;0rmP&z8n^JpK}QFBG=pOXGrl)z+~0i2mNHYU%;aRuR*;^t@qjCMiw2yhmeiTRF$PK2vuT*7DmY z%m}({Y*1-=JWL3C)?`3fFO?b2C1~%#r{!7%u5LT2J}l1|P=~mwyMG#P`2Z`_JPdr+ zQl>p1Xg)>?-{}L|eyNC|nDzUF-SOY!jfpND6K4lF_BiGwWg(Z6@7uDmQ1oD84L0j8o*W2~{#+Ealg>21!fL{Fh%nMF{efp^AKHED0pf$S?6q@vv#+_$+V zYW7P}g`>=H5p|tJa#r@Sm%yT6hMsASqgQtgVk@NvK)tr!5L=_qWfslXZ{cwWly}+) zUTOCJ9=h`|TG7awo~u)uXD=DSEik(}?EY(VPZJ8iZWIf+F4qc=8Vm@rQkf($i)ptJ@P^8kq(xnuUy>nzPaczS7JXm1pXej}JZIZde^vzi8Pq+9lWbf6Nc=gS9HW zVPB_)_1Z$#=$yf(Og6{6$rCP={OeVf9JJNr2;i z+H!%#=~lBzGi98dn?wU2W1~f2o1Gz4QpD~_w`-)Pz8T2Rd{W64i|ABm3cT_2ThGb; z0dd_dabqn1+dW*;c|-CIk;B_8_UqZL#m|aIwSM8LVzi>4|4_)M*w9gd5n(moIsb=o=_+bTRB zr}pA}85z8CG5?^S_HC9ge<`r3M9N?mmL%w{##-h1bVGyG^BsGQl;Jmh`AGj6rMHeN z%QVv7#kO#%BA@4G*38ogMU)8@OsL{FqNwgUl zi&SNTq72Q+2*@O)Dcl=hpYrR-j|Z>jk>@_;aZC5NCRX%%DSK+mrSsUOEx>Dae0gYz zYPMz^DhE*M1>H1}CM-`^kJFyAiU5PRs&zh(o)7Mjt*=V{8pqYBBz%T^Zdhl!ak`}k z#E>7TVJs-NLnUq@+sJUV(ozdJjs9Io7XwUWTZ{ ze7*m|b@?E+LExlOPHm56eG_;O8QbLd&nV+lZ$!uGC@F^6(<`Akeh1hC9vE*BMAP0^ z&t?&B6>l;|b`q&DNfSd+8&bdL4{7dKhQt}(o8`e7jJ#S^YSBSFK6pTxkn}gXG|?4I z*T7GA`cSO>(mbru4>$ce)U3>0-CYDqBz_3%W>rh4#V_90+czOrDvd6Bc$1h|k%KYh z?A2{$#{dSK)zL0<==j~u)HlRrZu7O$Q}k6i?3@jHJ9qz4aU_#>^0Eq$n5yd(2;49^ zM}0Wt(Kw8XmaX1?xwbAvyv$W{YJ#lccM>&S&#%H2&W-iBgvUx-lYQeeWd#*byQ&6t zpJ3%A3@wbuw~ISCo6=YR(Ew9bs}h1~BOiBmy`pO-9CF{PE}7jwU&c+Qi=ZJc0%(Z5 zW`I@}F%aDfa7xHxtS$N_xqZ^ThjCx_mNbm=`m@rx2L-#&rrw!$|92^93gyP(faz(EQQ;%>WPGR(A=<%I2uvCv@E}*B({D`)&OJDZJ)NRJ=?1q4CP%ZQ3 zB~m|$cKr9}hMhGqdf5HNkRR=mWM?(>WnHU{w|7rRe zcD#r2nqT~6A!pcfOFzn8Ed3XCr9{dc;XvP` zl#qez)EauOZ9&d_ylx$OgT#p^k1<13UW`VeW@D=2U%^!KV+72^G_tPPmdmN+9Z+KK% zQD=xQw|~F*FM?z1k5*f*`ZI0m`3arhCJc~}l9n=((ivUS8&R8KsM_Wz5GKJc6tr1K z-M?bez^x{}Q}M?kM;8F^&SRU%4MWB5zA6m)Jdx+?ZJYAi3EC`mB^779to3A zE#FTvIOJmHb;;gQ3rYk1+mg!qx0SFl;$n|AUQmn4U( zb5e#5Zic{kRz&)8tORecl(m#;f5;K`#}fntx$&KT65*jaKk@%qErs{@{}$ap|LZ5~ z<6N!jo&Q;tY(3a#*)#O-u_lAefB7eP`Tus;ij{mxC7yBfT330OWqR2={2CBh)RXwn*sE_ zQ&xsEx;1==xW00Pq!u|X9Z>c{6P)}laODS0V!!=u(e9oQ}&*^aA77|Qo>5vz*+l^}J(`&@0 zD31j97efe)uVJHwR8Qyo{%6etw5$GTeb~kc;8%kDKYqJTCo=EeA>8)!OOY6`odA&$ zDTUL#rdyG(m@pkeVSmNWYe6?s4cYZQp}qbl?T`D0%!=L8-IxEvxTc(T9`x>;k+PEj zN?)(7rFG0xxru#iAFkoJ?U}wfN84$?;)~8>k@0vMxdZWT z^b+cf^cx8(kabXVTNXbI2a9ky+QYIF$&g(_Sry-=L#l)w{$)ut9QPva@llksCNivw z^vEQvb(%X|4R%}eH3#uH^d`W>eL_24 zAb0%yKb}b6c?~DrKfX;I&bO}X>iOXoH(fT=pdz#>bgW$Zh!uMsmdpm)+k|XG3E7T% z7w4)zRm4izesW{V_38hCoD*|&re`#x9djBZHen5C@j(JvWHdATwfwknpVC)@J09%7 zoHg!mO0}{gSf;qiHSbh(wboOyM!UmU{KNn{9uH%$f#}+aQ6sbexo(kTP9ODrD=XI( zci^Xg;)b}*oO_4VmuNs&57~;fK8@WjkuqD)@~(`MG6ykT_uT92$x57yh~4kC&X5CC zS5S`a0&X>n`CX{@ywU$+`@Q^S>WITEKTC8I8M`v`UWd~18e3jrm9n8;Ux_=NLc~jD;(FA3-OXOyY##}{>{(~;`6v=^i3`+h9;)5z0 zeqH>f#GNW%BOh#rdVZW}pffB1=6aZm`*;4N`u97-YmffBj7XTX>v)*(-xwST;Q7Dm zf%?_Dc`URRw^vKC1i6Yz_RHx8I??mflHCLF2 z*UUdd6z+ME6;pPbTF_KxZAUeCr>w-F0o_HT2TgU$r)ZQ5ru8Z#G>f7Pdnr9XvO)Z3 zpo&@a)vVT-a7JT{-;BXrlfoyW;$PYYqt}}@ps-_Q5_DL)V))~MEL)@e*!7I(&nNn| zZ9~M;oFR&u(|(z%f=mpat53>2%3^kqm`C;RDvvtsiTpgw>aqomq|+m&g7C*b6}UDS zjJsEQ+E!i{P;j*5fcK=I6VIHYJ_kMg-OyW4wbS`h;MgcU#>?@g@qv`#?#@HMrsSpB zC_lL(!F9=Q07bc$JO}sK_M3D>*MVFT$cBLz*)KRshufH@(*TTlPt@3FIL4MbCJG*2 z?{GkOE%A@=L#({bTwj#VPQ|8ahw;DB6-?eWcx8WY-a0e@ge7FngJ?<|-d>4TyR4p- z8-0HUt%Y<-c8~{Lb-4K8_E7cVt-Icfd4Z%ao@9mXc!;&3J38jkSwZribo|#o8Ip3n zfN9V5JVReg^Pz7h63Y&+9R~l#y=xW=x)O!|l{^2VX<@`>ytUL;!xI;J&kWVBDlb;X zxbd@Fb)Ki>i|c9)ZidW$?XDT`s6uo#~LgPJW4%fLBw6lT=f?SwM(=O|M zcpt3`4V*(7&}K7N0*?+cp1TJtRG1S~{o~iuv#%e_2Y-uYW|=J+mKVFpsp;`Ji26DdFhvJ7Mbt|YE3FLhx{fXJ_h}?Q?|E$`XLKg0&(q(?OPhz7kY^5$qrX22^eTQXf__UwzxQK7;oe z7>g>Y+o)hd2BenGUQLq5j>d&vh*MI5Mln?g_7;U+$W{QSdF*pJuI45uoOCWj_>o$z zA!w-LIWo4dg2TbK=aqe8F7cYRH#WdPAkSzl`N0q8@my`e;%w6&t!%xaIP*Oz_A)x= zdQFCm(G~%(?Y{gLSsib-^>L7EB#tlY#P!$omE(^HT(~D><;`by>njEmqV;LrA@IEh ziRUb(HG6k#L*Ho)7Va=rL%+TB;nVEIWhgQUakf5&1ZurqIaa9=I0--AP>Aq;#_SE=i*@CCK9dbr*Cu6$vT;raRD?m|7QAx*dF{{~pK%><4 z&>9W5BcZ#Pqux(qZTo#oGqsQQQlRL-L^QnW${h9vdCOq24zLiGwti!4eTAc+ag16O zVUk;!`84q^<6Gjjpsjp{&sRM6KAJ`!2`_B!0(W#r<~>}!dU`(vtJsU^Ppx}iIxdeYSoG3bKhI*y5Z%>uTrleC^Q z!D1F}@_DFSeedH7=NM}nxJ5wPd7@;YS@pB>grsyiwUa||T$JnMZnioLXrTMF5&cf* zDDBpcP=#*w?t-Zfpys<)_qnV1W&UaRZQj^uYp{J3-f^0adesRf;W%w{Z{$(;2h+<3 z5UY}gFkOYwZ&TrJtwHfKn?_O?>DSBS7yff<2tn(P#smZ1&-g6R+)mYKVPek9{Y-)W zxM#y0JW+-72RVdZ230097@eXZ)GvzOEN>dyij^?KCSb_s$|LEw2Vy6reg!d*Z@I(q zNWytw*j2~t2V!SO_x~0nN>AbsVRQ!kCWbhAm5gu zCVytZ)g}8I#|z8v1u>)Z%Jk$~wKQ)wX%eYk)~!O<*>BC9As3Ns0BmE@5xpw`aoTpI+NwEk&tf?+ zX68I?ypEcqJ0?*1N+db0m=f5Xh!Q(*P$2#_WU!YMtp9#4a9bw&uq#LX`>DRH+p--Iqn)i4PIFahy)&2WcA2Xq!z~maB?*-I0ZOedA++WUD(+7id8F< z6EX1q$uGXg9*O;@Jk@fN^G&Q7ppxgT z^>vpcck&{FYqM@qjBUK6w|(-D5sy=xfc#aJscc`3oE`Oz`Z81Wru6m`_4_4*V=qd# zq0F}Sw3AH*DzmOb!qxV*r|4WZm7>39bIK9yfX!Y$i1!3rG^obk^o6HlSN0#G^YJ-7 zPjz2H(|CN5xeP?ujA1E0FGq?I#o~+Ic;MA<(U$)~-S;eYOC>t$ zP`NDc1L!)cpEjgPi`eyanrlfPB>h1xU9K!#2(th1AlEKQ?g;$jEK>UBQJv>-{&B&nAn+{3%Sx2v)Jv9_s;3*W1acC14!U(LRW59=WYOkoj)%KOJTke-#zLtKU5iX-#65)w~A>ugX+JF2=_j5ihW{1|{KR?1ufe z;Mgvo@FQ+nHP}FjpISM1; zw9E+hYP#i@4sSAR^XHmq?yAK4!_^k^z_^K4n~$y7wPK=A=~)Wnvn{l`IZSN$y5!~E ztNW7p7UmJ^@BMMh@^?1SoYtpJ0VUwifpTzZXo9D*2ULY~`g854@vqh|WVP%o8y*ap z7gxS0VpJSXN=6pz@I#iN4%Cb*u@xZR;#VifaAhEZsl*>u)|;0Wp&!hG$X zR<*mIhn&Kcufz9bxF>G%>$Um4xSnG&1^VKCnWo)#I1x#n3>@FKFb-@V#U2+ZTmls~ zp3HAv!PCxv36q2yD1zdM^kt!H4X@+J-ZsaOA+B0l_2f6)=Kh?Fjg9#1d<^NZ58JoM zhkkRr;Q3XK`^cgSc+z-*=Li%)_Mv$v{HZJbs25cxc7F@HqKnAvLdVc zY~8K6EpZ2#o!&i1<=aUV2bE%O-CU+LnEPju zTj{?VV~U>j;ReCK2&kKZ`v1i+9Dj~$cdmRgrpn3mY+CL(+x-2aXyV=L)tIs7Y)Vo= zwoc2x>XWJOahd~)s1=(6{12*s`lY5z20EoD0TTU}8bL@ubog0RqFyjXUefmV*3!gK z38bN0Ub8M7Blt@yZz=@3EZa(Db>-n1*XGaxw8{gI$F2_Uu%G(CD~i&KsLGyz7HS_V zZ&wvImhWz1o}naT;9o7C)^v;|VD8@oT<^(xNoRk^&(e3jIU(^L(y3-ISpQ_~nhELD zS1q6JbW~DI$pv_y-pi0W+n%eu-kvR~u-lV?XK9-~hXT@Z?2M4idtm_=n#>(5ysaHX zX~G5l7LD`qA?6Az^t=J@wmW~*`z6bpenmH5m(2_2uNw-|F5)k>Fh3hYakV|IhTY*~ z7`!5BK>W^+>|y_zcV+u}a=W^LES&h?lEWdfX%bdJm_L0>b*~Aw^t<-jPW0!vBO5`zosqL^03pnmM zVmK?{jub$s|AX(KC$HJIqENi1oEkK-tX6t5PdBXDGzOs;7I;1fk!JdY@dPHl9-N=` z>3f@dL$B@UdgkNmQ~IZU29bu`i*wQ)!2#*#g@&k}g)UIxl|R@wN*>Rmx!%%rNB-e( z_{)h!d?pl5@<)tz+I0*YXJLG;A!#13M*b#_a)WKAf)r*_zp;yp8Cm}u-k^7k&+Q|H*N^Qlqh|MM zz(zg8 zZD&^;i5sZ5HHm-dfbW(5jD9U|w>)RTSIltb{!FykVZhD<}9{&DKjv$Yb-%xhMxO!;itE&0=w_pGLQ zBcb`W`GU5RDa&$WLkuc@u%+ha-s|xe*NnFUK0ZNuyY0<=SGUshc8QZg_jS7u<2_Oo zm#^1`q!{%QI+l#RQ_OB3>>yZL98;0+%Ug30R+NyLB-Yxf!n{u?$(r}ge5O}B!Q=~T z#UA>V+&38Pk~(0bV4RlmAMnA&=*VcHJ`y0^1%0MPRALqG-ZU9tXXA#xpO_@vq;E;| zdS>fIs!n>d*iqm|gY1c&koHkUZv>Tie5VZ$>5T!LV{X#ClWH?+*$I|xRntOyo_f9a z_h>nT>>g5ap7Gv~sA4^66Jq7>mG>P<*5#S|*uJjDXWABbC%Oaf6p9#3=4go{znJ zr%Cfpslb?gdEvF`24&6HZhFBl{058$21_o~T73FLL5eBauqDs|_h(%(saUm{A@3le zy&c2%ruQx9XusPJ`943Pi_JXRZQhpqyu1m)SGvdj4P)o}k0uv-Cu>#{iu2GgO-_P~6my`$cj9v59u^70Rxlh4{H| za#^aTIcllMf;jG=d{vN(hAJI&xmbFk)FrbqH8|h4AZ%8{wy$2Q_ik9r*h<5L!WTDu zFrt(4iCFS~b&COhnGjLSyc$!$TC zY@L$Aatd2SeN%WA(K7XsZ}dJ`At;Vkfg%)&l* zkta~CvT_lcdq+?SIpbtdzW&Z_MdD3kEBQoZr~cQnmTTmPEj;hmPb6j{H~SKrg+SS_ zl_r-;GaYOS09<$W><~XheCEDH=HjK4p$CtHPlSwZShMoECVD%zRtPnn92_gl1fRmS z7812h1tZ;*kafaSYcK6?A1)0E7i7*d=&>CW^xh#-OUPYab(5lZ$^5=IpiCuLy!tXS zX5^{h{or2ZgLijQx+9FK8+VB}HPo-?R?OUb&c8{|uT1(d_Z45`8!qL;u}k(t1r=8E z!oZM2hu|UPrOS59u8~olEQMPh6!`*WP4J!81tw&&-YD4G66nGU&E5g6FLD)yq$^#c{j5QfEAkNu(^U zN)V^Z1aGP&v<{=Tlh$iP++LYb3(Ajuc%ELm1aAlxQro{fkGwwPw0)IxCK~$FSN}MG z`GDx|O4ZtwLuXU)_rjLqLX0} zc1l7}B`fP5-j{Z<>osfCOVH00pGuXVRjdt2@#7dCzbhL*#R`nsYAF9COhehddG4L* zzOCcE-yX4Ea<@A{o;y|;OUn`QzD0Hs`tT!goUxArMxW38lx=^_Lf`JGNkN6~f6x7p z{ODYGZ-4ENffVu&bygfj)t2&i7R<)T&S(+V^prFnNKTpztz80V(fiQK^pVX%du8f| z6G`+>0ekHPPnF$vIsu8kK@o-82z?_BC9Z_1@#j=Sq*?u2*1{8iO{t9khbfg)#eKKaMO zXn$6*fF%gAy{7>g436;7-W%*5YMOv4^t%1W_=)pTXZ>xBf0XbCU&)dLMr0a-v!Nwl z9Pqve7WcwMY8(VbU9PV$?L0|mcAh5F$=Jgw(bIOewN#09DpGA2t)Z+at?I1u1@t|D zTNL>0%V>7>2(T5{@KOT)zobjyG*z*- z3>Y`(10P=a|4`BHYP(@qk7PAxGu$<}VQECm(ga}E!v2O?5zkUoySXDly_mW!UPb90 z^-B_gOg_HLTt4^N%I`9U`<+6kBOc9?ZC)-y9);~sJ^;MLj3d{}JI9z@L)9j<7ZPRi z-Rk+yr}h(pE5L01GS*=30QVIpt(qu8(*fLdxTkU(%7fz(w64Ys5ZSPeO5Q;!_)p(5 zvblnIj!7SD&x@<95qW=~a7xWsr>szdTKMcBcb*zaTvX?#tay~^>I~V+7SU!B2DdU2 z-J)Z-W1MDbYb^hjVL;AzT&~^wF*!ZY+^g#=KQexNAqCtrGO=3q7ni3uA+w+@R_I3S zcrIWpBOC(r;N8Q^eer<}RY=UJsC60e$H*o?>_l#l2k3c#bXb*|KG5PX8QF{sf)+AG`kTaDwE-r^MoHG@#g!WRnl=cDY$o3rj<@_6>zP%>_x}45xSHP2Xb7& zXPJr?Od;2$35aDb+_6$T&^n4$=(3hdKG!NR&;K#KPi%rTQNJy{W+L>mpR}Edo}XLy zK}UylaFPw!0A{B~yfkP>7MrP!8b3P!-gu^W>(wR4cQu+<3m?9P6M!kz?qMZ`#o|)b87-m?B+zA%_K;h^a7w|$DPE;If95|Cl z9yOM!|vgiM8!UFhYwGfgxiNgpJ-OU^o>m_aZ?5cVu`79%SmW_T_gw$ zcy_d2lQy}b0{h}d$d zd`D|Y>~}L*RqGnXHd>ombW9C3-;&v!g8aZ7p3kH(|DgoDJdpFpYEhhHYvEqE z9B0dQ{mgK3!3!%70!vPO(zK6W;?H{sE9%?2ZVNcIqv&S})?#R0n-IsY3hpr8fKbxeQ6$N%HRxuff;OhrziYX5f39 zrxw(N92&tzqmLUQ8aBk{M`xx)Rbr)z;GS~9+;NQ)>rni<%~zqX*8mA8FpE^@vM~l( zaCqq-NF<3inbG3YjPisLA*u$iTG``&Ryty9$RRtV(*t{``U9?L$Lc!+Q3A}#I%#qm z6j_!6J8}G!;cH)&%nz;dQ$c_r)Ad=8ycNP%!|mP(dKNquYZgY1zz{d(qSRn%H|?G1 zQx`EeaEmh;TkvFfAzl|pg&_5RApXFXmmXROxKXU}8#6;n8vR9CB*`<}FI>rB^TDS6 z*lpwiyU91R$CFBMe_TAPid1lV^&s_&!w6NeL24F*g{*nzUK&0VWsMsJ0m(cUSwN2PU!h5?e$(Ji;blLoYT%3`J^&Hf%oO6jiv zBW0Kn+zdqUWhpgp%0|m%?JKi;MX0rlaKFt))j=5aCik2CfXTJ%++ zyD&rdc8LCL10>3N7MSGyFtokKmt_zD#=w=`�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 X%-zSf$BumgeEnc-dY*Rn`kns+Xnm$X literal 0 HcmV?d00001 From 842766ae766266bc26f97ec72acbd82584833d6f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:21:33 -0700 Subject: [PATCH 02/18] Update README.md --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b984f07..e6955ab 100755 --- a/README.md +++ b/README.md @@ -57,14 +57,19 @@ Download binary release from https://github.com/wangyu-/udp2raw-tunnel/releases Assume your UDP is blocked or being QOS-ed or just poorly supported. Assume your server ip is 44.55.66.77, you have a service listening on udp port 7777. ```bash -# Run at client side -./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp - # Run at server side: ./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp + +# Run at client side +./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` +###### Server Output: +![](images/output_server.PNG) +###### Client Output: +![](images/output_client.PNG) Now,an encrypted raw tunnel has been established between client and server through TCP port 4096. Connecting to UDP port 3333 at the client side is equivalent to connecting to port 7777 at the server side. No UDP traffic will be exposed. + ### Note to run on Android, see [Android_Guide](/doc/android_guide.md) From 9aa229569dd69725a1ec03788c61590d63f7237d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:23:03 -0700 Subject: [PATCH 03/18] Update README.zh-cn.md --- doc/README.zh-cn.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 0350445..2a57acd 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -63,13 +63,16 @@ https://github.com/wangyu-/udp2raw-tunnel/releases 假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你本地的主机到44.55.66.77的UDP流量被屏蔽了,或者被qos了 ``` -在client端运行: -./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp - 在server端运行: ./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -a -k "passwd" --raw-mode faketcp +在client端运行: +./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` +###### Server端输出: +![](images/output_server.PNG) +###### Client端输出: +![](images/output_client.PNG) 现在client和server之间建立起了,tunnel。想要在本地连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被经过tunneling发送。在外界看起来是tcp流量,不会有udp流量暴露到公网。 From c0628959d49a4db3f6a8a4bddec87fd4ae0cd21f Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:23:22 -0700 Subject: [PATCH 04/18] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 2a57acd..df66c7e 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -70,9 +70,9 @@ https://github.com/wangyu-/udp2raw-tunnel/releases ./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -a -k "passwd" --raw-mode faketcp ``` ###### Server端输出: -![](images/output_server.PNG) +![](/images/output_server.PNG) ###### Client端输出: -![](images/output_client.PNG) +![](/images/output_client.PNG) 现在client和server之间建立起了,tunnel。想要在本地连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被经过tunneling发送。在外界看起来是tcp流量,不会有udp流量暴露到公网。 From 09b00ef07ba16b5dda8d063adec19c3e8c94d2cd Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:24:45 -0700 Subject: [PATCH 05/18] Update android_guide.md --- doc/android_guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/android_guide.md b/doc/android_guide.md index da7de15..34a8dfa 100644 --- a/doc/android_guide.md +++ b/doc/android_guide.md @@ -23,6 +23,6 @@ iptables -I INPUT -s 44.55.66.77/32 -p tcp -m tcp --sport 9966 -j DROP ./udp2raw_arm -c -r 44.55.66.77:9966 0l 0.0.0.0:4000 -k1234 --cipher xor -a ``` -# Demostration (zoom in if its not large enough) +# Demostration (zoom-in if not clear enough) ![](/images/android.png) From 99b3ddf6a1d08601382dd19d0e0102701b045e79 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 06:43:05 -0700 Subject: [PATCH 06/18] Update android_guide.md --- doc/android_guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/android_guide.md b/doc/android_guide.md index 34a8dfa..63689ac 100644 --- a/doc/android_guide.md +++ b/doc/android_guide.md @@ -9,7 +9,7 @@ Copy udp2raw_arm to any dir of your **internal storage** .Copying it to **SD car # Steps 1. run udp2raw_arm as usual, except you must change the -a option to -g ``` -./udp2raw_arm -c -r 44.55.66.77:9966 0l 0.0.0.0:4000 -k1234 --cipher xor -g +./udp2raw_arm -c -r 44.55.66.77:9966 -l 0.0.0.0:4000 -k1234 --cipher xor -g ``` 2. find the generated iptables rule from udp2raw's output,add it manually by running: @@ -20,7 +20,7 @@ iptables -I INPUT -s 44.55.66.77/32 -p tcp -m tcp --sport 9966 -j DROP 3. run udp2raw_ram without -g command ``` -./udp2raw_arm -c -r 44.55.66.77:9966 0l 0.0.0.0:4000 -k1234 --cipher xor -a +./udp2raw_arm -c -r 44.55.66.77:9966 -l 0.0.0.0:4000 -k1234 --cipher xor ``` # Demostration (zoom-in if not clear enough) From 3a362f659825afa66444106ad7090bdd4d042c03 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 08:58:00 -0700 Subject: [PATCH 07/18] Update README.md --- README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index e6955ab..272f43f 100755 --- a/README.md +++ b/README.md @@ -40,14 +40,7 @@ For example, if you use UDP2RAW + OpenVPN, OpenVPN won't lose connection after a * **OpenWRT Support** No dependencies, easy to build. Binary for ar71xx are included in release. ### Keywords -* UDP QoS Bypass -* UDP Blocking Bypass -* OpenVPN TCP over TCP problem -* OpenVPN over ICMP -* UDP to ICMP tunnel -* UDP to TCP tunnel -* UDP over ICMP -* UDP over TCP +`UDP QoS Bypass` `UDP Blocking Bypass` `OpenVPN TCP over TCP problem` `OpenVPN over ICMP` `UDP to ICMP tunnel` `UDP to TCP tunnel` `UDP over ICMP` `UDP over TCP` # Getting Started ### Installing From 231fd05680cecd8c1aac95b2f4ac5c6b05ae2b6a Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 10:20:01 -0700 Subject: [PATCH 08/18] Update README.zh-cn.md --- doc/README.zh-cn.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index df66c7e..3f91589 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,6 +1,10 @@ Udp2raw-tunnel ![image2](/images/image2.PNG) -udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。**欢迎任何形式的转载** +udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。 + +支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。 + +**欢迎任何形式的转载** [English](/README.md) From 3897ac38472fa4e8ecfcea79a0671282113bd994 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 19:47:19 -0700 Subject: [PATCH 09/18] Update android_guide.md --- doc/android_guide.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/android_guide.md b/doc/android_guide.md index 63689ac..c0c76df 100644 --- a/doc/android_guide.md +++ b/doc/android_guide.md @@ -23,6 +23,7 @@ iptables -I INPUT -s 44.55.66.77/32 -p tcp -m tcp --sport 9966 -j DROP ./udp2raw_arm -c -r 44.55.66.77:9966 -l 0.0.0.0:4000 -k1234 --cipher xor ``` -# Demostration (zoom-in if not clear enough) +# ScreenShot +zoom-in if not large enough ![](/images/android.png) From 5cca489825ef2137880228a27cdc1513a7f522f5 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:00:23 -0700 Subject: [PATCH 10/18] Add files via upload --- images/speed_test.PNG | Bin 0 -> 20495 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/speed_test.PNG diff --git a/images/speed_test.PNG b/images/speed_test.PNG new file mode 100644 index 0000000000000000000000000000000000000000..310d72cc2b7c513eb73820ee5457857f6bd342fc GIT binary patch literal 20495 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 literal 0 HcmV?d00001 From bdc1f74f8f4f0ad36e07b1cef1ec1d5b1d8d740d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:28:18 -0700 Subject: [PATCH 11/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index c96d66e..f22342e 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -8,7 +8,7 @@ ##### 摘要 udp2raw是一个把udp流量通过raw socket包装成tcp流量的工具。通过用udp2raw配合udp模式的 finalspeed一样可以达到在底层发tcp包,绕过QOS的效果。支持openvz,稳定性也好很多。原理上相当于在finalspeed外面再包了一层tunnel。 -本教程会一步一步演示用udp2raw+kcptun加速http流量的过程。加速任何其他tcp流量也一样。 +本教程会一步一步演示用udp2raw+finalspeed加速http流量的过程。加速任何其他tcp流量也一样。 udp2raw也支持把udp流量包装成Icmp发送,本教程不做演示。 From b10d9421d3052b2907ac6967e02c8219af8e3018 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:29:38 -0700 Subject: [PATCH 12/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index f22342e..96b4d17 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -8,7 +8,7 @@ ##### 摘要 udp2raw是一个把udp流量通过raw socket包装成tcp流量的工具。通过用udp2raw配合udp模式的 finalspeed一样可以达到在底层发tcp包,绕过QOS的效果。支持openvz,稳定性也好很多。原理上相当于在finalspeed外面再包了一层tunnel。 -本教程会一步一步演示用udp2raw+finalspeed加速http流量的过程。加速任何其他tcp流量也一样。 +本教程会一步一步演示用udp2raw+finalspeed加速http流量的过程。加速任何其他tcp流量也一样,包括ss。本文避免讨论科学上网,所以只演示加速http流量。 udp2raw也支持把udp流量包装成Icmp发送,本教程不做演示。 From bdc7e3e43f1e3ed707f7a99ce2b92fd1257ef258 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:30:07 -0700 Subject: [PATCH 13/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index 96b4d17..800e080 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -52,7 +52,7 @@ netstat -nlp|grep java 记下红框中的ip,这是虚拟机的网卡ip -在server端也会显示server_reay +在server端也会显示server_ready ![image](finalspeed_step_by_step/Capture4.PNG) 4.在本地windows,按图配置好finalspeed的客户端。注意,192.168.205.8改成你刚才记下来的IP,带宽也要按实际的填。传输协议要选UDP. From 33fb57d6d04bc4aff6bb8cae73498a2f76e0b0a4 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:36:03 -0700 Subject: [PATCH 14/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index 800e080..39cf430 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -22,7 +22,7 @@ udp2raw也支持把udp流量包装成Icmp发送,本教程不做演示。 ### 安装 下载好udp2raw的压缩包,解压分别解压到服务器和本地的虚拟机。 -https://github.com/xtaci/kcptun/releases +https://github.com/wangyu-/udp2raw-tunnel/releases 在服务器端安装好finalspeed服务端,在本地windows安装好finalspeed的客户端。服务端我以前是用91yun的一键安装脚本安装的,没装过的可以去网上搜一键安装脚本。 From ec298b355e181b82a3836040d2cf20dbdba5b33d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:42:04 -0700 Subject: [PATCH 15/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index 39cf430..505c93e 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -17,7 +17,7 @@ udp2raw也支持把udp流量包装成Icmp发送,本教程不做演示。 本地主机是windows,本地有openwrt路由器或树莓派或安装了linux虚拟机(网卡设置为桥接模式)。 -(如果嫌给虚拟机安装linux麻烦,可以下载别人提供好的linux虚拟机镜像,比如https://www.kali.org/downloads/ ,不过我没有测试过这个镜像,我用的是debian 7) +(如果嫌给虚拟机安装linux麻烦,可以用release里发布的预装了udp2raw的openwrt_x86虚拟机镜像,容量4.4mb) ### 安装 下载好udp2raw的压缩包,解压分别解压到服务器和本地的虚拟机。 From 5ed3bae33d61434bfab93ed1a3ffa90a536b061b Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:46:36 -0700 Subject: [PATCH 16/18] Update kcptun_step_by_step.md --- doc/kcptun_step_by_step.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/kcptun_step_by_step.md b/doc/kcptun_step_by_step.md index fb0fef8..8a911f2 100644 --- a/doc/kcptun_step_by_step.md +++ b/doc/kcptun_step_by_step.md @@ -4,7 +4,9 @@ 本教程会一步一步演示用udp2raw+kcptun加速SSH流量的过程。加速任何其他tcp流量也一样,包括ss;本文避免涉及科学上网,所以演示ssh。 ### 环境要求 -两边的主机都是linux,有root权限。 可以是openwrt路由器或树莓派,windows上桥接模式的虚拟机也可用 +两边的主机都是linux,有root权限。 可以是openwrt路由器或树莓派,也可以是root了的android。 + +(windows和mac,可以用release里发布的预装了udp2raw的openwrt_x86虚拟机镜像,容量4.4mb,开机即用) ### 安装 From b35d8ecd3444eb3c95ecd78a5f4f375be0318593 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 21:46:54 -0700 Subject: [PATCH 17/18] Update kcptun_step_by_step.md --- doc/kcptun_step_by_step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/kcptun_step_by_step.md b/doc/kcptun_step_by_step.md index 8a911f2..b4f72c6 100644 --- a/doc/kcptun_step_by_step.md +++ b/doc/kcptun_step_by_step.md @@ -6,7 +6,7 @@ ### 环境要求 两边的主机都是linux,有root权限。 可以是openwrt路由器或树莓派,也可以是root了的android。 -(windows和mac,可以用release里发布的预装了udp2raw的openwrt_x86虚拟机镜像,容量4.4mb,开机即用) +(windows和mac可以用release里发布的预装了udp2raw的openwrt_x86虚拟机镜像,容量4.4mb,开机即用) ### 安装 From 1ca79a07b6ae041badbffbc73439fd7e428bc5b2 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 16 Aug 2017 22:11:29 -0700 Subject: [PATCH 18/18] Update finalspeed_step_by_step.md --- doc/finalspeed_step_by_step.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/finalspeed_step_by_step.md b/doc/finalspeed_step_by_step.md index 505c93e..4263b91 100644 --- a/doc/finalspeed_step_by_step.md +++ b/doc/finalspeed_step_by_step.md @@ -19,6 +19,8 @@ udp2raw也支持把udp流量包装成Icmp发送,本教程不做演示。 (如果嫌给虚拟机安装linux麻烦,可以用release里发布的预装了udp2raw的openwrt_x86虚拟机镜像,容量4.4mb) +下面的教程按虚拟机演示,如果你有openwrt路由器或树莓派,可以直接运行再路由器或树莓派上,就不需要虚拟机了。 + ### 安装 下载好udp2raw的压缩包,解压分别解压到服务器和本地的虚拟机。