From 467650bbbf7d6ac0e0fbbcb9290b24eda11fc8eb Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Thu, 10 Apr 2014 03:33:46 +0400 Subject: [PATCH 001/122] ICO file added --- 3proxy.ico | Bin 0 -> 32988 bytes 3proxy.rc | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 3proxy.ico diff --git a/3proxy.ico b/3proxy.ico new file mode 100644 index 0000000000000000000000000000000000000000..44dc48143d48dcf29b781f062f63da9359954b73 GIT binary patch literal 32988 zcmeI4J&znk5QZCM@gWEtS|Zu(j6{I=1t%d9Lk1Cnb0o_#vSkZ7wuDT0h{S@7Kj46f zfQX22QvV8g-@Sd#FKV|x4L_3_Ey{4TkTdmJ#D%!+Ff10Xss<4 ztNYuneW$TIcUJfBxAy$Y)^2Nj$$zW0m*2E@S2AL2k3=4?RtOXVg+L)t2owT^Kp{{F z6as}nAy5bu0);>!PzV$Pg+L)t2=pNEKx3~&Cp~jlHT1R&|0McX)QLV2&DE}Z{Knu{ z(K|B%a2?~1q1r!V@Od1Zuz%g-|46a^BYHYv%uyBbf2=|Fobm3n_m##k%LVx|U!R^K z9iOfE@9CPGb#|gT&H>{8P5SYfYqmM$yF~Smz1IE|Aserq#_=7#xTiVqBA-N-jr?2R z9D9I##b*Hi*k)V@WAUS>FRrX7=Xy*pb6LkZI=lbH?~E;Z>STi4;mbO_c-E%}e63sm z-CeGmh#Ru-dG2db%n>}hULAiYBF3oCbJ6Bd{H)QqR>t&r4jJb)+K6)S_)LiX$g^vI zEdCsCzQ;DcZ4$p_S$pfq#kDYHEie}UocU*8IR9SXIVR@gobex8E1KG>k%PRa!Ml@I z_6GU)dW;QUI}O6i{Lmb_z89l0$U5^GX??7-%PL zdWgfk?}=P@bfSoz^<_Kg%e-RUy4g-AdLpu)k+OZq--#kG@sj5#Pv0_Qv4IB|<$H-= zG;$Dgbuqa`hxqLuIkexMDEh41M*KXph%fpQb$FhbEbqp;&f_tz*guzg{dWwT*Id;r z1PXydpb#ho3IQWP?Zh*?@7a8)NR8EI)Nh9xyW^rJyO)Bb&dRk|V!P3|Oa$|GZF%nde~NxsYWJ=|0APY_Z2Y@;SsYW58O7 zpWj4`4xvAG#veoc&LMHeI*-rMUTOa15E4BS19cu}e!S+Ictp*Oo?;)w*bjN%-{@qO z^MybmPzdaTfPW`oAvzV+?*s^hYK6cs0|dhz8Ck5UyVV>uCUvFXv3bAt+_M#*F8^!j;~gc+_SyI6melT<_e^vCUdfLl z@@XA^hkJG3Xv7b{{Y5_8H}6Xkcw|}o=I`|oi@M8qFpuH0$70JmJZC+|GTYDh(O1jm zSegGsbI(QjyH=L5eSd$I+#zE;vc1dV=Y5k{&5zyt>VvVm7Y+NY7w5DS8Drb`ccAf2 z-6b~YkNL+pe@BHJc|P*ew;mdD-)f+5{r{rzpGBR>KH;x<8B_NSzl_7v)fm1z7O&5~ z9B8=O6(Zm@AHM_7THJ?A*k+yBW?a{E`w;gVwpioQC+7BXy=wb?n9LnF>%iyAKG$E4 z>#DK0KR!SAg+YF1?%TfY`FZc>g&X+yJ*&<+rvDq)p4Z<#ZBHLfXvE9BiM8 z*7%$t)>3QfA7HW`uQAp;Y*XpCKGt)5ep&wuk!^P(*K*M&GMvBfYTh*gdm*1mu4f;M zsOPMUn9$2rQ_C|g>T=&U{jOm@&qV0*neq z(d#QQIsWXwhL&eneCP4`Mg2{D=CiIJM6TyM5%|AY-G8VnH5h)xbCJHU_@VAnudme# zf$NTd*RIbO6Z>i^pV_nMi~E(aDX(+s2cx*hr}W#p;u$rS?s!(tq2GRjjn|K#8P)cH zfa@fGsI(BRQ74IO^2R%X^WKU4?A)})nqX5|^IP7}Zq6@1qc>@mKMMkzo*%i6*+d@v zewTe>81g^Yfz)Kd_0g{VVsGX%c~r1xa$9-g-Q^i$9G;0bU2DW885GVu+fkL1VCR1PXydpb#ho3V}kP5GVu+fkL1VCR1PXyd Spb#ho3V}kP5GVwe2>b_IV3_Ct literal 0 HcmV?d00001 diff --git a/3proxy.rc b/3proxy.rc index 3317196..5a9b43c 100644 --- a/3proxy.rc +++ b/3proxy.rc @@ -1,7 +1,6 @@ #include "src/version.h" -#include "afxres.h" -LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +LANGUAGE 0x09, 0x01 VS_VERSION_INFO VERSIONINFO FILEVERSION 0,7,0,0 @@ -18,9 +17,9 @@ BEGIN VALUE "FileDescription", "3proxy - tiny proxy server" VALUE "FileVersion", VERSION "-" BUILDDATE VALUE "InternalName", "3proxy" - VALUE "LegalCopyright", "Copyright (C) 2002-2009 Vladimir Dubrovin" + VALUE "LegalCopyright", "Copyright (C) 2002-2014 Vladimir Dubrovin" VALUE "OriginalFilename", "3proxy.exe" - VALUE "ProductName", "3proxy" + VALUE "ProductName", "3proxy - tiny proxy server" VALUE "ProductVersion", VERSION END END @@ -29,4 +28,4 @@ BEGIN VALUE "Translation", 0x0, 1200 END END - +0 ICON DISCARDABLE "3proxy.ico" From 2890f064885e3ae557d52341e641ca4462895b2f Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Thu, 10 Apr 2014 03:34:59 +0400 Subject: [PATCH 002/122] traffic counters are changed to 64-bit traffic counters are changed to 64-bit using pstdint.h --- Makefile.msvc | 2 +- Makefile.msvc64 | 2 +- src/3proxy.c | 27 ++++- src/auth.c | 48 +++++++++ src/common.c | 19 ++++ src/datatypes.c | 88 ++++++++++++---- src/dnspr.c | 8 ++ src/ftp.c | 38 ++++++- src/ftppr.c | 16 ++- src/icqpr.c | 21 +++- src/msnpr.c | 13 ++- src/plugins/TrafficPlugin/TrafficPlugin.c | 32 +++++- src/pop3p.c | 4 + src/proxy.c | 120 +++++++++++++++++++++- src/pstdint.h | 2 +- src/smtpp.c | 34 +++++- src/sockgetchar.c | 8 ++ src/sockmap.c | 78 +++++++++++++- src/socks.c | 8 ++ src/structures.h | 32 +++++- src/webadmin.c | 13 +++ 21 files changed, 569 insertions(+), 44 deletions(-) diff --git a/Makefile.msvc b/Makefile.msvc index 75d4d7f..4e4640a 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -15,7 +15,7 @@ LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386 DLFLAGS = /DLL DLSUFFICS = .dll -LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib libeay32MT.lib ssleay32MT.lib +LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib LIBEXT = .lib LNOUT = /out: EXESUFFICS = .exe diff --git a/Makefile.msvc64 b/Makefile.msvc64 index d21f9de..4ce8745 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -15,7 +15,7 @@ LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:x64 DLFLAGS = /DLL DLSUFFICS = .dll -LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib libeay32MT.lib ssleay32MT.lib +LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib LIBEXT = .lib LNOUT = /out: EXESUFFICS = .exe diff --git a/src/3proxy.c b/src/3proxy.c index ba35112..977814d 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -45,8 +45,12 @@ struct counter_header { } cheader = {"3CF", (time_t)0}; struct counter_record { +#ifndef NOPSTDINT + uint64_t traf64; +#else unsigned long traf; unsigned long trafgb; +#endif time_t cleared; time_t updated; } crecord; @@ -465,7 +469,11 @@ void dumpcounters(struct trafcount *tlin, int counterd){ if(cfp){ for(tl = tlin; cfp && tl; tl = tl->next){ if(tl->type >= conf.countertype) +#ifndef NOPSTDINT + fprintf(cfp, "%05d %020"PRINTF_INT64_MODIFIER"u%s%s\n", tl->number, tl->traf64, tl->comment?" #" : "", tl->comment? tl->comment : ""); +#else fprintf(cfp, "%05d %010lu %010lu%s%s\n", tl->number, tl->trafgb, tl->traf, tl->comment?" #" : "", tl->comment? tl->comment : ""); +#endif } fclose(cfp); } @@ -480,16 +488,24 @@ void dumpcounters(struct trafcount *tlin, int counterd){ lseek(counterd, sizeof(struct counter_header) + (tl->number - 1) * sizeof(struct counter_record), SEEK_SET); +#ifndef NOPSTDINT + crecord.traf64 = tl->traf64; +#else crecord.traf = tl->traf; crecord.trafgb = tl->trafgb; +#endif crecord.cleared = tl->cleared; crecord.updated = tl->updated; write(counterd, &crecord, sizeof(struct counter_record)); } if(tl->type!=NEVER && timechanged(tl->cleared, conf.time, tl->type)){ tl->cleared = conf.time; +#ifndef NOPSTDINT + tl->traf64 = 0; +#else tl->traf = 0; tl->trafgb = 0; +#endif } } } @@ -1534,10 +1550,15 @@ static int h_ace(int argc, unsigned char **argv){ sscanf((char *)argv[1], "%u", &tl->number); sscanf((char *)argv[3], "%lu", &lim); + tl->type = getrotate(*argv[2]); +#ifndef NOPSTDINT + tl->traflim64 = ((uint64_t)lim)*(1024*1024); + if(!tl->traflim64) { +#else tl->traflimgb = (lim/(1024*4)); tl->traflim = ((lim - (tl->traflimgb*(1024*4)))*(1024*1024)); - tl->type = getrotate(*argv[2]); if(!tl->traflim && !tl->traflimgb) { +#endif fprintf(stderr, "Wrong traffic limit specified, line %d\n", linenum); return(6); } @@ -1547,8 +1568,12 @@ static int h_ace(int argc, unsigned char **argv){ SEEK_SET); memset(&crecord, 0, sizeof(struct counter_record)); read(conf.counterd, &crecord, sizeof(struct counter_record)); +#ifndef NOPSTDINT + tl->traf64 = crecord.traf64; +#else tl->traf = crecord.traf; tl->trafgb = crecord.trafgb; +#endif tl->cleared = crecord.cleared; tl->updated = crecord.updated; #ifdef _MAX__TIME64_T diff --git a/src/auth.c b/src/auth.c index 8b22b11..b2a9d44 100644 --- a/src/auth.c +++ b/src/auth.c @@ -115,7 +115,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l len += sprintf((char *)buf + len, "\r\n"); if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) != (int)strlen((char *)buf)) return 31; +#ifndef NOPSTDINT + param->statssrv64+=len; +#else param->statssrv+=len; +#endif param->nwrites++; if((res = sockgetlinebuf(param, SERVER,buf,13,'\n',conf.timeouts[CHAIN_TO])) < 13) return 32; @@ -152,7 +156,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) < len){ return 41; } +#ifndef NOPSTDINT + param->statssrv64+=len; +#else param->statssrv+=len; +#endif param->nwrites++; if((len = sockgetlinebuf(param, SERVER, buf, (redir->type == R_SOCKS4B)? 3:8, EOF, conf.timeouts[CHAIN_TO])) != ((redir->type == R_SOCKS4B)? 3:8)){ return 42; @@ -175,7 +183,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, 3, conf.timeouts[CHAIN_TO]) != 3){ return 51; } +#ifndef NOPSTDINT + param->statssrv64+=len; +#else param->statssrv+=len; +#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 2, EOF, conf.timeouts[CHAIN_TO]) != 2){ return 52; @@ -197,7 +209,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, inbuf, conf.timeouts[CHAIN_TO]) != inbuf){ return 51; } +#ifndef NOPSTDINT + param->statssrv64+=inbuf; +#else param->statssrv+=inbuf; +#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 2, EOF, 60) != 2){ return 55; @@ -227,7 +243,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) != len){ return 51; } +#ifndef NOPSTDINT + param->statssrv64+=len; +#else param->statssrv+=len; +#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 4, EOF, conf.timeouts[CHAIN_TO]) != 4){ return 57; @@ -553,9 +573,13 @@ void trafcountfunc(struct clientparam *param){ countout = 1; continue; } +#ifndef NOPSTDINT + tc->traf64 += param->statssrv64; +#else val = tc->traf + param->statssrv; if(val < tc->traf) tc->trafgb++; tc->traf = val; +#endif time(&t); tc->updated = t; } @@ -567,9 +591,13 @@ void trafcountfunc(struct clientparam *param){ if(tc->ace->action != COUNTOUT) { continue; } +#ifndef NOPSTDINT + tc->traf64 += param->statscli64; +#else val = tc->traf + param->statscli; if(val < tc->traf) tc->trafgb++; tc->traf = val; +#endif time(&t); tc->updated = t; } @@ -596,6 +624,11 @@ int alwaysauth(struct clientparam * param){ continue; } +#ifndef NOPSTDINT + if(tc->traflim64 <= tc->traf64) return 10; + param->trafcountfunc = conf.trafcountfunc; + param->maxtrafin64 = tc->traflim64 - tc->traf64; +#else if((tc->traflimgb < tc->trafgb) || ((tc->traflimgb == tc->trafgb) && (tc->traflim < tc->traf)) ) return 10; @@ -605,6 +638,7 @@ int alwaysauth(struct clientparam * param){ if(!param->maxtrafin || param->maxtrafin > maxtraf) param->maxtrafin = maxtraf; } if((tc->trafgb > tc->traflimgb) || (tc->trafgb == tc->traflimgb && tc->traf >= tc->traflim)) param->maxtrafin = 1; +#endif } } if(countout)for(tc = conf.trafcounter; tc; tc = tc->next) { @@ -615,6 +649,11 @@ int alwaysauth(struct clientparam * param){ continue; } +#ifndef NOPSTDINT + if(tc->traflim64 <= tc->traf64) return 10; + param->trafcountfunc = conf.trafcountfunc; + param->maxtrafout64 = tc->traflim64 - tc->traf64; +#else if((tc->traflimgb < tc->trafgb) || ((tc->traflimgb == tc->trafgb) && (tc->traflim < tc->traf)) ) return 10; @@ -624,6 +663,7 @@ int alwaysauth(struct clientparam * param){ if(!param->maxtrafout || param->maxtrafout > maxtraf) param->maxtrafout = maxtraf; } if((tc->trafgb > tc->traflimgb) || (tc->trafgb == tc->traflimgb && tc->traf >= tc->traflim)) param->maxtrafout = 1; +#endif } } @@ -1089,12 +1129,20 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa so._closesocket(sock); continue; } +#ifndef NOPSTDINT + if(param) param->statscli64 += len; +#else if(param) param->statscli += len; +#endif len = sockrecvfrom(sock, sinsp, buf, 4096, 15000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); if(len <= 13) continue; +#ifndef NOPSTDINT + if(param) param->statssrv64 += len; +#else if(param) param->statssrv += len; +#endif if(*(unsigned short *)buf != nquery)continue; if((na = buf[7] + (((unsigned short)buf[6])<<8)) < 1) { return 0; diff --git a/src/common.c b/src/common.c index a2fc23a..694c973 100644 --- a/src/common.c +++ b/src/common.c @@ -287,7 +287,11 @@ void clearstat(struct clientparam * param) { param->time_start = (time_t)tv.tv_sec; param->msec_start = (tv.tv_usec / 1000); #endif +#ifndef NOPSTDINT + param->statscli64 = param->statssrv64 = param->nreads = param->nwrites = +#else param->statscli = param->statssrv = param->nreads = param->nwrites = +#endif param->nconnects = 0; } @@ -378,10 +382,17 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i+=10; break; case 'b': +#ifndef NOPSTDINT + i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statscli64 * 1000./delay):0); + break; + case 'B': + i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statssrv64 * 1000./delay):0); +#else i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statscli * 1000./delay):0); break; case 'B': i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statssrv * 1000./delay):0); +#endif break; case 'D': i+=sprintf((char *)buf+i, "%u", delay); @@ -478,11 +489,19 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += (int)strlen((char *)buf+i); break; case 'I': +#ifndef NOPSTDINT + sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statssrv64); + i += (int)strlen((char *)buf+i); + break; + case 'O': + sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statscli64); +#else sprintf((char *)buf+i, "%lu", param->statssrv); i += (int)strlen((char *)buf+i); break; case 'O': sprintf((char *)buf+i, "%lu", param->statscli); +#endif i += (int)strlen((char *)buf+i); break; case 'h': diff --git a/src/datatypes.c b/src/datatypes.c index 24d5420..a99f7d5 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -8,6 +8,13 @@ #include "proxy.h" +#ifndef NOPSTDINT +static void pr_unsigned64(struct node *node, CBFUNC cbf, void*cb){ + char buf[32]; + if(node->value)(*cbf)(cb, buf, sprintf(buf, "%"PRINTF_INT64_MODIFIER"u", *(uint64_t *)node->value)); +} +#endif + static void pr_integer(struct node *node, CBFUNC cbf, void*cb){ char buf[16]; if(node->value)(*cbf)(cb, buf, sprintf(buf, "%d", *(int *)node->value)); @@ -446,13 +453,55 @@ static void * ef_trafcounter_type(struct node * node){ return &((struct trafcount *)node->value) -> type; } +#ifndef NOPSTDINT +static void * ef_trafcounter_traffic64(struct node * node){ + return &((struct trafcount *)node->value) -> traf64; +} +static void * ef_trafcounter_limit64(struct node * node){ + return &((struct trafcount *)node->value) -> traflim64; +} +static void * ef_client_maxtrafin64(struct node * node){ + return &((struct clientparam *)node->value) -> maxtrafin64; +} + +static void * ef_client_maxtrafout64(struct node * node){ + return &((struct clientparam *)node->value) -> maxtrafout64; +} + +static void * ef_client_bytesin64(struct node * node){ + return &((struct clientparam *)node->value) -> statssrv64; +} + +static void * ef_client_bytesout64(struct node * node){ + return &((struct clientparam *)node->value) -> statscli64; +} + +#else + static void * ef_trafcounter_traffic(struct node * node){ return &((struct trafcount *)node->value) -> traf; } - static void * ef_trafcounter_limit(struct node * node){ return &((struct trafcount *)node->value) -> traflim; } +static void * ef_client_maxtrafin(struct node * node){ + return &((struct clientparam *)node->value) -> maxtrafin; +} +static void * ef_client_maxtrafout(struct node * node){ + return &((struct clientparam *)node->value) -> maxtrafout; +} + +static void * ef_client_bytesin(struct node * node){ + return &((struct clientparam *)node->value) -> statssrv; +} + +static void * ef_client_bytesout(struct node * node){ + return &((struct clientparam *)node->value) -> statscli; +} + + +#endif + static void * ef_trafcounter_cleared(struct node * node){ return &((struct trafcount *)node->value) -> cleared; @@ -573,14 +622,6 @@ static void * ef_client_next(struct node * node){ return ((struct clientparam *)node->value) -> next; } -static void * ef_client_maxtrafin(struct node * node){ - return &((struct clientparam *)node->value) -> maxtrafin; -} - -static void * ef_client_maxtrafout(struct node * node){ - return &((struct clientparam *)node->value) -> maxtrafout; -} - static void * ef_client_type(struct node * node){ int service = ((struct clientparam *)node->value) -> service; return (service>=0 && service < 15)? (void *)conf.stringtable[SERVICES + service] : (void *)"unknown"; @@ -641,14 +682,6 @@ static void * ef_client_cliport(struct node * node){ return &((struct clientparam *)node->value) -> sinc.sin_port; } -static void * ef_client_bytesin(struct node * node){ - return &((struct clientparam *)node->value) -> statssrv; -} - -static void * ef_client_bytesout(struct node * node){ - return &((struct clientparam *)node->value) -> statscli; -} - static void * ef_client_pwtype(struct node * node){ return &((struct clientparam *)node->value) -> pwtype; } @@ -742,8 +775,15 @@ static struct property prop_trafcounter[] = { {prop_trafcounter + 2, "ace", ef_trafcounter_ace, TYPE_ACE, "traffic to count"}, {prop_trafcounter + 3, "number", ef_trafcounter_number, TYPE_UNSIGNED, "counter number"}, {prop_trafcounter + 4, "type", ef_trafcounter_type, TYPE_ROTATION, "rotation type"}, + + +#ifndef NOPSTDINT + {prop_trafcounter + 5, "traffic", ef_trafcounter_traffic64, TYPE_UNSIGNED64, "counter value"}, + {prop_trafcounter + 6, "limit", ef_trafcounter_limit64, TYPE_UNSIGNED64, "counter limit"}, +#else {prop_trafcounter + 5, "traffic", ef_trafcounter_traffic, TYPE_TRAFFIC, "counter value"}, {prop_trafcounter + 6, "limit", ef_trafcounter_limit, TYPE_TRAFFIC, "counter limit"}, +#endif {prop_trafcounter + 7, "cleared", ef_trafcounter_cleared, TYPE_DATETIME, "last rotated"}, {prop_trafcounter + 8, "updated", ef_trafcounter_updated, TYPE_DATETIME, "last updated"}, {prop_trafcounter + 9, "comment", ef_trafcounter_comment, TYPE_STRING, "counter comment"}, @@ -795,11 +835,18 @@ static struct property prop_client[] = { {prop_client + 15, "srvport", ef_client_srvport, TYPE_PORT, "target server port"}, {prop_client + 16, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"}, {prop_client + 17, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"}, +#ifndef NOPSTDINT + {prop_client + 18, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, + {prop_client + 19, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, + {prop_client + 20, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, + {prop_client + 21, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, +#else {prop_client + 18, "bytesin", ef_client_bytesin, TYPE_UNSIGNED, "bytes from server to client"}, {prop_client + 19, "bytesout", ef_client_bytesout, TYPE_UNSIGNED, "bytes from client to server"}, - {prop_client + 20, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, - {prop_client + 21, "maxtrafin", ef_client_maxtrafin, TYPE_UNSIGNED, "maximum traffic allowed for download"}, - {prop_client + 22, "maxtrafout", ef_client_maxtrafout, TYPE_UNSIGNED, "maximum traffic allowed for upload"}, + {prop_client + 20, "maxtrafin", ef_client_maxtrafin, TYPE_UNSIGNED, "maximum traffic allowed for download"}, + {prop_client + 21, "maxtrafout", ef_client_maxtrafout, TYPE_UNSIGNED, "maximum traffic allowed for upload"}, +#endif + {prop_client + 22, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, {NULL, "next", ef_client_next, TYPE_CLIENT, "next"} @@ -810,6 +857,7 @@ struct datatype datatypes[64] = { {"short", NULL, pr_short, NULL}, {"char", NULL, pr_char, NULL}, {"unsigned", NULL, pr_unsigned, NULL}, + {"unsigned64", NULL, pr_unsigned64, NULL}, {"traffic", NULL, pr_traffic, NULL}, {"port", NULL, pr_port, NULL}, {"ip", NULL, pr_ip, NULL}, diff --git a/src/dnspr.c b/src/dnspr.c index 1e008ff..661a668 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -147,13 +147,21 @@ void * dnsprchild(struct clientparam* param) { if(socksendto(param->remsock, ¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ RETURN(820); } +#ifndef NOPSTDINT + param->statscli64 += i; +#else param->statscli += i; +#endif param->nwrites++; len = sockrecvfrom(param->remsock, ¶m->sins, buf, BUFSIZE, 15000); if(len <= 13) { RETURN(821); } +#ifndef NOPSTDINT + param->statssrv64 += len; +#else param->statssrv += len; +#endif param->nreads++; if(buf[6] || buf[7]){ if(socksendto(param->clisock, ¶m->sinc, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ diff --git a/src/ftp.c b/src/ftp.c index 710c65b..de5a51b 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -33,7 +33,11 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) { if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 703; } +#ifndef NOPSTDIN + param->statscli64 += (int)strlen(buf); +#else param->statscli += (int)strlen(buf); +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -50,7 +54,11 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) { if((int)socksend(param->remsock, (unsigned char *)buf, res, conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 705; } - param->statscli += res; +#ifndef NOPSTDIN + param->statscli64 += res; +#else + param->statscli += res; +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0){ buf[i] = 0; @@ -81,7 +89,11 @@ int ftpcd(struct clientparam *param, unsigned char* path, char *nbuf, int *innbu if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 711; } +#ifndef NOPSTDIN + param->statscli64 += (int)strlen(buf); +#else param->statscli += (int)strlen(buf); +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ if(nbuf && innbuf && inbuf + i < *innbuf && i > 6) { @@ -114,7 +126,11 @@ int ftpsyst(struct clientparam *param, unsigned char *buf, unsigned len){ if(socksend(param->remsock, (unsigned char *)"SYST\r\n", 6, conf.timeouts[STRING_S]) != 6){ return 721; } - param->statscli+=6; +#ifndef NOPSTDIN + param->statscli64 += 6; +#else + param->statscli += 6; +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -133,7 +149,11 @@ int ftppwd(struct clientparam *param, unsigned char *buf, unsigned len){ if(socksend(param->remsock, (unsigned char *)"PWD\r\n", 5, conf.timeouts[STRING_S]) != 5){ return 731; } +#ifndef NOPSTDIN + param->statscli64 += 5; +#else param->statscli += 5; +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -158,7 +178,11 @@ int ftptype(struct clientparam *param, unsigned char* f_type){ if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 741; } +#ifndef NOPSTDIN + param->statscli64 += (int)strlen(buf); +#else param->statscli += (int)strlen(buf); +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -179,7 +203,11 @@ SOCKET ftpdata(struct clientparam *param){ if(socksend(param->remsock, (unsigned char *)"PASV\r\n", 6, conf.timeouts[STRING_S]) != 6){ return INVALID_SOCKET; } - param->statscli+=6; +#ifndef NOPSTDIN + param->statscli64 += 6; +#else + param->statscli += 6; +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -217,7 +245,11 @@ SOCKET ftpcommand(struct clientparam *param, unsigned char * command, unsigned c so._closesocket(s); return INVALID_SOCKET; } +#ifndef NOPSTDIN + param->statscli64 += (int)strlen(buf); +#else param->statscli += (int)strlen(buf); +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } diff --git a/src/ftppr.c b/src/ftppr.c index 90f18c0..28d695e 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -276,7 +276,11 @@ param->srv->logfunc(param,buf); buf[i++] = '\r'; buf[i++] = '\n'; if(socksend(param->remsock, buf, i, conf.timeouts[STRING_S])!=i) {RETURN (811);} - param->statscli += i; +#ifndef NOPSTDINT + param->statscli64+=(i); +#else + param->statscli+=(i); +#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, BUFSIZE, '\n', conf.timeouts[STRING_L])) > 0){ if(socksend(param->ctrlsock, buf, i, conf.timeouts[STRING_S])!=i) {RETURN (812);} @@ -287,9 +291,15 @@ param->srv->logfunc(param,buf); } sasize = sizeof(struct sockaddr_in); if(so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(819);} +#ifndef NOPSTDINT + if(req && (param->statscli64 || param->statssrv64)){ + (*param->srv->logfunc)(param, (unsigned char *)req); + } +#else if(req && (param->statscli || param->statssrv)){ (*param->srv->logfunc)(param, (unsigned char *)req); } +#endif } CLEANRET: @@ -308,7 +318,11 @@ CLEANRET: } sasize = sizeof(struct sockaddr_in); so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize); +#ifndef NOPSTDINT + if(param->res != 0 || param->statscli64 || param->statssrv64 ){ +#else if(param->res != 0 || param->statscli || param->statssrv ){ +#endif (*param->srv->logfunc)(param, (unsigned char *)((req && (param->res > 802))? req:NULL)); } if(req) myfree(req); diff --git a/src/icqpr.c b/src/icqpr.c index a319da6..e1a315d 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -109,7 +109,11 @@ static void addbuffer(int increment, struct clientparam * param, unsigned char * if(len > 0) { *length_p += len; param->nreads++; +#ifndef NOPSTDINT + param->statssrv64 += len; +#else param->statssrv += len; +#endif } return; } @@ -437,18 +441,29 @@ void * icqprchild(struct clientparam* param) { if(greet){ if(socksend(param->remsock, tmpsend, 10, conf.timeouts[STRING_S])!=10) {RETURN (1105);} +#ifndef NOPSTDINT + param->statscli64 += 10; +#else param->statscli += 10; +#endif } if(readflap(param, SERVER, tmpsend, 1024)) {RETURN (1111);} +#ifndef NOPSTDINT + param->statssrv64 += (ntohs(((struct flap_header *)tmpsend)->size) + 6); +#else param->statssrv += (ntohs(((struct flap_header *)tmpsend)->size) + 6); +#endif mystate.srvseq = ntohs(((struct flap_header *)tmpsend)->seq) + 1; mystate.seq = 1; len = ntohs(flap->size) + 6; if((res=handledatfltcli(param, &buf, &buflen, offset, &len))!=PASS) RETURN(res); if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=(ntohs(flap->size)+6)) {RETURN (1106);} offset = 0; +#ifndef NOPSTDINT + param->statscli64 += len; +#else param->statscli += len; - +#endif @@ -466,7 +481,11 @@ void * icqprchild(struct clientparam* param) { len = ntohs(flap->size) + 6; if((res=handledatfltcli(param, &buf, &buflen, offset, &len))!=PASS) RETURN(res); if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=len) {RETURN (1115);} +#ifndef NOPSTDINT + param->statscli64 += len; +#else param->statscli += len; +#endif offset = 0; } if(logintype != ICQCOOKIE) { diff --git a/src/msnpr.c b/src/msnpr.c index be8e006..1ff1391 100644 --- a/src/msnpr.c +++ b/src/msnpr.c @@ -173,15 +173,22 @@ void * msnprchild(struct clientparam* param) { if(!sec){ len = (int)strlen(verstr); if(socksend(param->remsock, verstr, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} +#ifndef NOPSTDINT + param->statscli64 += len; +#else param->statscli += len; - +#endif myfree(verstr); verstr = mystrdup(buf); len = sockgetlinebuf(param, SERVER, buf, 240, '\n', conf.timeouts[STRING_S]); if(len < 10) RETURN(1208); +#ifndef NOPSTDINT + param->statssrv64 += len; +#else param->statssrv += len; +#endif strcpy(buf, verstr); } @@ -191,7 +198,11 @@ void * msnprchild(struct clientparam* param) { if(socksend(param->remsock, buf, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} +#ifndef NOPSTDINT + param->statscli64 += len; +#else param->statscli += len; +#endif if(sec){ RETURN(sockmap(param, conf.timeouts[CONNECTION_L])); diff --git a/src/plugins/TrafficPlugin/TrafficPlugin.c b/src/plugins/TrafficPlugin/TrafficPlugin.c index a745112..1347fe4 100644 --- a/src/plugins/TrafficPlugin/TrafficPlugin.c +++ b/src/plugins/TrafficPlugin/TrafficPlugin.c @@ -179,7 +179,11 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { int port; int rule = 0; struct trafcorrect * starttrafcorrect = firsttrafcorrect; - int statssrv_before, statscli_before; +#ifndef NOPSTDINT + uint64_t statssrv_before, statscli_before; +#else + unsigned long statssrv_before, statscli_before; +#endif int ok = 0; for (;starttrafcorrect != NULL; starttrafcorrect = starttrafcorrect->next) { port = starttrafcorrect->port; @@ -187,8 +191,13 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { if (starttrafcorrect->p_service == S_NOSERVICE) g_s = param->service; if (starttrafcorrect->port <= 0) port = myhtons(param->sins.sin_port); +#ifndef NOPSTDINT + statssrv_before = param->statssrv64; + statscli_before = param->statscli64; +#else statssrv_before = param->statssrv; statscli_before = param->statscli; +#endif rule++; if (((g_s == param->service) && (port == myhtons(param->sins.sin_port))) || ( ((starttrafcorrect->type == UDP) && @@ -201,21 +210,40 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { /* фильтр подошёл. можно изменять значение траффика домножаем на число */ if (starttrafcorrect->type == MULTIPLAY) { +#ifndef NOPSTDINT + param->statssrv64 = (unsigned)((double)param->statssrv64 *starttrafcorrect->coeff); + param->statscli64 = (unsigned)((double)param->statscli64 * starttrafcorrect->coeff); +#else param->statssrv = (unsigned)((double)param->statssrv *starttrafcorrect->coeff); param->statscli = (unsigned)((double)param->statscli * starttrafcorrect->coeff); +#endif } /* с учётом пакетов */ if (starttrafcorrect->type == IPCORRECT) { if (starttrafcorrect->con_type == TCP) { +#ifndef NOPSTDINT + param->statssrv64+=(param->nreads + 3*param->nconnects)*starttrafcorrect->psize; + param->statscli64+=(param->nwrites + 3*param->nconnects)*starttrafcorrect->psize; +#else param->statssrv+=(param->nreads + 3*param->nconnects)*starttrafcorrect->psize; param->statscli+=(param->nwrites + 3*param->nconnects)*starttrafcorrect->psize; +#endif } else { +#ifndef NOPSTDINT + param->statssrv64+=param->nreads*starttrafcorrect->psize; + param->statscli64+=param->nwrites*starttrafcorrect->psize; +#else param->statssrv+=param->nreads*starttrafcorrect->psize; param->statscli+=param->nwrites*starttrafcorrect->psize; +#endif } } if (DBGLEVEL == 1) { - fprintf(stdout, "Port=%hd; Before: srv=%d, cli=%d; After: srv=%ld, cli=%ld; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule); +#ifndef NOPSTDINT + fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule); +#else + fprintf(stdout, "Port=%hd; Before: srv=%lu, cli=%lu; After: srv=%lu, cli=%lu; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule); +#endif } ok = 1; break; diff --git a/src/pop3p.c b/src/pop3p.c index b9a06a1..f5ac9b7 100644 --- a/src/pop3p.c +++ b/src/pop3p.c @@ -43,7 +43,11 @@ void * pop3pchild(struct clientparam* param) { socksend(param->remsock, param->extusername, (int)strlen((char *)param->extusername), conf.timeouts[STRING_S]) <= 0 || socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S])!=2) {RETURN(623);} +#ifndef NOPSTDINT + param->statscli64 += (uint64_t)(strlen((char *)param->extusername) + 7); +#else param->statscli += (int)(strlen((char *)param->extusername) + 7); +#endif param->nwrites++; RETURN (sockmap(param, 180)); CLEANRET: diff --git a/src/proxy.c b/src/proxy.c index 834cae3..b09176b 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -217,7 +217,11 @@ void * proxychild(struct clientparam* param) { unsigned char *ftpbase=NULL; unsigned char username[1024]; int keepalive = 0; +#ifndef NOPSTDINT + uint64_t contentlength64 = 0; +#else unsigned long contentlength = 0; +#endif int hascontent =0; int isconnect = 0; int redirect = 0; @@ -388,6 +392,16 @@ for(;;){ while( (i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){ if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){ buf[i]=0; +#ifndef NOPSTDINT + sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); + } + } + while( contentlength64 > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength64)? BUFSIZE - 1:(int)contentlength64, '\n', conf.timeouts[STRING_S])) > 0){ + if ((uint64_t)i > contentlength64) break; + contentlength64-=i; + } + contentlength64 = 0; +#else sscanf((char *)buf + 15, "%lu", &contentlength); } } @@ -396,6 +410,7 @@ for(;;){ contentlength-=i; } contentlength = 0; +#endif if(param->password)myfree(param->password); param->password = myalloc(32); param->pwtype = 2; @@ -492,11 +507,19 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; +#ifndef NOPSTDINT + sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); + if(param->maxtrafout64 && (param->maxtrafout64 < param->statscli64 || contentlength64 > param->maxtrafout64 - param->statscli64)){ + RETURN(10); + } + if(param->ndatfilterscli > 0 && contentlength64 > 0) continue; +#else sscanf(sb, "%lu",&contentlength); if(param->maxtrafout && (param->maxtrafout < param->statscli || (unsigned)contentlength > param->maxtrafout - param->statscli)){ RETURN(10); } if(param->ndatfilterscli > 0 && contentlength > 0) continue; +#endif } inbuf += i; if((bufsize - inbuf) < LINESIZE){ @@ -527,19 +550,34 @@ for(;;){ RETURN(0); } if(action != PASS) RETURN(517); +#ifndef NOPSTDINT + if(param->ndatfilterscli > 0 && contentlength64 > 0){ + uint64_t newlen64; + newlen64 = sockfillbuffcli(param, (unsigned long)contentlength64, CONNECTION_S); + if(newlen64 == contentlength64) { +#else if(param->ndatfilterscli > 0 && contentlength > 0){ unsigned long newlen; newlen = sockfillbuffcli(param, contentlength, CONNECTION_S); if(newlen == contentlength) { +#endif action = handledatfltcli(param, ¶m->clibuf, ¶m->clibufsize, 0, ¶m->cliinbuf); if(action == HANDLED){ RETURN(0); } if(action != PASS) RETURN(517); +#ifndef NOPSTDINT + contentlength64 = param->cliinbuf; +#else contentlength = param->cliinbuf; +#endif param->ndatfilterscli = 0; } +#ifndef NOPSTDINT + sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRINTF_INT64_MODIFIER"u\r\n", contentlength64); +#else sprintf((char*)buf+strlen((char *)buf), "Content-Length: %lu\r\n", contentlength); +#endif } #endif @@ -619,7 +657,11 @@ for(;;){ socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]); s = param->remsock; param->remsock = ftps; +#ifndef NOPSTDINT + if((param->operation == FTP_PUT) && (contentlength64 > 0)) param->waitclient64 = contentlength64; +#else if((param->operation == FTP_PUT) && (contentlength > 0)) param->waitclient = contentlength; +#endif res = sockmap(param, conf.timeouts[CONNECTION_L]); if (res == 99) res = 0; so._closesocket(ftps); @@ -821,7 +863,11 @@ for(;;){ if(socksend(param->remsock, req , (res = (int)strlen((char *)req)), conf.timeouts[STRING_L]) != res) { RETURN(518); } +#ifndef NOPSTDINT + param->statscli64 += res; +#else param->statscli += res; +#endif param->nwrites++; } inbuf = 0; @@ -853,11 +899,27 @@ for(;;){ if ((res = socksend(param->remsock, buf+reqlen, (int)strlen((char *)buf+reqlen), conf.timeouts[STRING_S])) != (int)strlen((char *)buf+reqlen)) { RETURN(518); } +#ifndef NOPSTDINT + param->statscli64 += res; +#else param->statscli += res; +#endif param->nwrites++; if(param->bandlimfunc) { sleeptime = param->bandlimfunc(param, 0, (int)strlen((char *)buf)); } +#ifndef NOPSTDINT + if(contentlength64 > 0){ + param->nolongdatfilter = 0; + param->waitclient64 = contentlength64; + res = sockmap(param, conf.timeouts[CONNECTION_S]); + param->waitclient64 = 0; + if(res != 99) { + RETURN(res); + } + } + contentlength64 = 0; +#else if(contentlength > 0){ param->nolongdatfilter = 0; param->waitclient = contentlength; @@ -868,6 +930,7 @@ for(;;){ } } contentlength = 0; +#endif inbuf = 0; ckeepalive = keepalive; res = 0; @@ -900,13 +963,21 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; +#ifndef NOPSTDINT + sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); +#else sscanf(sb, "%lu", &contentlength); +#endif hascontent = 1; if(param->unsafefilter && param->ndatfilterssrv > 0) { hascontent = 2; continue; } +#ifndef NOPSTDINT + if(param->maxtrafin64 && (param->maxtrafin64 < param->statssrv64 || contentlength64 + param->statssrv64 > param->maxtrafin64)){ +#else if(param->maxtrafin && (param->maxtrafin < param->statssrv || (unsigned)contentlength > param->maxtrafin - param->statssrv)){ +#endif RETURN(10); } } @@ -935,7 +1006,11 @@ for(;;){ } if((res == 304 || res == 204) && !hascontent){ hascontent = 1; +#ifndef NOPSTDINT + contentlength64 = 0; +#else contentlength = 0; +#endif } if(param->bandlimfunc) { int st1; @@ -959,6 +1034,27 @@ for(;;){ param->nolongdatfilter = 0; +#ifndef NOPSTDINT + if (conf.filtermaxsize && contentlength64 > (uint64_t)conf.filtermaxsize) { + param->nolongdatfilter = 1; + } + else if(param->unsafefilter && param->ndatfilterssrv > 0 && contentlength64 > 0 && param->operation != HTTP_HEAD && res != 204 && res != 304){ + uint64_t newlen; + newlen = (uint64_t)sockfillbuffsrv(param, (unsigned long) contentlength64, CONNECTION_S); + if(newlen == contentlength64) { + action = handledatfltsrv(param, ¶m->srvbuf, ¶m->srvbufsize, 0, ¶m->srvinbuf); + param->nolongdatfilter = 1; + if(action == HANDLED){ + RETURN(0); + } + if(action != PASS) RETURN(517); + contentlength64 = param->srvinbuf; + sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRINTF_INT64_MODIFIER"u\r\n", contentlength64); + hascontent = 1; + } + } + if (contentlength64 > 0 && hascontent != 1) ckeepalive = 0; +#else if (conf.filtermaxsize && contentlength > (unsigned long)conf.filtermaxsize) { param->nolongdatfilter = 1; } @@ -978,6 +1074,7 @@ for(;;){ } } if (contentlength > 0 && hascontent != 1) ckeepalive = 0; +#endif #else #endif if(!isconnect || param->operation){ @@ -996,7 +1093,11 @@ for(;;){ RETURN(521); } } +#ifndef NOPSTDINT + if((param->chunked || contentlength64 > 0) && param->operation != HTTP_HEAD && res != 204 && res != 304) { +#else if((param->chunked || contentlength > 0) && param->operation != HTTP_HEAD && res != 204 && res != 304) { +#endif do { if(param->chunked){ char smallbuf[32]; @@ -1021,18 +1122,32 @@ for(;;){ break; } smallbuf[i] = 0; +#ifndef NOPSTDINT + contentlength64 = 0; + sscanf(smallbuf, "%"PRINTF_INT64_MODIFIER"x", &contentlength64); + if(contentlength64 == 0) { +#else contentlength = 0; sscanf(smallbuf, "%lx", &contentlength); if(contentlength == 0) { +#endif param->chunked = 2; } } if(param->chunked != 2){ +#ifndef NOPSTDINT + param->waitserver64 = contentlength64; +#else param->waitserver = contentlength; +#endif if((res = sockmap(param, conf.timeouts[CONNECTION_S])) != 98){ RETURN(res); } +#ifndef NOPSTDINT + param->waitserver64 = 0; +#else param->waitserver = 0; +#endif } } while(param->chunked); } @@ -1045,8 +1160,11 @@ for(;;){ else if(!hascontent && !param->chunked) { RETURN(sockmap(param, conf.timeouts[CONNECTION_S])); } +#ifndef NOPSTDINT + contentlength64 = 0; +#else contentlength = 0; - +#endif REQUESTEND: if((!ckeepalive || !keepalive) && param->remsock != INVALID_SOCKET){ diff --git a/src/pstdint.h b/src/pstdint.h index 81e2cc9..00fc1fc 100644 --- a/src/pstdint.h +++ b/src/pstdint.h @@ -797,4 +797,4 @@ int main () { return EXIT_SUCCESS; } -#endif \ No newline at end of file +#endif diff --git a/src/smtpp.c b/src/smtpp.c index 8c8b635..f736119 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -191,7 +191,11 @@ void * smtppchild(struct clientparam* param) { ul = param->extip; i = sprintf(buf, "EHLO [%lu.%lu.%lu.%lu]\r\n", ((ul&0xFF000000)>>24), ((ul&0x00FF0000)>>16), ((ul&0x0000FF00)>>8), ((ul&0x000000FF))); if(socksend(param->remsock, buf, i, conf.timeouts[STRING_S])!= i) {RETURN(673);} +#ifndef NOPSTDINT + param->statscli64+=i; +#else param->statscli+=i; +#endif param->nwrites++; login = 0; do { @@ -209,26 +213,42 @@ void * smtppchild(struct clientparam* param) { } if ((login & 1)) { socksend(param->remsock, "AUTH LOGIN\r\n", 12, conf.timeouts[STRING_S]); - param->statscli+=12; +#ifndef NOPSTDINT + param->statscli64+=12; +#else + param->statscli+=12; +#endif param->nwrites++; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(680);} en64(param->extusername, buf, (int)strlen(param->extusername)); socksend(param->remsock, buf, (int)strlen(buf), conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); - param->statscli+=(i+2); +#ifndef NOPSTDINT + param->statscli64+=(i+2); +#else + param->statscli+=(i+2); +#endif param->nwrites+=2; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(681);} en64(param->extpassword, buf, (int)strlen(param->extpassword)); socksend(param->remsock, buf, (int)strlen(buf), conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); - param->statscli+=(i+2); +#ifndef NOPSTDINT + param->statscli64+=(i+2); +#else + param->statscli+=(i+2); +#endif param->nwrites+=2; } else if((login & 2)){ socksend(param->remsock, "AUTH PLAIN\r\n", 12, conf.timeouts[STRING_S]); - param->statscli+=12; +#ifndef NOPSTDINT + param->statscli64+=(12); +#else + param->statscli+=(12); +#endif param->nwrites++; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(682);} @@ -243,7 +263,11 @@ void * smtppchild(struct clientparam* param) { i = (int)strlen(buf); socksend(param->remsock, buf, i, conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); - param->statscli+=(i+2); +#ifndef NOPSTDINT + param->statscli64+=(i+2); +#else + param->statscli+=(i+2); +#endif param->nwrites+=2; } if(command) { diff --git a/src/sockgetchar.c b/src/sockgetchar.c index f7d74c5..c507b6b 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -126,7 +126,11 @@ int sockfillbuffsrv(struct clientparam * param, unsigned long size, int timeosec if((len = sockrecvfrom(param->remsock, ¶m->sinc, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ param->srvinbuf += len; param->nreads++; +#ifndef NOPSTDINT + param->statssrv64 += len; +#else param->statssrv += len; +#endif } return param->srvinbuf; } @@ -152,7 +156,11 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){ param->srvinbuf = len; param->srvoffset = 1; param->nreads++; +#ifndef NOPSTDINT + param->statssrv64 += len; +#else param->statssrv += len; +#endif return (int)*param->srvbuf; } diff --git a/src/sockmap.c b/src/sockmap.c index 3b3dfcc..a039322 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -13,7 +13,11 @@ int sockmap(struct clientparam * param, int timeo){ int res=0; +#ifndef NOPSTDINT + uint64_t sent=0, received=0; +#else unsigned sent=0, received=0; +#endif SASIZETYPE sasize; struct pollfd fds[2]; int sleeptime = 0, stop = 0; @@ -32,12 +36,20 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Starting sockets mapping"); #endif +#ifndef NOPSTDINT + if(!param->waitclient64){ +#else if(!param->waitclient){ +#endif if(!param->srvbuf && (!(param->srvbuf=myalloc(bufsize)) || !(param->srvbufsize = bufsize))){ return (21); } } +#ifndef NOPSTDINT + if(!param->waitserver64){ +#else if(!param->waitserver){ +#endif if(!param->clibuf && (!(param->clibuf=myalloc(bufsize)) || !(param->clibufsize = bufsize))){ return (21); } @@ -69,6 +81,16 @@ int sockmap(struct clientparam * param, int timeo){ while (!stop&&!conf.timetoexit){ sasize = sizeof(struct sockaddr_in); +#ifndef NOPSTDINT + if((param->maxtrafin64 && param->statssrv64 >= param->maxtrafin64) || (param->maxtrafout64 && param->statscli64 >= param->maxtrafout64)){ + return (10); + } + if((param->srv->logdumpsrv && (param->statssrv64 > param->srv->logdumpsrv)) || + (param->srv->logdumpcli && (param->statscli64 > param->srv->logdumpcli))) + (*param->srv->logfunc)(param, NULL); + fds[0].events = fds[1].events = 0; + if(param->srvinbuf > param->srvoffset && !param->waitclient64) { +#else if((param->maxtrafin && param->statssrv >= param->maxtrafin) || (param->maxtrafout && param->statscli >= param->maxtrafout)){ return (10); } @@ -77,25 +99,38 @@ int sockmap(struct clientparam * param, int timeo){ (*param->srv->logfunc)(param, NULL); fds[0].events = fds[1].events = 0; if(param->srvinbuf > param->srvoffset && !param->waitclient) { +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "will send to client"); #endif fds[0].events |= POLLOUT; } +#ifndef NOPSTDINT + if((param->srvbufsize - param->srvinbuf) > minsize && !param->waitclient64 && (!param->waitserver64 ||(received + param->srvinbuf - param->srvoffset < param->waitserver64))) { +#else if((param->srvbufsize - param->srvinbuf) > minsize && !param->waitclient && (!param->waitserver ||(received + param->srvinbuf - param->srvoffset < param->waitserver))) { +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will recv from server"); #endif fds[1].events |= POLLIN; } +#ifndef NOPSTDINT + if(param->cliinbuf > param->clioffset && !param->waitserver64) { +#else if(param->cliinbuf > param->clioffset && !param->waitserver) { +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will send to server"); #endif fds[1].events |= POLLOUT; } +#ifndef NOPSTDINT + if((param->clibufsize - param->cliinbuf) > minsize && !param->waitserver64 &&(!param->srv->singlepacket || param->service != S_UDPPM) ) { +#else if((param->clibufsize - param->cliinbuf) > minsize && !param->waitserver &&(!param->srv->singlepacket || param->service != S_UDPPM) ) { +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will recv from client"); #endif @@ -128,7 +163,11 @@ int sockmap(struct clientparam * param, int timeo){ if(param->bandlimfunc) { sleeptime = (*param->bandlimfunc)(param, param->srvinbuf - param->srvoffset, 0); } +#ifndef NOPSTDINT + res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver64 || (param->waitserver64 - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : (int)(param->waitserver64 - received), 0, (struct sockaddr*)¶m->sinc, sasize); +#else res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver || ((unsigned)param->waitserver - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : param->waitserver - received, 0, (struct sockaddr*)¶m->sinc, sasize); +#endif if(res < 0) { if(errno != EAGAIN) return 96; continue; @@ -136,7 +175,11 @@ int sockmap(struct clientparam * param, int timeo){ param->srvoffset += res; received += res; if(param->srvoffset == param->srvinbuf) param->srvoffset = param->srvinbuf = 0; +#ifndef NOPSTDINT + if(param->waitserver64 && param->waitserver64<= received){ +#else if(param->waitserver && param->waitserver<= received){ +#endif return (98); } if(param->service == S_UDPPM && param->srv->singlepacket) { @@ -153,17 +196,26 @@ int sockmap(struct clientparam * param, int timeo){ sl1 = (*param->bandlimfunc)(param, 0, param->cliinbuf - param->clioffset); if(sl1 > sleeptime) sleeptime = sl1; } +#ifndef NOPSTDINT + res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient64 || (param->waitclient64 - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : (int)(param->waitclient64 - sent), 0, (struct sockaddr*)¶m->sins, sasize); +#else res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient || ((unsigned)param->waitclient - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : param->waitclient - sent, 0, (struct sockaddr*)¶m->sins, sasize); +#endif if(res < 0) { if(errno != EAGAIN) return 97; continue; } param->clioffset += res; - sent += res; - param->statscli += res; - param->nwrites++; if(param->clioffset == param->cliinbuf) param->clioffset = param->cliinbuf = 0; + sent += res; + param->nwrites++; +#ifndef NOPSTDINT + param->statscli64 += res; + if(param->waitclient64 && param->waitclient64<= sent) { +#else + param->statscli += res; if(param->waitclient && param->waitclient<= sent) { +#endif return (99); } } @@ -215,7 +267,11 @@ int sockmap(struct clientparam * param, int timeo){ } param->srvinbuf += res; param->nreads++; +#ifndef NOPSTDINT + param->statssrv64 += res; +#else param->statssrv += res; +#endif if(!param->nolongdatfilter){ action = handledatfltsrv(param, ¶m->srvbuf, ¶m->srvbufsize, param->srvinbuf - res, ¶m->srvinbuf); if(action == HANDLED){ @@ -237,26 +293,42 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "finished with mapping"); #endif +#ifndef NOPSTDINT + while(!param->waitclient64 && param->srvinbuf > param->srvoffset && param->clisock != INVALID_SOCKET){ +#else while(!param->waitclient && param->srvinbuf > param->srvoffset && param->clisock != INVALID_SOCKET){ +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to client"); #endif res = socksendto(param->clisock, ¶m->sinc, param->srvbuf + param->srvoffset, param->srvinbuf - param->srvoffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->srvoffset += res; +#ifndef NOPSTDINT + param->statssrv64 += res; +#else param->statssrv += res; +#endif if(param->srvoffset == param->srvinbuf) param->srvoffset = param->srvinbuf = 0; } else break; } +#ifndef NOPSTDINT + while(!param->waitserver64 && param->cliinbuf > param->clioffset && param->remsock != INVALID_SOCKET){ +#else while(!param->waitserver && param->cliinbuf > param->clioffset && param->remsock != INVALID_SOCKET){ +#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to server"); #endif res = socksendto(param->remsock, ¶m->sins, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->clioffset += res; +#ifndef NOPSTDINT + param->statscli64 += res; +#else param->statscli += res; +#endif if(param->cliinbuf == param->clioffset) param->cliinbuf = param->clioffset = 0; } else break; diff --git a/src/socks.c b/src/socks.c index ca3e5b7..e53250b 100644 --- a/src/socks.c +++ b/src/socks.c @@ -339,7 +339,11 @@ fflush(stderr); param->res = 467; break; } +#ifndef NOPSTDINT + param->statscli64+=(len - i); +#else param->statscli+=(len - i); +#endif param->nwrites++; #if SOCKSTRACE > 1 fprintf(stderr, "UDP packet relayed from client to %s:%hu size %d, header %d\n", @@ -366,7 +370,11 @@ fflush(stderr); param->res = 468; break; } +#ifndef NOPSTDINT + param->statssrv64+=len; +#else param->statssrv+=len; +#endif param->nreads++; memcpy(buf+4, &tsin.sin_addr.s_addr, 4); memcpy(buf+8, &tsin.sin_port, 2); diff --git a/src/structures.h b/src/structures.h index 52d8dee..a6e964f 100644 --- a/src/structures.h +++ b/src/structures.h @@ -6,6 +6,9 @@ #include #include #include +#ifndef NOPSTDINT +#include "pstdint.h" +#endif #ifdef __cplusplus extern "C" { #endif @@ -257,10 +260,15 @@ struct trafcount { struct ace *ace; unsigned number; ROTATION type; +#ifndef NOPSTDINT + uint64_t traf64; + uint64_t traflim64; +#else unsigned long traf; unsigned long trafgb; unsigned long traflim; unsigned long traflimgb; +#endif char * comment; int disabled; time_t cleared; @@ -377,8 +385,13 @@ struct clientparam { int res, status; +#ifndef NOPSTDINT + uint64_t waitclient64, + waitserver64; +#else unsigned waitclient, waitserver; +#endif int pwtype, threadid, weight, @@ -402,16 +415,28 @@ struct clientparam { srvoffset, clibufsize, srvbufsize, - msec_start, + msec_start; +#ifndef NOPSTDINT + uint64_t + maxtrafin64, + maxtrafout64; +#else + unsigned maxtrafin, maxtrafout; - +#endif struct sockaddr_in sinc, sins, req; +#ifndef NOPSTDINT + uint64_t statscli64, + statssrv64; +#else unsigned long statscli, - statssrv, + statssrv; +#endif + unsigned long nreads, nwrites, nconnects, @@ -634,6 +659,7 @@ typedef enum { TYPE_SHORT, TYPE_CHAR, TYPE_UNSIGNED, + TYPE_UNSIGNED64, TYPE_TRAFFIC, TYPE_PORT, TYPE_IP, diff --git a/src/webadmin.c b/src/webadmin.c index ad47b52..516a04b 100644 --- a/src/webadmin.c +++ b/src/webadmin.c @@ -475,6 +475,18 @@ void * adminchild(struct clientparam* param) { ); } else { +#ifndef NOPSTDINT + inbuf += sprintf(buf+inbuf, + "%"PRINTF_INT64_MODIFIER"u" + "MB%s" + "%"PRINTF_INT64_MODIFIER"u" + "%s", + cp->traflim64, + rotations[cp->type], + cp->traf64, + cp->cleared?ctime(&cp->cleared):"never" + ); +#else inbuf += sprintf(buf+inbuf, "%.3f" "MB%s" @@ -485,6 +497,7 @@ void * adminchild(struct clientparam* param) { (1024.0 * (float)cp->trafgb) + (float)cp->traf/1048576.0, cp->cleared?ctime(&cp->cleared):"never" ); +#endif inbuf += sprintf(buf + inbuf, "%s" "%i" From 97d811fbfda7a3fcda192824ff734f9a3aba8b0b Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Thu, 10 Apr 2014 04:11:48 +0400 Subject: [PATCH 003/122] temp debugging --- src/proxy.c | 12 ++++++++---- src/sockmap.c | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index b09176b..e8179d0 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -355,7 +355,7 @@ for(;;){ else param->operation = HTTP_OTHER; do { buf[inbuf+i]=0; -/*printf("Got: %s\n", buf+inbuf);*/ +/* printf("Got: %s\n", buf+inbuf); */ #ifndef WITHMAIN if(i > 25 && !param->srv->transparent && (!strncasecmp((char *)(buf+inbuf), "proxy-authorization", 19))){ sb = (unsigned char *)strchr((char *)(buf+inbuf), ':'); @@ -393,7 +393,8 @@ for(;;){ if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){ buf[i]=0; #ifndef NOPSTDINT - sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); + res=sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); +printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); } } while( contentlength64 > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength64)? BUFSIZE - 1:(int)contentlength64, '\n', conf.timeouts[STRING_S])) > 0){ @@ -508,7 +509,9 @@ for(;;){ ++sb; while(isspace(*sb))sb++; #ifndef NOPSTDINT - sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); + res=sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); +printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); + if(param->maxtrafout64 && (param->maxtrafout64 < param->statscli64 || contentlength64 > param->maxtrafout64 - param->statscli64)){ RETURN(10); } @@ -964,7 +967,8 @@ for(;;){ ++sb; while(isspace(*sb))sb++; #ifndef NOPSTDINT - sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); + res=sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); +printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); #else sscanf(sb, "%lu", &contentlength); #endif diff --git a/src/sockmap.c b/src/sockmap.c index a039322..ccf9d66 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -6,6 +6,7 @@ $Id: sockmap.c,v 1.64 2014-04-07 20:35:09 vlad Exp $ */ +#define DEBUGLEVEL 3 #include "proxy.h" From 90ca18b3c1b7fc49c77c073ccf94fa4eb85b7593 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Thu, 10 Apr 2014 04:11:55 +0400 Subject: [PATCH 004/122] Revert "temp debugging" This reverts commit 97d811fbfda7a3fcda192824ff734f9a3aba8b0b. --- src/proxy.c | 12 ++++-------- src/sockmap.c | 1 - 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index e8179d0..b09176b 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -355,7 +355,7 @@ for(;;){ else param->operation = HTTP_OTHER; do { buf[inbuf+i]=0; -/* printf("Got: %s\n", buf+inbuf); */ +/*printf("Got: %s\n", buf+inbuf);*/ #ifndef WITHMAIN if(i > 25 && !param->srv->transparent && (!strncasecmp((char *)(buf+inbuf), "proxy-authorization", 19))){ sb = (unsigned char *)strchr((char *)(buf+inbuf), ':'); @@ -393,8 +393,7 @@ for(;;){ if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){ buf[i]=0; #ifndef NOPSTDINT - res=sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); -printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); + sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); } } while( contentlength64 > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength64)? BUFSIZE - 1:(int)contentlength64, '\n', conf.timeouts[STRING_S])) > 0){ @@ -509,9 +508,7 @@ printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); ++sb; while(isspace(*sb))sb++; #ifndef NOPSTDINT - res=sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); -printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); - + sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); if(param->maxtrafout64 && (param->maxtrafout64 < param->statscli64 || contentlength64 > param->maxtrafout64 - param->statscli64)){ RETURN(10); } @@ -967,8 +964,7 @@ printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); ++sb; while(isspace(*sb))sb++; #ifndef NOPSTDINT - res=sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); -printf("cl: %d/%"PRINTF_INT64_MODIFIER"u\n", res, contentlength64); + sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); #else sscanf(sb, "%lu", &contentlength); #endif diff --git a/src/sockmap.c b/src/sockmap.c index ccf9d66..a039322 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -6,7 +6,6 @@ $Id: sockmap.c,v 1.64 2014-04-07 20:35:09 vlad Exp $ */ -#define DEBUGLEVEL 3 #include "proxy.h" From c411e03126fc65505c86168565b546ab4c59c000 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Thu, 10 Apr 2014 04:16:25 +0400 Subject: [PATCH 005/122] logging to changelog --- Changelog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Changelog b/Changelog index 017822e..8ed688e 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,8 @@ +10.04.2014 +! switching to 64-bit integers where possible. + proxy should now support downloading for files > 4GB. + + 08.04.2014 Releasing as 0.7 Significant changes since 0.6.1: From 5543b3052dde45f09362e09f89112b02ad050f16 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Sun, 13 Apr 2014 19:21:18 +0400 Subject: [PATCH 006/122] Moving icons compilation to Makefiles --- .gitignore | 1 + 3proxy.res | Bin 25272 -> 0 bytes Makefile.msvc | 8 +++++++- Makefile.msvc64 | 7 +++++++ src/Makefile.inc | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) delete mode 100644 3proxy.res diff --git a/.gitignore b/.gitignore index 05e2ab2..4bd7388 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ tmp/ src/version.h src/res version.c +3proxy.res doc/html/man3/ doc/html/man8/ doc/html/index.html diff --git a/3proxy.res b/3proxy.res deleted file mode 100644 index 115b2b77dbc53fbcc26bf9ca6cd55f7926afbd86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25272 zcmeHPO;21^7=9_l+SC~0ilhr?VZziD#1@S)O+!*NHZj((5Lazlij;%`1#IZTw9%NZ zn;2bU+%&qU6}xI5pnV0O@1kBW6LxAy3Z4#5qPn}( zZ$tn7XEtCb8-lt@53d8hf%--GH2^QxZPgZR$>!n1f-Tw{{8_TkZ5ccxfoH<>H)%If zH^_`b_A+?x;BOB6>$Zme3$_An%eGG53>{al;58nB}$&9T4H%2@kP`8l9=Dvzm(R&sM zo`(k$_#6v0`ci2N=Sy}PcCR+mVaVMrWN{Yp`ds@s zJIT*`VGcFxjkDx+=jVuXk!xoLajb4dwY_T0UNJ7=Pch1Qx)x@ppI>Ib3{|HLXmVc| z1P!2OHZi=t_N!=5fgXYe0w*e|Bm@!y34w$_LLecK5J(6l1QG%XfrLOpAR&+tNC+eZ z5&{W2C@DFdep_3y(-0j7M)si#5>R4N9f-z7s?m;^7ORQalXMni)&n{GXs^e z4=Dbhpxpw+q*r6HjygK~|CHY`w#rim6Uv=@X@^&y<>?W=)IAJ}=YwR$M@&Bh z`5cL7zgNbeffS?H$1!iSRs5Qxey$Yh;h1EYS8v11iHCcFuX~>T){Ekgf0&6R2ifrLOp zAR&+tNC*%Cot<>g&bv4FD^f*gGo9c1HFn0OGudnuq|RCKSuA2Z(oN+)FV7mw5Mg}Q zJ<>sU;JiQocOcdmtlASZL~|VTe;n3-JW&<1?t^*zLM+oyZ6E(}i{0l@?;(ye2AT{0 z{f)<{AL>PW{Bek%IaHkfoTv9_&oDmP4~Z^_LFYW}`TiQ8i3`*m=^?EHAA3Kq`y-vK zQRy0b#&y-{~yu+11JO0 zC;3ZW^`YA27jbyh=#%e^h4V8n2k1`a01@Dv_rHeGDp z_c!W)0;25<#Iv5aDH-k0Co#@5gVsvCXYsuI6-ehj>QYS7t1E`Wp67M3PMdrdp`V)| z>EfRC07M(3AQrDn1zksXGX!67Fo2v6FKTr*Nc}*oDaM%&x+~xj4(z@!F&sww6=hv(H zx_K>2zcBJ^yqkVgm*1nhrQ7e7W$34$!iMvQ_l#6}fIt=5tiVqF`xvHn=l3yuDOCZr zagG94*9)EEJ3h{f48(hDr^TNcI+Z0q<#}({{>FQFCx!BxPN38MB|hhLA}{=Yg?+`) z%K!MBs56^$y|7BZw07e?yHGG^aIf-;cR%+a;_w*M>0I+Z--Y~WPFzJ@9{>ILUu2_{ zu}jce0o7_RhG#As@y}!2J%(&*s=kZxzsX}asWe*HU{2Tw9@n_T@X2n_hS3*V$R-o| EKiS_-g#Z8m diff --git a/Makefile.msvc b/Makefile.msvc index 0ee2858..db8d4db 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -28,10 +28,16 @@ TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin - +VERFILE = 3proxyres.obj $(VERFILE) include Makefile.inc +../3proxy.res: + rc /fo../3proxy.res ../3proxy.rc + +3proxyres.obj: ../3proxy.res + cvtres /out:3proxyres.obj /MACHINE:X86 ../3proxy.res + allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) \ No newline at end of file diff --git a/Makefile.msvc64 b/Makefile.msvc64 index 6ee3eda..f4d5d3c 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -28,9 +28,16 @@ TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc64 PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin +VERFILE = 3proxyres.obj $(VERFILE) include Makefile.inc +../3proxy.res: + rc /fo../3proxy.res ../3proxy.rc + +3proxyres.obj: ../3proxy.res + cvtres /out:3proxyres.obj /MACHINE:X64 ../3proxy.res + allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) diff --git a/src/Makefile.inc b/src/Makefile.inc index 8571993..96176d7 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -3,7 +3,7 @@ # 3 proxy common Makefile # -all: pre $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)msnpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) $(BUILDDIR)countersutil$(EXESUFFICS) allplugins +all: pre $(VERFILE) $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)msnpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) $(BUILDDIR)countersutil$(EXESUFFICS) allplugins pre: From f4c6c9d962f002b879aa2673152b5d83e16fd21d Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 14 Apr 2014 02:14:34 +0400 Subject: [PATCH 007/122] legacy counters code removed --- src/3proxy.c | 30 ------------ src/auth.c | 65 ------------------------- src/common.c | 19 -------- src/datatypes.c | 42 ---------------- src/dnspr.c | 8 ---- src/ftppr.c | 14 ------ src/icqpr.c | 22 --------- src/msnpr.c | 12 ----- src/pop3p.c | 4 -- src/proxy.c | 119 ---------------------------------------------- src/smtpp.c | 24 ---------- src/sockgetchar.c | 8 ---- src/sockmap.c | 72 ---------------------------- src/socks.c | 8 ---- src/structures.h | 26 ++-------- src/webadmin.c | 13 ----- 16 files changed, 3 insertions(+), 483 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 977814d..e3c4a80 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -45,12 +45,7 @@ struct counter_header { } cheader = {"3CF", (time_t)0}; struct counter_record { -#ifndef NOPSTDINT uint64_t traf64; -#else - unsigned long traf; - unsigned long trafgb; -#endif time_t cleared; time_t updated; } crecord; @@ -469,11 +464,7 @@ void dumpcounters(struct trafcount *tlin, int counterd){ if(cfp){ for(tl = tlin; cfp && tl; tl = tl->next){ if(tl->type >= conf.countertype) -#ifndef NOPSTDINT fprintf(cfp, "%05d %020"PRINTF_INT64_MODIFIER"u%s%s\n", tl->number, tl->traf64, tl->comment?" #" : "", tl->comment? tl->comment : ""); -#else - fprintf(cfp, "%05d %010lu %010lu%s%s\n", tl->number, tl->trafgb, tl->traf, tl->comment?" #" : "", tl->comment? tl->comment : ""); -#endif } fclose(cfp); } @@ -488,24 +479,14 @@ void dumpcounters(struct trafcount *tlin, int counterd){ lseek(counterd, sizeof(struct counter_header) + (tl->number - 1) * sizeof(struct counter_record), SEEK_SET); -#ifndef NOPSTDINT crecord.traf64 = tl->traf64; -#else - crecord.traf = tl->traf; - crecord.trafgb = tl->trafgb; -#endif crecord.cleared = tl->cleared; crecord.updated = tl->updated; write(counterd, &crecord, sizeof(struct counter_record)); } if(tl->type!=NEVER && timechanged(tl->cleared, conf.time, tl->type)){ tl->cleared = conf.time; -#ifndef NOPSTDINT tl->traf64 = 0; -#else - tl->traf = 0; - tl->trafgb = 0; -#endif } } } @@ -1551,14 +1532,8 @@ static int h_ace(int argc, unsigned char **argv){ sscanf((char *)argv[1], "%u", &tl->number); sscanf((char *)argv[3], "%lu", &lim); tl->type = getrotate(*argv[2]); -#ifndef NOPSTDINT tl->traflim64 = ((uint64_t)lim)*(1024*1024); if(!tl->traflim64) { -#else - tl->traflimgb = (lim/(1024*4)); - tl->traflim = ((lim - (tl->traflimgb*(1024*4)))*(1024*1024)); - if(!tl->traflim && !tl->traflimgb) { -#endif fprintf(stderr, "Wrong traffic limit specified, line %d\n", linenum); return(6); } @@ -1568,12 +1543,7 @@ static int h_ace(int argc, unsigned char **argv){ SEEK_SET); memset(&crecord, 0, sizeof(struct counter_record)); read(conf.counterd, &crecord, sizeof(struct counter_record)); -#ifndef NOPSTDINT tl->traf64 = crecord.traf64; -#else - tl->traf = crecord.traf; - tl->trafgb = crecord.trafgb; -#endif tl->cleared = crecord.cleared; tl->updated = crecord.updated; #ifdef _MAX__TIME64_T diff --git a/src/auth.c b/src/auth.c index b2a9d44..93b24f5 100644 --- a/src/auth.c +++ b/src/auth.c @@ -115,11 +115,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l len += sprintf((char *)buf + len, "\r\n"); if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) != (int)strlen((char *)buf)) return 31; -#ifndef NOPSTDINT param->statssrv64+=len; -#else - param->statssrv+=len; -#endif param->nwrites++; if((res = sockgetlinebuf(param, SERVER,buf,13,'\n',conf.timeouts[CHAIN_TO])) < 13) return 32; @@ -156,11 +152,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) < len){ return 41; } -#ifndef NOPSTDINT param->statssrv64+=len; -#else - param->statssrv+=len; -#endif param->nwrites++; if((len = sockgetlinebuf(param, SERVER, buf, (redir->type == R_SOCKS4B)? 3:8, EOF, conf.timeouts[CHAIN_TO])) != ((redir->type == R_SOCKS4B)? 3:8)){ return 42; @@ -183,11 +175,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, 3, conf.timeouts[CHAIN_TO]) != 3){ return 51; } -#ifndef NOPSTDINT param->statssrv64+=len; -#else - param->statssrv+=len; -#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 2, EOF, conf.timeouts[CHAIN_TO]) != 2){ return 52; @@ -209,11 +197,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, inbuf, conf.timeouts[CHAIN_TO]) != inbuf){ return 51; } -#ifndef NOPSTDINT param->statssrv64+=inbuf; -#else - param->statssrv+=inbuf; -#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 2, EOF, 60) != 2){ return 55; @@ -243,11 +227,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) != len){ return 51; } -#ifndef NOPSTDINT param->statssrv64+=len; -#else - param->statssrv+=len; -#endif param->nwrites++; if(sockgetlinebuf(param, SERVER, buf, 4, EOF, conf.timeouts[CHAIN_TO]) != 4){ return 57; @@ -561,7 +541,6 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb void trafcountfunc(struct clientparam *param){ struct trafcount * tc; - unsigned long val; int countout = 0; pthread_mutex_lock(&tc_mutex); @@ -573,13 +552,7 @@ void trafcountfunc(struct clientparam *param){ countout = 1; continue; } -#ifndef NOPSTDINT tc->traf64 += param->statssrv64; -#else - val = tc->traf + param->statssrv; - if(val < tc->traf) tc->trafgb++; - tc->traf = val; -#endif time(&t); tc->updated = t; } @@ -591,13 +564,7 @@ void trafcountfunc(struct clientparam *param){ if(tc->ace->action != COUNTOUT) { continue; } -#ifndef NOPSTDINT tc->traf64 += param->statscli64; -#else - val = tc->traf + param->statscli; - if(val < tc->traf) tc->trafgb++; - tc->traf = val; -#endif time(&t); tc->updated = t; } @@ -624,21 +591,9 @@ int alwaysauth(struct clientparam * param){ continue; } -#ifndef NOPSTDINT if(tc->traflim64 <= tc->traf64) return 10; param->trafcountfunc = conf.trafcountfunc; param->maxtrafin64 = tc->traflim64 - tc->traf64; -#else - if((tc->traflimgb < tc->trafgb) || - ((tc->traflimgb == tc->trafgb) && (tc->traflim < tc->traf)) - ) return 10; - param->trafcountfunc = conf.trafcountfunc; - if(tc->traflimgb - tc->trafgb < 1 || ((tc->traflimgb - tc->trafgb) == 1 && tc->traf > tc->traflim)){ - unsigned maxtraf = tc->traflim - tc->traf; - if(!param->maxtrafin || param->maxtrafin > maxtraf) param->maxtrafin = maxtraf; - } - if((tc->trafgb > tc->traflimgb) || (tc->trafgb == tc->traflimgb && tc->traf >= tc->traflim)) param->maxtrafin = 1; -#endif } } if(countout)for(tc = conf.trafcounter; tc; tc = tc->next) { @@ -649,21 +604,9 @@ int alwaysauth(struct clientparam * param){ continue; } -#ifndef NOPSTDINT if(tc->traflim64 <= tc->traf64) return 10; param->trafcountfunc = conf.trafcountfunc; param->maxtrafout64 = tc->traflim64 - tc->traf64; -#else - if((tc->traflimgb < tc->trafgb) || - ((tc->traflimgb == tc->trafgb) && (tc->traflim < tc->traf)) - ) return 10; - param->trafcountfunc = conf.trafcountfunc; - if(tc->traflimgb - tc->trafgb < 1 || ((tc->traflimgb - tc->trafgb) == 1 && tc->traf > tc->traflim)){ - unsigned maxtraf = tc->traflim - tc->traf; - if(!param->maxtrafout || param->maxtrafout > maxtraf) param->maxtrafout = maxtraf; - } - if((tc->trafgb > tc->traflimgb) || (tc->trafgb == tc->traflimgb && tc->traf >= tc->traflim)) param->maxtrafout = 1; -#endif } } @@ -1129,20 +1072,12 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa so._closesocket(sock); continue; } -#ifndef NOPSTDINT if(param) param->statscli64 += len; -#else - if(param) param->statscli += len; -#endif len = sockrecvfrom(sock, sinsp, buf, 4096, 15000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); if(len <= 13) continue; -#ifndef NOPSTDINT if(param) param->statssrv64 += len; -#else - if(param) param->statssrv += len; -#endif if(*(unsigned short *)buf != nquery)continue; if((na = buf[7] + (((unsigned short)buf[6])<<8)) < 1) { return 0; diff --git a/src/common.c b/src/common.c index 694c973..b2509a3 100644 --- a/src/common.c +++ b/src/common.c @@ -287,11 +287,7 @@ void clearstat(struct clientparam * param) { param->time_start = (time_t)tv.tv_sec; param->msec_start = (tv.tv_usec / 1000); #endif -#ifndef NOPSTDINT param->statscli64 = param->statssrv64 = param->nreads = param->nwrites = -#else - param->statscli = param->statssrv = param->nreads = param->nwrites = -#endif param->nconnects = 0; } @@ -382,17 +378,10 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i+=10; break; case 'b': -#ifndef NOPSTDINT i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statscli64 * 1000./delay):0); break; case 'B': i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statssrv64 * 1000./delay):0); -#else - i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statscli * 1000./delay):0); - break; - case 'B': - i+=sprintf((char *)buf+i, "%u", delay?(unsigned)(param->statssrv * 1000./delay):0); -#endif break; case 'D': i+=sprintf((char *)buf+i, "%u", delay); @@ -489,19 +478,11 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += (int)strlen((char *)buf+i); break; case 'I': -#ifndef NOPSTDINT sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statssrv64); i += (int)strlen((char *)buf+i); break; case 'O': sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statscli64); -#else - sprintf((char *)buf+i, "%lu", param->statssrv); - i += (int)strlen((char *)buf+i); - break; - case 'O': - sprintf((char *)buf+i, "%lu", param->statscli); -#endif i += (int)strlen((char *)buf+i); break; case 'h': diff --git a/src/datatypes.c b/src/datatypes.c index a99f7d5..554ab8f 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -8,12 +8,10 @@ #include "proxy.h" -#ifndef NOPSTDINT static void pr_unsigned64(struct node *node, CBFUNC cbf, void*cb){ char buf[32]; if(node->value)(*cbf)(cb, buf, sprintf(buf, "%"PRINTF_INT64_MODIFIER"u", *(uint64_t *)node->value)); } -#endif static void pr_integer(struct node *node, CBFUNC cbf, void*cb){ char buf[16]; @@ -453,7 +451,6 @@ static void * ef_trafcounter_type(struct node * node){ return &((struct trafcount *)node->value) -> type; } -#ifndef NOPSTDINT static void * ef_trafcounter_traffic64(struct node * node){ return &((struct trafcount *)node->value) -> traf64; } @@ -476,33 +473,6 @@ static void * ef_client_bytesout64(struct node * node){ return &((struct clientparam *)node->value) -> statscli64; } -#else - -static void * ef_trafcounter_traffic(struct node * node){ - return &((struct trafcount *)node->value) -> traf; -} -static void * ef_trafcounter_limit(struct node * node){ - return &((struct trafcount *)node->value) -> traflim; -} -static void * ef_client_maxtrafin(struct node * node){ - return &((struct clientparam *)node->value) -> maxtrafin; -} -static void * ef_client_maxtrafout(struct node * node){ - return &((struct clientparam *)node->value) -> maxtrafout; -} - -static void * ef_client_bytesin(struct node * node){ - return &((struct clientparam *)node->value) -> statssrv; -} - -static void * ef_client_bytesout(struct node * node){ - return &((struct clientparam *)node->value) -> statscli; -} - - -#endif - - static void * ef_trafcounter_cleared(struct node * node){ return &((struct trafcount *)node->value) -> cleared; } @@ -777,13 +747,8 @@ static struct property prop_trafcounter[] = { {prop_trafcounter + 4, "type", ef_trafcounter_type, TYPE_ROTATION, "rotation type"}, -#ifndef NOPSTDINT {prop_trafcounter + 5, "traffic", ef_trafcounter_traffic64, TYPE_UNSIGNED64, "counter value"}, {prop_trafcounter + 6, "limit", ef_trafcounter_limit64, TYPE_UNSIGNED64, "counter limit"}, -#else - {prop_trafcounter + 5, "traffic", ef_trafcounter_traffic, TYPE_TRAFFIC, "counter value"}, - {prop_trafcounter + 6, "limit", ef_trafcounter_limit, TYPE_TRAFFIC, "counter limit"}, -#endif {prop_trafcounter + 7, "cleared", ef_trafcounter_cleared, TYPE_DATETIME, "last rotated"}, {prop_trafcounter + 8, "updated", ef_trafcounter_updated, TYPE_DATETIME, "last updated"}, {prop_trafcounter + 9, "comment", ef_trafcounter_comment, TYPE_STRING, "counter comment"}, @@ -835,17 +800,10 @@ static struct property prop_client[] = { {prop_client + 15, "srvport", ef_client_srvport, TYPE_PORT, "target server port"}, {prop_client + 16, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"}, {prop_client + 17, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"}, -#ifndef NOPSTDINT {prop_client + 18, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, {prop_client + 19, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, {prop_client + 20, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, {prop_client + 21, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, -#else - {prop_client + 18, "bytesin", ef_client_bytesin, TYPE_UNSIGNED, "bytes from server to client"}, - {prop_client + 19, "bytesout", ef_client_bytesout, TYPE_UNSIGNED, "bytes from client to server"}, - {prop_client + 20, "maxtrafin", ef_client_maxtrafin, TYPE_UNSIGNED, "maximum traffic allowed for download"}, - {prop_client + 21, "maxtrafout", ef_client_maxtrafout, TYPE_UNSIGNED, "maximum traffic allowed for upload"}, -#endif {prop_client + 22, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, {NULL, "next", ef_client_next, TYPE_CLIENT, "next"} diff --git a/src/dnspr.c b/src/dnspr.c index 661a668..6612d6f 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -147,21 +147,13 @@ void * dnsprchild(struct clientparam* param) { if(socksendto(param->remsock, ¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ RETURN(820); } -#ifndef NOPSTDINT param->statscli64 += i; -#else - param->statscli += i; -#endif param->nwrites++; len = sockrecvfrom(param->remsock, ¶m->sins, buf, BUFSIZE, 15000); if(len <= 13) { RETURN(821); } -#ifndef NOPSTDINT param->statssrv64 += len; -#else - param->statssrv += len; -#endif param->nreads++; if(buf[6] || buf[7]){ if(socksendto(param->clisock, ¶m->sinc, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ diff --git a/src/ftppr.c b/src/ftppr.c index 28d695e..4feeb7b 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -276,11 +276,7 @@ param->srv->logfunc(param,buf); buf[i++] = '\r'; buf[i++] = '\n'; if(socksend(param->remsock, buf, i, conf.timeouts[STRING_S])!=i) {RETURN (811);} -#ifndef NOPSTDINT param->statscli64+=(i); -#else - param->statscli+=(i); -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, BUFSIZE, '\n', conf.timeouts[STRING_L])) > 0){ if(socksend(param->ctrlsock, buf, i, conf.timeouts[STRING_S])!=i) {RETURN (812);} @@ -291,15 +287,9 @@ param->srv->logfunc(param,buf); } sasize = sizeof(struct sockaddr_in); if(so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(819);} -#ifndef NOPSTDINT if(req && (param->statscli64 || param->statssrv64)){ (*param->srv->logfunc)(param, (unsigned char *)req); } -#else - if(req && (param->statscli || param->statssrv)){ - (*param->srv->logfunc)(param, (unsigned char *)req); - } -#endif } CLEANRET: @@ -318,11 +308,7 @@ CLEANRET: } sasize = sizeof(struct sockaddr_in); so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize); -#ifndef NOPSTDINT if(param->res != 0 || param->statscli64 || param->statssrv64 ){ -#else - if(param->res != 0 || param->statscli || param->statssrv ){ -#endif (*param->srv->logfunc)(param, (unsigned char *)((req && (param->res > 802))? req:NULL)); } if(req) myfree(req); diff --git a/src/icqpr.c b/src/icqpr.c index e1a315d..ee6808a 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -109,11 +109,7 @@ static void addbuffer(int increment, struct clientparam * param, unsigned char * if(len > 0) { *length_p += len; param->nreads++; -#ifndef NOPSTDINT param->statssrv64 += len; -#else - param->statssrv += len; -#endif } return; } @@ -441,31 +437,17 @@ void * icqprchild(struct clientparam* param) { if(greet){ if(socksend(param->remsock, tmpsend, 10, conf.timeouts[STRING_S])!=10) {RETURN (1105);} -#ifndef NOPSTDINT param->statscli64 += 10; -#else - param->statscli += 10; -#endif } if(readflap(param, SERVER, tmpsend, 1024)) {RETURN (1111);} -#ifndef NOPSTDINT param->statssrv64 += (ntohs(((struct flap_header *)tmpsend)->size) + 6); -#else - param->statssrv += (ntohs(((struct flap_header *)tmpsend)->size) + 6); -#endif mystate.srvseq = ntohs(((struct flap_header *)tmpsend)->seq) + 1; mystate.seq = 1; len = ntohs(flap->size) + 6; if((res=handledatfltcli(param, &buf, &buflen, offset, &len))!=PASS) RETURN(res); if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=(ntohs(flap->size)+6)) {RETURN (1106);} offset = 0; -#ifndef NOPSTDINT param->statscli64 += len; -#else - param->statscli += len; -#endif - - if(logintype == ICQMD5) { if(readflap(param, SERVER, buf, 65550)) {RETURN (1112);} @@ -481,11 +463,7 @@ void * icqprchild(struct clientparam* param) { len = ntohs(flap->size) + 6; if((res=handledatfltcli(param, &buf, &buflen, offset, &len))!=PASS) RETURN(res); if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=len) {RETURN (1115);} -#ifndef NOPSTDINT param->statscli64 += len; -#else - param->statscli += len; -#endif offset = 0; } if(logintype != ICQCOOKIE) { diff --git a/src/msnpr.c b/src/msnpr.c index 1ff1391..31895b4 100644 --- a/src/msnpr.c +++ b/src/msnpr.c @@ -173,22 +173,14 @@ void * msnprchild(struct clientparam* param) { if(!sec){ len = (int)strlen(verstr); if(socksend(param->remsock, verstr, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} -#ifndef NOPSTDINT param->statscli64 += len; -#else - param->statscli += len; -#endif myfree(verstr); verstr = mystrdup(buf); len = sockgetlinebuf(param, SERVER, buf, 240, '\n', conf.timeouts[STRING_S]); if(len < 10) RETURN(1208); -#ifndef NOPSTDINT param->statssrv64 += len; -#else - param->statssrv += len; -#endif strcpy(buf, verstr); } @@ -198,11 +190,7 @@ void * msnprchild(struct clientparam* param) { if(socksend(param->remsock, buf, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} -#ifndef NOPSTDINT param->statscli64 += len; -#else - param->statscli += len; -#endif if(sec){ RETURN(sockmap(param, conf.timeouts[CONNECTION_L])); diff --git a/src/pop3p.c b/src/pop3p.c index f5ac9b7..c3a7ef6 100644 --- a/src/pop3p.c +++ b/src/pop3p.c @@ -43,11 +43,7 @@ void * pop3pchild(struct clientparam* param) { socksend(param->remsock, param->extusername, (int)strlen((char *)param->extusername), conf.timeouts[STRING_S]) <= 0 || socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S])!=2) {RETURN(623);} -#ifndef NOPSTDINT param->statscli64 += (uint64_t)(strlen((char *)param->extusername) + 7); -#else - param->statscli += (int)(strlen((char *)param->extusername) + 7); -#endif param->nwrites++; RETURN (sockmap(param, 180)); CLEANRET: diff --git a/src/proxy.c b/src/proxy.c index b09176b..36f201b 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -217,11 +217,7 @@ void * proxychild(struct clientparam* param) { unsigned char *ftpbase=NULL; unsigned char username[1024]; int keepalive = 0; -#ifndef NOPSTDINT uint64_t contentlength64 = 0; -#else - unsigned long contentlength = 0; -#endif int hascontent =0; int isconnect = 0; int redirect = 0; @@ -392,7 +388,6 @@ for(;;){ while( (i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){ if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){ buf[i]=0; -#ifndef NOPSTDINT sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); } } @@ -401,16 +396,6 @@ for(;;){ contentlength64-=i; } contentlength64 = 0; -#else - sscanf((char *)buf + 15, "%lu", &contentlength); - } - } - while( contentlength > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength)? BUFSIZE - 1:contentlength, '\n', conf.timeouts[STRING_S])) > 0){ - if ((unsigned long)i > contentlength) break; - contentlength-=i; - } - contentlength = 0; -#endif if(param->password)myfree(param->password); param->password = myalloc(32); param->pwtype = 2; @@ -507,19 +492,11 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; -#ifndef NOPSTDINT sscanf(sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); if(param->maxtrafout64 && (param->maxtrafout64 < param->statscli64 || contentlength64 > param->maxtrafout64 - param->statscli64)){ RETURN(10); } if(param->ndatfilterscli > 0 && contentlength64 > 0) continue; -#else - sscanf(sb, "%lu",&contentlength); - if(param->maxtrafout && (param->maxtrafout < param->statscli || (unsigned)contentlength > param->maxtrafout - param->statscli)){ - RETURN(10); - } - if(param->ndatfilterscli > 0 && contentlength > 0) continue; -#endif } inbuf += i; if((bufsize - inbuf) < LINESIZE){ @@ -550,34 +527,19 @@ for(;;){ RETURN(0); } if(action != PASS) RETURN(517); -#ifndef NOPSTDINT if(param->ndatfilterscli > 0 && contentlength64 > 0){ uint64_t newlen64; newlen64 = sockfillbuffcli(param, (unsigned long)contentlength64, CONNECTION_S); if(newlen64 == contentlength64) { -#else - if(param->ndatfilterscli > 0 && contentlength > 0){ - unsigned long newlen; - newlen = sockfillbuffcli(param, contentlength, CONNECTION_S); - if(newlen == contentlength) { -#endif action = handledatfltcli(param, ¶m->clibuf, ¶m->clibufsize, 0, ¶m->cliinbuf); if(action == HANDLED){ RETURN(0); } if(action != PASS) RETURN(517); -#ifndef NOPSTDINT contentlength64 = param->cliinbuf; -#else - contentlength = param->cliinbuf; -#endif param->ndatfilterscli = 0; } -#ifndef NOPSTDINT sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRINTF_INT64_MODIFIER"u\r\n", contentlength64); -#else - sprintf((char*)buf+strlen((char *)buf), "Content-Length: %lu\r\n", contentlength); -#endif } #endif @@ -657,11 +619,7 @@ for(;;){ socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]); s = param->remsock; param->remsock = ftps; -#ifndef NOPSTDINT if((param->operation == FTP_PUT) && (contentlength64 > 0)) param->waitclient64 = contentlength64; -#else - if((param->operation == FTP_PUT) && (contentlength > 0)) param->waitclient = contentlength; -#endif res = sockmap(param, conf.timeouts[CONNECTION_L]); if (res == 99) res = 0; so._closesocket(ftps); @@ -863,11 +821,7 @@ for(;;){ if(socksend(param->remsock, req , (res = (int)strlen((char *)req)), conf.timeouts[STRING_L]) != res) { RETURN(518); } -#ifndef NOPSTDINT param->statscli64 += res; -#else - param->statscli += res; -#endif param->nwrites++; } inbuf = 0; @@ -899,16 +853,11 @@ for(;;){ if ((res = socksend(param->remsock, buf+reqlen, (int)strlen((char *)buf+reqlen), conf.timeouts[STRING_S])) != (int)strlen((char *)buf+reqlen)) { RETURN(518); } -#ifndef NOPSTDINT param->statscli64 += res; -#else - param->statscli += res; -#endif param->nwrites++; if(param->bandlimfunc) { sleeptime = param->bandlimfunc(param, 0, (int)strlen((char *)buf)); } -#ifndef NOPSTDINT if(contentlength64 > 0){ param->nolongdatfilter = 0; param->waitclient64 = contentlength64; @@ -919,18 +868,6 @@ for(;;){ } } contentlength64 = 0; -#else - if(contentlength > 0){ - param->nolongdatfilter = 0; - param->waitclient = contentlength; - res = sockmap(param, conf.timeouts[CONNECTION_S]); - param->waitclient = 0; - if(res != 99) { - RETURN(res); - } - } - contentlength = 0; -#endif inbuf = 0; ckeepalive = keepalive; res = 0; @@ -963,21 +900,13 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; -#ifndef NOPSTDINT sscanf(sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); -#else - sscanf(sb, "%lu", &contentlength); -#endif hascontent = 1; if(param->unsafefilter && param->ndatfilterssrv > 0) { hascontent = 2; continue; } -#ifndef NOPSTDINT if(param->maxtrafin64 && (param->maxtrafin64 < param->statssrv64 || contentlength64 + param->statssrv64 > param->maxtrafin64)){ -#else - if(param->maxtrafin && (param->maxtrafin < param->statssrv || (unsigned)contentlength > param->maxtrafin - param->statssrv)){ -#endif RETURN(10); } } @@ -1006,11 +935,7 @@ for(;;){ } if((res == 304 || res == 204) && !hascontent){ hascontent = 1; -#ifndef NOPSTDINT contentlength64 = 0; -#else - contentlength = 0; -#endif } if(param->bandlimfunc) { int st1; @@ -1034,7 +959,6 @@ for(;;){ param->nolongdatfilter = 0; -#ifndef NOPSTDINT if (conf.filtermaxsize && contentlength64 > (uint64_t)conf.filtermaxsize) { param->nolongdatfilter = 1; } @@ -1054,27 +978,6 @@ for(;;){ } } if (contentlength64 > 0 && hascontent != 1) ckeepalive = 0; -#else - if (conf.filtermaxsize && contentlength > (unsigned long)conf.filtermaxsize) { - param->nolongdatfilter = 1; - } - else if(param->unsafefilter && param->ndatfilterssrv > 0 && contentlength > 0 && param->operation != HTTP_HEAD && res != 204 && res != 304){ - unsigned long newlen; - newlen = sockfillbuffsrv(param, (unsigned long) contentlength, CONNECTION_S); - if(newlen == contentlength) { - action = handledatfltsrv(param, ¶m->srvbuf, ¶m->srvbufsize, 0, ¶m->srvinbuf); - param->nolongdatfilter = 1; - if(action == HANDLED){ - RETURN(0); - } - if(action != PASS) RETURN(517); - contentlength = param->srvinbuf; - sprintf((char*)buf+strlen((char *)buf), "Content-Length: %lu\r\n", contentlength); - hascontent = 1; - } - } - if (contentlength > 0 && hascontent != 1) ckeepalive = 0; -#endif #else #endif if(!isconnect || param->operation){ @@ -1093,11 +996,7 @@ for(;;){ RETURN(521); } } -#ifndef NOPSTDINT if((param->chunked || contentlength64 > 0) && param->operation != HTTP_HEAD && res != 204 && res != 304) { -#else - if((param->chunked || contentlength > 0) && param->operation != HTTP_HEAD && res != 204 && res != 304) { -#endif do { if(param->chunked){ char smallbuf[32]; @@ -1122,32 +1021,18 @@ for(;;){ break; } smallbuf[i] = 0; -#ifndef NOPSTDINT contentlength64 = 0; sscanf(smallbuf, "%"PRINTF_INT64_MODIFIER"x", &contentlength64); if(contentlength64 == 0) { -#else - contentlength = 0; - sscanf(smallbuf, "%lx", &contentlength); - if(contentlength == 0) { -#endif param->chunked = 2; } } if(param->chunked != 2){ -#ifndef NOPSTDINT param->waitserver64 = contentlength64; -#else - param->waitserver = contentlength; -#endif if((res = sockmap(param, conf.timeouts[CONNECTION_S])) != 98){ RETURN(res); } -#ifndef NOPSTDINT param->waitserver64 = 0; -#else - param->waitserver = 0; -#endif } } while(param->chunked); } @@ -1160,11 +1045,7 @@ for(;;){ else if(!hascontent && !param->chunked) { RETURN(sockmap(param, conf.timeouts[CONNECTION_S])); } -#ifndef NOPSTDINT contentlength64 = 0; -#else - contentlength = 0; -#endif REQUESTEND: if((!ckeepalive || !keepalive) && param->remsock != INVALID_SOCKET){ diff --git a/src/smtpp.c b/src/smtpp.c index f736119..8c17e73 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -191,11 +191,7 @@ void * smtppchild(struct clientparam* param) { ul = param->extip; i = sprintf(buf, "EHLO [%lu.%lu.%lu.%lu]\r\n", ((ul&0xFF000000)>>24), ((ul&0x00FF0000)>>16), ((ul&0x0000FF00)>>8), ((ul&0x000000FF))); if(socksend(param->remsock, buf, i, conf.timeouts[STRING_S])!= i) {RETURN(673);} -#ifndef NOPSTDINT param->statscli64+=i; -#else - param->statscli+=i; -#endif param->nwrites++; login = 0; do { @@ -213,42 +209,26 @@ void * smtppchild(struct clientparam* param) { } if ((login & 1)) { socksend(param->remsock, "AUTH LOGIN\r\n", 12, conf.timeouts[STRING_S]); -#ifndef NOPSTDINT param->statscli64+=12; -#else - param->statscli+=12; -#endif param->nwrites++; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(680);} en64(param->extusername, buf, (int)strlen(param->extusername)); socksend(param->remsock, buf, (int)strlen(buf), conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); -#ifndef NOPSTDINT param->statscli64+=(i+2); -#else - param->statscli+=(i+2); -#endif param->nwrites+=2; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(681);} en64(param->extpassword, buf, (int)strlen(param->extpassword)); socksend(param->remsock, buf, (int)strlen(buf), conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); -#ifndef NOPSTDINT param->statscli64+=(i+2); -#else - param->statscli+=(i+2); -#endif param->nwrites+=2; } else if((login & 2)){ socksend(param->remsock, "AUTH PLAIN\r\n", 12, conf.timeouts[STRING_S]); -#ifndef NOPSTDINT param->statscli64+=(12); -#else - param->statscli+=(12); -#endif param->nwrites++; i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]); if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(682);} @@ -263,11 +243,7 @@ void * smtppchild(struct clientparam* param) { i = (int)strlen(buf); socksend(param->remsock, buf, i, conf.timeouts[STRING_S]); socksend(param->remsock, "\r\n", 2, conf.timeouts[STRING_S]); -#ifndef NOPSTDINT param->statscli64+=(i+2); -#else - param->statscli+=(i+2); -#endif param->nwrites+=2; } if(command) { diff --git a/src/sockgetchar.c b/src/sockgetchar.c index c507b6b..0041fdf 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -126,11 +126,7 @@ int sockfillbuffsrv(struct clientparam * param, unsigned long size, int timeosec if((len = sockrecvfrom(param->remsock, ¶m->sinc, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ param->srvinbuf += len; param->nreads++; -#ifndef NOPSTDINT param->statssrv64 += len; -#else - param->statssrv += len; -#endif } return param->srvinbuf; } @@ -156,11 +152,7 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){ param->srvinbuf = len; param->srvoffset = 1; param->nreads++; -#ifndef NOPSTDINT param->statssrv64 += len; -#else - param->statssrv += len; -#endif return (int)*param->srvbuf; } diff --git a/src/sockmap.c b/src/sockmap.c index a039322..d2a2eca 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -13,11 +13,7 @@ int sockmap(struct clientparam * param, int timeo){ int res=0; -#ifndef NOPSTDINT uint64_t sent=0, received=0; -#else - unsigned sent=0, received=0; -#endif SASIZETYPE sasize; struct pollfd fds[2]; int sleeptime = 0, stop = 0; @@ -36,20 +32,12 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Starting sockets mapping"); #endif -#ifndef NOPSTDINT if(!param->waitclient64){ -#else - if(!param->waitclient){ -#endif if(!param->srvbuf && (!(param->srvbuf=myalloc(bufsize)) || !(param->srvbufsize = bufsize))){ return (21); } } -#ifndef NOPSTDINT if(!param->waitserver64){ -#else - if(!param->waitserver){ -#endif if(!param->clibuf && (!(param->clibuf=myalloc(bufsize)) || !(param->clibufsize = bufsize))){ return (21); } @@ -81,7 +69,6 @@ int sockmap(struct clientparam * param, int timeo){ while (!stop&&!conf.timetoexit){ sasize = sizeof(struct sockaddr_in); -#ifndef NOPSTDINT if((param->maxtrafin64 && param->statssrv64 >= param->maxtrafin64) || (param->maxtrafout64 && param->statscli64 >= param->maxtrafout64)){ return (10); } @@ -90,47 +77,25 @@ int sockmap(struct clientparam * param, int timeo){ (*param->srv->logfunc)(param, NULL); fds[0].events = fds[1].events = 0; if(param->srvinbuf > param->srvoffset && !param->waitclient64) { -#else - if((param->maxtrafin && param->statssrv >= param->maxtrafin) || (param->maxtrafout && param->statscli >= param->maxtrafout)){ - return (10); - } - if((param->srv->logdumpsrv && (param->statssrv > param->srv->logdumpsrv)) || - (param->srv->logdumpcli && (param->statscli > param->srv->logdumpcli))) - (*param->srv->logfunc)(param, NULL); - fds[0].events = fds[1].events = 0; - if(param->srvinbuf > param->srvoffset && !param->waitclient) { -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "will send to client"); #endif fds[0].events |= POLLOUT; } -#ifndef NOPSTDINT if((param->srvbufsize - param->srvinbuf) > minsize && !param->waitclient64 && (!param->waitserver64 ||(received + param->srvinbuf - param->srvoffset < param->waitserver64))) { -#else - if((param->srvbufsize - param->srvinbuf) > minsize && !param->waitclient && (!param->waitserver ||(received + param->srvinbuf - param->srvoffset < param->waitserver))) { -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will recv from server"); #endif fds[1].events |= POLLIN; } -#ifndef NOPSTDINT if(param->cliinbuf > param->clioffset && !param->waitserver64) { -#else - if(param->cliinbuf > param->clioffset && !param->waitserver) { -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will send to server"); #endif fds[1].events |= POLLOUT; } -#ifndef NOPSTDINT if((param->clibufsize - param->cliinbuf) > minsize && !param->waitserver64 &&(!param->srv->singlepacket || param->service != S_UDPPM) ) { -#else - if((param->clibufsize - param->cliinbuf) > minsize && !param->waitserver &&(!param->srv->singlepacket || param->service != S_UDPPM) ) { -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Will recv from client"); #endif @@ -163,11 +128,7 @@ int sockmap(struct clientparam * param, int timeo){ if(param->bandlimfunc) { sleeptime = (*param->bandlimfunc)(param, param->srvinbuf - param->srvoffset, 0); } -#ifndef NOPSTDINT res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver64 || (param->waitserver64 - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : (int)(param->waitserver64 - received), 0, (struct sockaddr*)¶m->sinc, sasize); -#else - res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver || ((unsigned)param->waitserver - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : param->waitserver - received, 0, (struct sockaddr*)¶m->sinc, sasize); -#endif if(res < 0) { if(errno != EAGAIN) return 96; continue; @@ -175,11 +136,7 @@ int sockmap(struct clientparam * param, int timeo){ param->srvoffset += res; received += res; if(param->srvoffset == param->srvinbuf) param->srvoffset = param->srvinbuf = 0; -#ifndef NOPSTDINT if(param->waitserver64 && param->waitserver64<= received){ -#else - if(param->waitserver && param->waitserver<= received){ -#endif return (98); } if(param->service == S_UDPPM && param->srv->singlepacket) { @@ -196,11 +153,7 @@ int sockmap(struct clientparam * param, int timeo){ sl1 = (*param->bandlimfunc)(param, 0, param->cliinbuf - param->clioffset); if(sl1 > sleeptime) sleeptime = sl1; } -#ifndef NOPSTDINT res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient64 || (param->waitclient64 - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : (int)(param->waitclient64 - sent), 0, (struct sockaddr*)¶m->sins, sasize); -#else - res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient || ((unsigned)param->waitclient - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : param->waitclient - sent, 0, (struct sockaddr*)¶m->sins, sasize); -#endif if(res < 0) { if(errno != EAGAIN) return 97; continue; @@ -209,13 +162,8 @@ int sockmap(struct clientparam * param, int timeo){ if(param->clioffset == param->cliinbuf) param->clioffset = param->cliinbuf = 0; sent += res; param->nwrites++; -#ifndef NOPSTDINT param->statscli64 += res; if(param->waitclient64 && param->waitclient64<= sent) { -#else - param->statscli += res; - if(param->waitclient && param->waitclient<= sent) { -#endif return (99); } } @@ -267,11 +215,7 @@ int sockmap(struct clientparam * param, int timeo){ } param->srvinbuf += res; param->nreads++; -#ifndef NOPSTDINT param->statssrv64 += res; -#else - param->statssrv += res; -#endif if(!param->nolongdatfilter){ action = handledatfltsrv(param, ¶m->srvbuf, ¶m->srvbufsize, param->srvinbuf - res, ¶m->srvinbuf); if(action == HANDLED){ @@ -293,42 +237,26 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "finished with mapping"); #endif -#ifndef NOPSTDINT while(!param->waitclient64 && param->srvinbuf > param->srvoffset && param->clisock != INVALID_SOCKET){ -#else - while(!param->waitclient && param->srvinbuf > param->srvoffset && param->clisock != INVALID_SOCKET){ -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to client"); #endif res = socksendto(param->clisock, ¶m->sinc, param->srvbuf + param->srvoffset, param->srvinbuf - param->srvoffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->srvoffset += res; -#ifndef NOPSTDINT param->statssrv64 += res; -#else - param->statssrv += res; -#endif if(param->srvoffset == param->srvinbuf) param->srvoffset = param->srvinbuf = 0; } else break; } -#ifndef NOPSTDINT while(!param->waitserver64 && param->cliinbuf > param->clioffset && param->remsock != INVALID_SOCKET){ -#else - while(!param->waitserver && param->cliinbuf > param->clioffset && param->remsock != INVALID_SOCKET){ -#endif #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to server"); #endif res = socksendto(param->remsock, ¶m->sins, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->clioffset += res; -#ifndef NOPSTDINT param->statscli64 += res; -#else - param->statscli += res; -#endif if(param->cliinbuf == param->clioffset) param->cliinbuf = param->clioffset = 0; } else break; diff --git a/src/socks.c b/src/socks.c index e53250b..5bdba1d 100644 --- a/src/socks.c +++ b/src/socks.c @@ -339,11 +339,7 @@ fflush(stderr); param->res = 467; break; } -#ifndef NOPSTDINT param->statscli64+=(len - i); -#else - param->statscli+=(len - i); -#endif param->nwrites++; #if SOCKSTRACE > 1 fprintf(stderr, "UDP packet relayed from client to %s:%hu size %d, header %d\n", @@ -370,11 +366,7 @@ fflush(stderr); param->res = 468; break; } -#ifndef NOPSTDINT param->statssrv64+=len; -#else - param->statssrv+=len; -#endif param->nreads++; memcpy(buf+4, &tsin.sin_addr.s_addr, 4); memcpy(buf+8, &tsin.sin_port, 2); diff --git a/src/structures.h b/src/structures.h index a6e964f..40f6268 100644 --- a/src/structures.h +++ b/src/structures.h @@ -8,6 +8,9 @@ #include #ifndef NOPSTDINT #include "pstdint.h" +#else +typedef unsigned long uint64_t +#define PRINTF_INT64_MODIFIER "l" #endif #ifdef __cplusplus extern "C" { @@ -260,15 +263,8 @@ struct trafcount { struct ace *ace; unsigned number; ROTATION type; -#ifndef NOPSTDINT uint64_t traf64; uint64_t traflim64; -#else - unsigned long traf; - unsigned long trafgb; - unsigned long traflim; - unsigned long traflimgb; -#endif char * comment; int disabled; time_t cleared; @@ -385,13 +381,8 @@ struct clientparam { int res, status; -#ifndef NOPSTDINT uint64_t waitclient64, waitserver64; -#else - unsigned waitclient, - waitserver; -#endif int pwtype, threadid, weight, @@ -416,26 +407,15 @@ struct clientparam { clibufsize, srvbufsize, msec_start; -#ifndef NOPSTDINT uint64_t maxtrafin64, maxtrafout64; -#else - unsigned - maxtrafin, - maxtrafout; -#endif struct sockaddr_in sinc, sins, req; -#ifndef NOPSTDINT uint64_t statscli64, statssrv64; -#else - unsigned long statscli, - statssrv; -#endif unsigned long nreads, nwrites, diff --git a/src/webadmin.c b/src/webadmin.c index 516a04b..a4e6760 100644 --- a/src/webadmin.c +++ b/src/webadmin.c @@ -475,7 +475,6 @@ void * adminchild(struct clientparam* param) { ); } else { -#ifndef NOPSTDINT inbuf += sprintf(buf+inbuf, "%"PRINTF_INT64_MODIFIER"u" "MB%s" @@ -486,18 +485,6 @@ void * adminchild(struct clientparam* param) { cp->traf64, cp->cleared?ctime(&cp->cleared):"never" ); -#else - inbuf += sprintf(buf+inbuf, - "%.3f" - "MB%s" - "%.3f MB" - "%s", - (1024.0 * (float)cp->traflimgb) + (float)cp->traflim/1048576.0, - rotations[cp->type], - (1024.0 * (float)cp->trafgb) + (float)cp->traf/1048576.0, - cp->cleared?ctime(&cp->cleared):"never" - ); -#endif inbuf += sprintf(buf + inbuf, "%s" "%i" From 17835c4d6633fa9f4e4aa6e30b51950e038bf470 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Mon, 14 Apr 2014 23:58:11 +0400 Subject: [PATCH 008/122] resolving compilation issues --- src/3proxy.c | 7 ++++--- src/auth.c | 13 ------------- src/structures.h | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index af1bb44..5c88298 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -9,6 +9,7 @@ #include "proxy.h" #ifndef _WIN32 +#include #ifndef NOPLUGINS #include #endif @@ -644,7 +645,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.isudp = 0; childdef.service = S_PROXY; childdef.helpmessage = " -n - no NTLM support\n"; - if(!resolvfunc || (resolvfunc == myresolver && !dns_table->hashsize)){ + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, proxy may run very slow\n", linenum); } } @@ -675,7 +676,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.isudp = 0; childdef.service = S_SOCKS; childdef.helpmessage = " -n - no NTLM support\n"; - if(!resolvfunc || (resolvfunc == myresolver && !dns_table->hashsize)){ + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, socks may run very slow\n", linenum); } } @@ -718,7 +719,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.port = 53; childdef.isudp = 1; childdef.service = S_DNSPR; - if(!resolvfunc || (resolvfunc == myresolver && !dns_table->hashsize) || resolvfunc == fake_resolver){ + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize) || resolvfunc == fakeresolver){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, dnspr will not work as expected\n", linenum); } } diff --git a/src/auth.c b/src/auth.c index 93b24f5..9ccb124 100644 --- a/src/auth.c +++ b/src/auth.c @@ -865,19 +865,6 @@ struct auth authfuncs[] = { }; -struct hashentry { - unsigned char hash[sizeof(unsigned)*4]; - unsigned long value; - time_t expires; - struct hashentry *next; -}; - -struct hashtable { - unsigned hashsize; - struct hashentry ** hashtable; - struct hashentry * hashvalues; - struct hashentry * hashempty; -}; struct hashtable dns_table = {0, NULL, NULL, NULL}; diff --git a/src/structures.h b/src/structures.h index 40f6268..b0058d3 100644 --- a/src/structures.h +++ b/src/structures.h @@ -530,6 +530,22 @@ struct child { unsigned char **argv; }; +struct hashentry { + unsigned char hash[sizeof(unsigned)*4]; + unsigned long value; + time_t expires; + struct hashentry *next; +}; + +struct hashtable { + unsigned hashsize; + struct hashentry ** hashtable; + struct hashentry * hashvalues; + struct hashentry * hashempty; +}; + +extern struct hashtable dns_table; + struct sockfuncs { #ifdef _WIN32 SOCKET (WINAPI *_socket)(int domain, int type, int protocol); From 2eee9d2e9860a9af227dfd4949d05bf629f6b05b Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Tue, 15 Apr 2014 00:13:42 +0400 Subject: [PATCH 009/122] Changelogs --- Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changelog b/Changelog index 8ed688e..6bfcd9d 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,6 @@ +15.04.2014 +! adding warnings for most common misconfigurations + 10.04.2014 ! switching to 64-bit integers where possible. proxy should now support downloading for files > 4GB. From faf5b4b124e2eaa8c08e21315cff7fca3589f436 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Tue, 15 Apr 2014 02:41:39 +0400 Subject: [PATCH 010/122] Removing Changelog from git --- .gitignore | 1 + Changelog | 2223 ---------------------------------------------------- 2 files changed, 1 insertion(+), 2223 deletions(-) delete mode 100644 Changelog diff --git a/.gitignore b/.gitignore index 4bd7388..73f884f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ tmp/ *.swp *.o *.idb +Changelog src/version.h src/res version.c diff --git a/Changelog b/Changelog deleted file mode 100644 index 6bfcd9d..0000000 --- a/Changelog +++ /dev/null @@ -1,2223 +0,0 @@ -15.04.2014 -! adding warnings for most common misconfigurations - -10.04.2014 -! switching to 64-bit integers where possible. - proxy should now support downloading for files > 4GB. - - -08.04.2014 -Releasing as 0.7 -Significant changes since 0.6.1: -!! auth iponly by default -! maxconn is 500 by default -! Improved HTTP/1.1 compatibility -! Functionality bugfixes -+ Few new plugins - -11.07.2012 -! fixed: counters over 4GB in webadmin - -26.06.2012 -! OpenSSL thread support functions added to SSL plugin - -10.05.2012 -! SSL plugin works. Commands to enable/disable SSL spoofing will be added later. - -25.04.2012 -! pcre_rewrite slash sequence logic corrected - -16.04.2012 -+ Added: SSLPlugin for SSL decryption with certificates spoofing - -12.04.2012 -+ Added: new filter callback function type (pre data filter) for things like SSL/TLS, gzip, etc. - WARNING: all plugins with filter functions need to be reviewed for compatibility - -06.02.2012 -+ Added: transparent redirection plugin for linux. Automatically detects redirection - address if traffic is redirected via iptables - -15.08.2011 -! Fixed: 100% CPU because of usleep with large value on NetBSD - -11.06.2011 -+ Support for extusername/extpassword added to smtpp - -04.06.2011 -! Fixed: web admin access -! Fixed: wrong error code in logfile in some rare cases -! Migrated to VC 9.0 compiler - -14.04.2011 -! Authentication: do not request username/password in mixed authentication - if all modules deny access. - -12.04.2011 -! Minor code cleanup - -17.12.2010 -- Debugging output to stdout removed - -09.12.2010 -! Code cleanup for sockets mapping and chunked encoding, -! Content-Length up to 4GB - -25.11.2010 -+ System locale handling added for mixed case username in WindowAuthentication - -13.11.2010 -+ Plugin utf8tocp1251 added to automatically detect UTF-8 (used by Chrome and - Opera in username/password. - - usage - - plugin "utf8tocp1251" utf8tocp1251 - auth utf8tocp1251 strong - - or - - auth utf8tocp1251 cache windows - - -11.11.2010 -! encoding paramter added to WWW-Authenticate and Proxy-Authenticate headers in - .3ps files according to - http://tools.ietf.org/id/draft-reschke-basicauth-enc-01.txt - -12.08.2010 -! Removed getservbyport() from webadmin to avoid potential race condition - -09.08.2010 -! Default .3ps files corrected - -26.06.2010 -! Fixed: keep-alive connections detection for HTTP/1.1 - -10.12.2009 -! Fixed: external address may be incorrectly set if few requests are - received in single connection. - -02.12.2009 -! zero sockaddr before bind for some FreeBSD versions compatibity - -26.10.2009 -! Some changes for MD4/MD5 libraries 64-bit compatibility - -01.10.2009 -! Fixed: Content-Length is sent twice to server if there are content-handling - plugins. - -17.09.2009 -! Makefile.Linux: add3proxyuser.sh moved to INSTALL_CFG_OBJS - (thanks to Martin Wanicki) -+ Functionality added to intercept all socket-related calls for plugins - -03.09.2009 -! Fixed: client connection was not closed on removed Content-Length (may - cause connection hang for timeout at the end of large file transfer - if filtering plugins are used). - -24.08.2009 -+ Added transparent redirection to ICQ and MSN proxy -+ Added (untested) Last.fm ripper plugin - initial version, code needs to be - cleaned to work under *nix. Thanks to Denis Stanishevskiy. - -14.08.2009 -+ WinCE (Windows Mobile) support added - -27.07.2009 -! Fixed: use authnserver for name match check if configured - -22.07.2009 -+ authnserver command added (nserver to use only with auth dnsname) - -13.07.2009 -+ man pages for smtpp and icqpr added -! traffic correction plugin logics fixed - -10.07.2009 -+ 3proxy configuration parser: support added for empty strings (""). - -09.07.2009 -+ dnsname authentication added (auth dnsname) - puts validated reverse DNS - record (PTR) instead of username -+ PCREPlugin: Added: \r, \n support from pcre_rewrite rewrite string. Use \0 - for empty string -+ PCREPlugin: Added: * may be used instead of regex (no regex is created - and checked in this case) - -24.06.2009 -! random redirections are really fixed (incomplete fix on 08.04.2009) -! icqpr "Need recync" problem fixed -! disable NTLM by default (because of Windows Vista) until NTLMv2 implemented -! set auth iponly to be default - - -08.04.2009 -! Fixed: distribution between parent proxies was not even because of - non-linear probability - -18.03.2009 -! Marking as 0.7-devel - -06.03.2009 -! Fixed: filters were applied in reverse order - -25.02.2009 -! Fixed: beginning of HTTP data may be not passed to filter - -22.02.2009 -! handle Content-Length as unsigned long to allow files > 2GB. - -10.02.2009 -! Ldapauth plugin corrected according to changes on 02.02.2009 - -02.02.2009 -+ countout / nocountout commands added -! Added workaround for Mac OS X / iPhone OS poll() (mis)behaviour. - -30.01.2009 -! Flush buffer in case of POLLxxx - probably required for Mac OS X / iPhone OS - -24.01.2009 -! Changed WindowsAuthentication to convert username to lowercase - -10.12.2008 -! Fixed: login may hang in ftppr in case of large server banner - -30.10.2008 -! WindowsAuthentication plugin may sometimes fail with 100122 error - on startup because of uninitialized variable. - -30.09.2008 -! -lXXX moved to $LIBS in Makefiles for linkers compatibility -+ 3proxy for Dummies v.1.2 by Kurmaeff Halit added (in Russian) - -26.08.2008 -! Fixed: end of chunked-encoded page may be incorrectly detected - -24.07.2008 -! Fixed: buffering problem on multiple chunks - -21.07.2008 -! Previous fix was incomplete - -13.07.2008 - Thanks to Hostile Fork: -! Fixed directory listing building for some rare FTP servers (e.g. HP) -! Fixed (probably) chunked encoding should now work. REQUIRES TESTING. - please report, if you have problems with chunked. - - -11.05.2008 -+ minor plugin interface additions - -03.05.2008 -+ pcre_options implemented - -24.04.2008 -! Fixed: bandlimsout may not work if both bandlimsin and bandlimsout - are configured. - -01.04.2008 -! Fixed: chunked was actually converted to non-chunked - -25.03.2008 -+ HTTP chunked support (hopefully) added, not tested yet - -13.02.2008 -! Do not shutdown listening socket -! FTPPR was broken on 10.02 fix -! ':' may be encoded in ftp:// URI's in proxy - -12.02.2008 -! LOGIN and PLAIN authentication were swapped in smtpp. - -10.02.2008 -! FTPPR: potential race condition on socket close fixed - -07.02.2008 -! MSN: message channels were not captured - -05.02.2008 -! Use CDATA for XML data in webadmin module - -03.02.2008 -+ MSN / Live messenger proxy (msnpr) addded - -02.02.2008 -! Fixed: counters may be flushed on configureation reload - -01.02.2008 -! Work with counters with more safe way on configuration reload - -28.01.2008 -! Do not compile empty PCRE - -17.01.2008 -+ APPE support added to ftppr -! Fixed problem with counters dumping on reload - -16.01.2008 -+ reqip/reqport added to XML data export - -15.01.2008 -! cache auth: set default cache type to user/password with 600 sec timeout - -14.01.2008 -! Fixed EAGAIN handling in sockmap -! Fixed: plugins: some data may be sent to the filter functions more than once - on incomplete send. -! int * offset_p changed to int offset in plugins interface - -13.01.2008 -! icqpr: fixed new services request hijacking - -12.01.2008 -+ icqpr: added support for ICQ 6.0 greeting -+ icqpr: added support for insecure authentication -+ icqpr: added support for server migration - -11.01.2008 -+ Support for new service requests hijacking added to icqpr -! Fixed: icqpr: sequence number can be > 0x8000 in current protocol verion - -10.01.2008 -! Fixed few rare cases where small amount of data may pass in/out statistics - (e.g parent proxy request/response). - -09.01.2008 -+ Initial version of icqpr (ICQ proxy). Use it as portmapper to ICQ server: - You can also control access by UIN (use 'auth useronly'): - auth useronly - allow 1369139,1234567 - icqpr 5190 login.icq.com 5190 -! Corrected seconds fractions calculation in poll() emulation code - (probably did not affected any functionality) -! PCRE library updated to 7.4 - -07.01.2008 -!! Error code is now 5-digit - - -27.12.2007 -+ StringsPlugin now supports strings substitution for 'admin' service (Kirill Lopuchov) -+ PamAuth plugin added (Kirill Lopuchov) -+ LdapPlugin added (Kirill Lopuchov) - -19.12.2007 - Copyright text fixed in source files - -18.12.2007 -+ Export added for weadmin strings to use/replace in plugins - -17.12.2007 -+ Proxy-support: Session-Based-Authentication added for compatibility - with NTLM/Negotiate authentication in IE7. - -03.12.2007 -! StringPlugin fixed - -23.11.2007 -+ Developer's documentation added - -19.11.2007 -! StringPlugin fixes (by Kirill Lopuchov) - -09.11.2007 -! Fixed: SOCKS5 authentication was broken some time ago - -28.10.2007 -! Fixed: do flush() if logged to file given with -l - -25.10.2007 -! Improper extparam structure initialization fixed (caused invalid behavior -smtpp/pop3p/ftppr if no 'delimchar' configured after 11.10.2007) - -19.10.2007 -! StringsPlugin cleanup - -11.10.2007 -+ delimchar command added - -10.10.2007 -! Fixed: filters are lost on configuration reload -+ Added chkconfig support to rc.d script - -09.10.2007 -! Fixed double addition of authentication function on WindowsAuthentication - plugin - -25.09.2007 -! Outgoing AUTH LOGIN fixed for smtpp -! Fixed multiline banners in smtpp -+ smtpp: default server (-h) may be used without authentication - -11.09.2007 -! Documentation corrections, thanx to Vladimir Fesko - -30.08.2007 -! Fixed PCRE filter behaviour on configuration reload - -29.08.2007 -! Support added for in-line auth plain SMTP authentication. Default parent - authentication is changed to LOGIN. - -25.08.2007 -! Fixed -h feature (double memory free after second connect) -+ smtpp (SMTP proxy added). Supports both PLAIN and LOGIN for both client - and server, supports default SMTP server. - -23.08.2007 -+ %e format specificator added for exaternal IP logging. - -22.08.2007 -! dighost corrected to do not change file, if no replay from the server - received. - -20.08.2007 -+ authcache password added -! authcache user and user,ip corrected and crash fixed - -17.08.2007 -+ Documentation added for authentication cache - -16.08.2007 -+ Authentication cache created! New command: - authcache authtype time - e.g. - authcache ip 600 - and new authentication type: cache, e.g. - auth iponly cache strong - Doesn't work with NTLM, Requires proxy -n! - -07.08.2007 -! define _MAX__TIME64_T, because Microsoft only mentions it in configuration - and never actually defines it. Prevents crash on malformed/older counter - file. - -03.08.2007 -+ 'nolog' command added to extend allow/deny rules (prevent logging - for requests mathing allow/deny rules). nolog only affects last allow - or deny command. -+ 'weight' command added to extend allow/deny rules. E.g. 'weight 100'. - weight only affects last allow/deny rule. - -31.07.2007 -! Error code changed to 100 on failed SOCKSv5 name resolution -+ FAQ and documentation updates -+ New command 'logdump' added, to create intermediate log records then given - amount of data is archieved through connection -+ New command 'filtermaxsize' to prevent filtering if expected Content-Length - is greater than given value. - -21.07.2007 -! rm changed to del in Windows makefiles - -07.07.2007 -+ HTTP proxy code fixed to pre-buffer traffic and fix Content-Length in case of - short files. For longer files Content-Length is not sent to client. It's safe - now to change HTTP content within plugin. - Result: pcre_rewrite works perfectly. - -05.07.2007 -+ Documentation improved. - -28.06.2007 -+ FTP server authentication fixed - -26.06.2007 -+ Request authentication for FTP server in HTTP proxy if anonymous logon fails - -18.06.2007 -! Documentation fixes - -11.06.2007 -! Fixed: \r in *nix installation scripts - -31.05.2007 -! PCRE: Fixed: replace on the string of different size -! PCRE: Fixed: replace only replaces first match -? PCRE: known problem: in HTTP if size changes after replacement it doesn't - match Content-Length any more. Any workaround suggestions? Remove - Content-Length on HTTP requests? - -07.05.2007 -! PCRE plugin only used first rule - -21.04.2007 -! Avoid usage of large stack buffer in proxy -+ PCREPlugin is now somehow usefull - -20.04.2007 -! Minor code cleanup - -18.04.2007 -! Fixed: TraffCorrect plugin doesn't NULLify pointer after free() - -13.04.2007 -!! Potential buffer overflow fixed on transparent request handling - thanks to big_gad_(at)_mail.ru - -12.04.2007 -! missed authentication type check in Windows Authentication plugin -! fixed minor memory leak in tcppm - -11.04.2007 -! Compilation issue for structures.h introduced on 09.04 fixed - -09.04.2007 -! Minor code cleanup, documentation fixes, rus-win1251.3ps grammatics fixed. -! *nix plugins compilation issue fixed - -08.04.2007 -! Bug fixed on socket mapping (introduced 06.04) -! Some internal code review without functional changes -! "parent type IP 0" is now used to specify external IP - (like -eIP, but only for connections matching "allow") - -06.04.2007 -+ PCREPlugin added. Still in development, not all functionality is implemented. - -05.04.2007 -+ StringsPlugin by Kirill Lopuchov is imported - -21.03.07 -! Fixed: FTP listing is not shown on long FTP server greeting in HTTP proxy -! Fixed: FTP listing may noy be shown on specific server timing in HTTP proxy - -19.03.07 -! TraffCorrect plugin NULL pointer fixed - -16.03.07 -+ It's now possible to use hostnames and patterns in destination ACL. Hostname - is checked against requested hostname. Hostnames and networks may be mixed. - Example: - deny * * *sex*,*porn*,localhost,192.168.0.0/16 - '*' can not be uses in the middle of the hostname. www*com is invalid - pattern. -! BINDIR changed to BUILDDIR in Makefiles to avoid collision with install - on Linux. - -15.03.07 -! Documentation update - -13.03.07 -+ It's possible to use hostnames in ACL, but it should not be dynamic or - multihomed host because hotname is translated to IP immediately. - -01.03.07 -! fixed: unnecessary mutex_unlock on trafcounter mutex -! Cosmetic changes - -28.02.07 -+ FTP put support added for HTTP proxy -! Code cleanups (few warnings fixed) -! Makefile.Linux changed (by request of Jari Aalto) - -22.02.07 -! fixed: ftppr may delay on file uploading - -20.02.07 -+ Minor improvements in schedule-handling code - -14.02.07 -! Previous FTP (24.12.06) fix was ineffective (operation after break) - -01.02.07 -! Documentation typo with portnumber in fordummies.html fixed - -25.01.07 -! Typo fixed in gethostbyname_r - -23.01.07 -! Plugins are added to main code tree - -20.01.07 -! Use gethostbyname_r on Linux and Solaris - -18.01.07 -! Set reload flag on Web interface reload, but do not call reload() function. - to process reloads in uniform way. - -08.01.07 -! Rotate counters with '0' number -+ Scheduling interface added - -29.12.06 -! udppm code cleanup - -24.12.06 -! Point ident for openlog to saved copy of string to prevent garbage in syslog -! Fixed: FTP though parent proxy -! Fixed: problem fixed for final FTP server response received before data - (slow connection). - -22.12.06 -! socks4 parent redirection fixed -! Makefile.Solaris and Makefile.Solaris-gcc are corrected against -o problem - in Solaris. - -21.12.06 -+ FAQ additions - -19.12.06 -! Fixed: POST request problem with NTLM authentication -+ Access to reload / exit status and proxy stringtable from plugin API - -05.12.06 -! Fixed: imcomlete pages through HTTP proxy (Internet Explorer hangs) -! Minor changes in trafcount/bandlimit for better plugin compatibility - -30.12.06 -! Fixed: two 3xx replies on USER command in ftppr. - -27.11.06 -! Changed to SAFESQL because actually only Microsoft and Oracle - seems to follow ODBC standards. - -19.11.06 -+ SITE command support in addition to OPEN for ftppr - -18.11.06 -+ -I added to standalone services to be executed from inetd. - -14.11.06 -! Fixed behaviour on failed ODBC log attempt -+ Filtering HTTP request API now works - -10.11.06 -+ Try to fallback to stdlog if odbclog fails - -07.11.06 -+ Filtering API is partially implemented - -01.11.06 -+ -h option added to use as default hostname:port for ftppr/pop3pr. - -15.10.06 -! WindowsAuthentication.dll version updated to match current internal - structures and changes in plugins API. - -13.10.06 -! Exit service on non-recoverable service error - -11.10.06 -! Fixed: hostname:xx causes name resolution problem (introduced on 09.10). -! Fixed: wrong target ports for tcppm/udppm (introduced on 09.10). - -09.10.06 -! %Q and %q added to track requested IP/port. Hopefully also problems with - ACL checks on redirected applications are finally fixed. - -06.10.06 -! WindowsAuthentication.dll replaced with static version in distro - -04.10.06 -! Some compilation warnings cleaned -! Back to static linking -! Errors introduced with filters corrected - -03.10.06 -! Add .manifest files to distribution - -28.09.06 -! Compile 3proxy with msvcr80.dll -+ include msvcr80.dll into distribution - -27.09.06 -+ FAQ updated. -+ Filtering functionality added (incomplete yet). -! SOCKS BIND/UDPASSOC problems fixed (based on Artem Rebrov's patch) - -25.09.06 -! Traffic report name is now generated based on 'last traffic in report' - date/time and is not overwritten on service startup. Today traffic report - will only be seen tomorrow, but counters may be checked with 'countersutil' - or web interface. - -13.09.06 -+ Examples of compatible log formats added to 3proxy.cfg.sample - -11.09.06 -! Name hash length changed from 64 to 128 bits. - -06.09.06 -! Documentation regarding to Unix compilation corrected - - -05.09.06 -! Fixed: buffered input may double some data on empty reads -+ FTP diagnostics improved for FTP login problems -+ Add ".." to directory listing - -25.08.06 -! Fixed: endless loop on configuration parsing if ACL weekdays are given as - a comma delimited list (reported Andrey S. Alexeenko). - -23.08.06 -! Fixed: compilation under Solaris -+ Solaris/gcc Makefile added - -17.08.06 -! Fixed: NTLM authentication doesn't work for NT-encoded passwords -! Fixed: offer NTLM authentication before basic - -15.08.06 -! Reset client address after hostname parsing -! Warn on counterfile time_t incompatibility - -10.08.06 -! Fixed: \r's in few Makefiles - -09.08.06 -! Documentation corrections. - -04.08.06 -! Documentation corrections. - -28.07.06 -! Fixed: invalid traffic prediction for large downloads on traffic limits over - 4GB. - -26.07.06 -! nbname auth rejects, if no NetBIOS name determined. Use - auth nbname,iponly - to emulate old behaviour -! It's now possible to use "-" in ACLs to match empty username. -! No need to specify L/G for filename template in "log" (local time is - always used). - -25.07.06 -+ "log" command now supports same format specifications for filename template - as "logformat" (if filename contains '%' sign it's believed to be template). - As with "logformat" filename must begin with "L" or "G". - -08.07.06 -! nreads/nwrites/nconnects fields added to internal client paramters structure - for plugin developments - -07.07.06 -! FTP_DATA operation added for FTP data connection ACLs. - -04.07.06 -! Scripts/Makefiles corrections - -03.07.06 -! Fixed: dnspr 822 error on Windows (seems like a bug with multithreading on - latest Visual C compiler, ioctlsocket() resets parameters of setsockopt(). -! Fixed: wrong limit and traffic on counters on the web - -30.06.06 -! Fixed: wrong traffic displayed on web for traffic > 4GB - -28.06.06 -! Fixed path to binary in scripts/rc.d/proxy.sh - -27.06.06 -! Fixed: limitations for traffic over 1GB work incorrectly -+ Start/stop script example added to distribution - -22.06.06 -+ -u parameter added to services to avoid username authentication request/usage - -16.06.06 -+ Windows authentication plugin added to binary Windows distribution - -14.06.06 -! Added workaround for broken HTTP client (e.g. SUM - SUN update manager) with - incomplete URI in HTTP request. - -11.06.06 -! bind FTP data connection socket to external interface -+ FTPPR fully supports parent proxy (SOCKS 4/5, HTTPS/CONNECT) -+ FTPPR supports FTP_GET/FTP_PUT/FTP_LIST ACL actions limitations - -09.06.06 -+ 'auth' can be used with few authentication types now. It makes it possible - to request password only on demand with - auth ipony strong - -08.06.06 -! 'admin' redirect type added for redirection to local web administration - service (works like admin -s). - -31.05.06 -! Log '-' instead of username if username exists but is empty - -29.05.06 -!!!! Warning: counters file format changed on Windows since 0.5.2 - because of different sizeof(time_t) on Visual C++ 2005 compiler. -+ countersutil utility added to manage counters. To convert 3proxy.exe - 0.5.2 counter file to 3proxy.exe current run - countersutil oldexport counterfile tmpfile - countersutil import counterfile tmpfile - - -25.05.2006 -! Fixed: dnspr command lost from command list - -17.05.2006 -! Fixed: nobandlimin actually works like nobandlimout - -16.05.2006 -!! Fixed: crash if more than one "users" command in configuration -! Fixed: timezone display for FreeBSD and Windows -+ added %o format specification for 3-character mOnth abbriviation -! Fixed: check EINTR on poll() (avoids "Interrupted system call" in logs - and broken connection on USR1 signal. - -12.05.2006 -! Fixed: log rotation was broken after client code rewrite - -11.05.2006 -! Cleaned: "mypoll" error if compiled with GCC withoout WITH_POLL - -10.05.2006 -! Use SO_REUSEPORT if defined - -06.05.06 -! Minor HTTP proxy redirections code cleanup - -03.05.06 -+ socks error codes improved - -02.05.2006 -! Fixed: compilation for Unix (plugins) - -01.05.2006 -! Fixed: names for authentication types turned back for compatibility -! Fixed: no warning given for unknown authentication type -! Fixed: bandlimout doesn't work if bandlimin presents for same connection - -30.04.2006 -! Fixed: nobandlimin/nobandlimout commands missed -++ plugin command added to load dynamic library - -25.04.06 -! Internal structures moved to diffent header file - -20.04.06 -! Fixed: few problems with logging after latest modification (out of memory - reference on hostname). - SQL injections now are filtered even if \' is not in filtered characters. - -17.04.06 -! Few bugs introduced on 13.04 (especially 'nocountin' crash) fixed -! Significant changes to internal structures -! Compilation problems under Linux/Unix fixed - -13.04.2006 -! 3proxy.c configuration reading major code rewrite -! Fixed: memory leaks on configuration reload -! Changed from CreateThread to _beginthreadex according to MS reccomendations -! Changed: FTP start data transfer code from 101 to 125 in FTPPR -+ NLST support added to ftppr - -05.04.2006 -+ Minor documentation and help screen updates - -30.03.2006 -!! Windows distribution compiler changed to MSVC 8.0 -++ bin64 (Windows XP/2003 64 bit edition x64) added - -29.03.2006 -! Socket leak fixed on FTP data connection failure under Windows -! minor 64 bit compatibility code cleanup -+ x64/amd64 Windows XP/2003 64 bit edition makefile added - -24.03.2006 -! Minor FAQ dummy compatibility updates - -18.03.2006 -+ Parameters descriptions and XML stylesheet added to webadmin services view -! Potential problem (wrong type dereference) fixed in webadmin services - -12.03.2006 -! Restore sasize after receivefrom - -10.03.2006 -! Fixed: CONNECT with http parent -+ bandlimout / nobandlimout implemented -! Copyrights and banners fixed - -08.03.2006 -! Minor poll() code cleanup - -06.03.2006 -! Socks 4a name resolution fixed -! Name resolution function was not cleared after configuration reload - -03.03.06 -! Print comments in traffic report - -26.02.06 -! Check POLLERR / POLLHUP for revents - -21.02.06 -+ "monitor" command added to reload 3proxy if monitored file changes - -13.02.06 -! Some files are renamed for autotools compatibility - -07.02.06 -! Fixed: insufficient timeout on buffers flushing, leads to loss - of data if connection to client is worse than connection to server. - -06.02.06 -+ -b (bufsize) parameter added to every service -! flushing improved to prevent data loss at the end of output - -03.02.06 -! Documentation corrected - -10.01.06 -+ Documentation updated -! Buffered UDP data loss on exit is fixed for sockmap - -30.12.05 -! Minor interface fixes - -27.12.05 -+ English FAQ added - -20.12.05 -! Fixed: crash on counters in webadmin if "NONE" counter rotation type - is used. - -09.12.05 -! Use bind port from BIND request for SOCKSv5 server - -30.11.05 -! Do not buffer UDP packets - -30.11.05 -! Do not drop connection on unknown command - -29.11.05 -! Do not drop connection on POP3 CAPA. - -28.11.05 -! Fixed: recv() may be called with small buffer on UDPPM - -23.11.05 -! Fixed: programming bug in $ file inclusing -! Fixed: webadmin conter type uses stack for return value - -17.11.05 -+ Makefile.Solaris added, thanks to 'pqr'. -! Cleaned pointer conversion warnings - -15.11.05 -! define PTHREAD_STACK_MIN if not defined to compile under Solaris -! S_NONE renamed to S_NOSERVICE to compile under Solaris - -14.11.05 -! Linger period is set to STRING_L (60 sec default) - -10.10.05 -! Add some grace period to shutdown services before exit - -03.10.05 -! Linger added to FTP socket to avoid data loss on socket close - -29.09.05 -+ Added H (hour) and C (minute) routation support to countin - -22.08.05 -! Fixed: UDP resolver (nserver) fails to resolve name if reply contains - no additional records (for example dnscache from djbdns). - -06.08.05 -!!Workaround added for Windows XP SP2 / Windows 2003 SP1 problem with - 2 selects on single datagram socket. udppm -s and dnspr hang on random - time while sending packets to client, sometimes causing client timeouts. - - -05.08.05 -! Fixed problem with UDP mappings -! Workaround for strange Windows XP bug with sendto() delay for 2 secs - if no select() was performed on socket - -30.07.05 -! Error handling on SOCKSv5 parent improved - -28.07.05 -+ Support for parent SOCKS4b/SOCKS5b (broken implementation with shortened - server reply) added. I never saw such server by they say there are. - socks4b, socks5b options for parent proxy. - -22.07.05 -+ Name resolution for parent CONNECT, SOCKSv5 and SOCKSv4a proxy server - added, should work with "fakeresolve" option (connect+, socks4+ - socks5+ options for parent proxy). - -13.07.05 -! Fixed: reading behind allocated memory in myrand() entropy - gathering function (leads to occasional craches) intrdoduced - on June, 20. - -12.07.05 -! Use client port only for portmappers -! Code reviewed for possible double close() - -10.07.05 -! Improved quote handling in config files. No any string can be quoted - (for example Thi"s is a test" is same as "This is a test", fixed a - problem with using quotes with $ macro. - -01.07.05 -+ Added RSA copyright text to 'mycrypt' to allow binary redistribution - for this tool only. - -22.06.05 -+ try to use same (unprivileged) port as client for outgoing connections - for portmappers -! admin -s now only shows counters related to user -! Fixed: impossible to set traffic limit to even number of GB - -20.06.05 -! -a option corrected again (had inverted action) -+ -a1 option added to report random information about client IP -+ -s option added to 'admin' to allow safe-only commands (user mode) - -26.05.2005 -! -a option corrected - -25.05.2005 -+ 'Y' (annually) option added to counters, logfile rotations, etc -+ -a (anonymous) option added to proxy server - -21.05.2005 -! socks: only allow UDP mapping from same IP with control connection -! socks: always log network parameters for control connection -! check timeout to be below 2000000 - -20.05.2005 -! invalid sendto() argument fixed (may affect UDP mapping and sometimes - TCP under very rare configurations) -! set sasize before sendto -! socks checks requested address to be non-zero -! socks checks requested port to be non-zero -! socks: do not change UDP client parameters before UDP packet received - -19.05.2005 -+ 'include' command added to 3proxy (include one config file from another - config file) -! handle EAGAIN on send()/recv() - -18.05.2005 -! More detailed problem code in mapping code - -17.05.2005 -! Fixed typo with dnspr logging - -16.05.2005 -+ dnspr can now resolve records different from hostname (request is proxied to - first DNS server in the list, reply is not cached). - -14.05.2005 -! Fixed: mishandled socket error in dnspr code - -13.05.2005 -! Few minor fixes in HTTP proxy code (timeout in initial handshake lefts - some garbage in request buffer). -! Fixed short timeout in FTP proxy code -! Mapping code is changed to leave unsent data on buffer - -06.05.2005 -! Prevent race conditions with 100% CPU usage in socksmap (introduced 30.04) - -03.05.2005 -! Fixed: double free() in authentication (probably introduced on 04.04) -! Changed to POLLIN/POLLOUT/POLLPRI for more compatibility - -30.04.2005 -! Fixed: double free() in FTP over HTTP (probably introduced on 04.04) -! Fixed: in very rare situation may loose some data at the and of connection - -27.04.2005 -! stack size increased (reported problems under some OSs) -! Fixed: -l option for service executable leads to NULL-pointer reference -!!! Moved from select() to poll() on *nix. Please upgrade your Makefiles. - -25.04.2005 -! set thread stack size explicitly to prevent problems with some Linux 2.6 - kernels. - -22.04.2005 -! Never fallback to gethostbyname() if nameservers are configured to prevent - locking on *nix platforms -!!Fixed: name resolution is called while mutex is locked in HTTP proxy - leading to long lasting blocking. - -21.04.2005 -! Fixed: dnspr returns A record of invalid class (fails with some resolvers) -!! Socket I/O is now non-blocking - -19.04.2005 -! bandlimits changed to avoid floating point operations - -11.04.2005 -+ Log if new connections delayed because of too many accepted connections - -04.04.2005 -! Fixed few minor rare memory leaks - -03.04.2005 -! Fixed: HTTP proxy should ignore Content-Length for 304 response - -14.03.2005 -! MD5 password hashin within mycrypt utility fixed -! dnspr logging now shows DNS server IP instead of resolved IP, resolver IP - is shown in additional info - -11.02.2005 -! Configuration reload removed from signal handler - -31.01.2005 -! Limit for maximum log string size increased to ~4K -! large FD_SETSIZE and FD_SETSIZE check is not required under Windows - -28.01.2005 -! Fixed: -s options for udppm - -17.01.2005 -! Fixed: invalid IP may appear in logs and bandlimits on redirection - -13.01.2005 -+ fakeresolve option added - -21.12.2004 -! Fixed: traffic limits are set improperly for traffic over 1Gb - -11.12.2004 -! 0.6 development started - -11.12.2004 -Commited as 0.5b -11/12/2004 3[APA3A]tiny proxy 0.5b -New features marked with !. - - Features: - 1. General - + HTTP/1.1 Proxy with keep-alive client and server support, - transparent proxy support. - + FTP over HTTP support. - + DNS caching with built-in resolver - + HTTPS (CONNECT) proxy - + SOCKSv4/4.5 Proxy - + SOCKSv5 Proxy - ! UDP and bind support for SOCKSv5 (fully compatible with - SocksCAP/FreeCAP for UDP) - + Transparent SOCKS->HTTP redirection - ! Transparent SOCKS->FTP redirection - ! Transparent SOCKS->POP3 redirection - + POP3 Proxy - ! FTP proxy - ! DNS proxy - + TCP port mapper - + UDP port mapper - + Threaded application (no child process). - ! Web administration and statistics - 2. Proxy chaining - + Parent proxy support for any type of incoming connection - + Username/password authentication for parent proxy(s). - + HTTPS/SOCKS4/SOCKS5 and redirection parent support - + Random parent selection - + Chain building (multihop proxing) - 3. Logging - + turnable log format compatible with any log parser - + stdout logging - + file logging - + syslog logging (Unix) - + ODBC logging (Windows and Unix) - + log file rotation (hourly, daily, weekly, monthly) - + automatic log file comperssion with external archiver (for files) - + automatic removal of older log files - ! Character filtering for log files - ! different log files for different servces are supported - 4. Access control - + ACL-driven (user/source/destination/protocol/weekday/daytime or - combined) bandwith limitation - + ACL-driven (user/source/destination/protocol/weekday/daytime or - combined) traffic limitation per day, week or month - + User authorization by NetBIOS messanger name - + Access control by username, source IP, destination IP, destination - port and destination action (POST, PUT, GET, etc), weekday and daytime. - + Access control by username/password for SOCKSv5 and HTTP/HTTPS/FTP - + Cleartext or encrypted (crypt/MD5 or NT) passwords. - + Connection redirection - + Access control by requested action (CONNECT/BIND, - HTTP GET/POST/PUT/HEAD/OTHER). - ! NTLM authentication for HTTP proxy access - ! All access controle entries now support weekday and daytime - limitations. - 5. Configuration - + support for configuration files - + support for includes in configuration files - + interface binding - + running as daemon process - + utility for automated networks list building - Unix - + support for chroot - + support for setgid - + support for setuid - ! support for signals - Windows NT/2K/XP/2K3 - + support --install as service - + support --remove as service - + support for service START, STOP, PAUSE and CONTINUE commands (on - PAUSE no new connection accepted, but active connections still in - progress, on CONTINUE configuration is reloaded) - Windows 95/98/ME - ! support --install as service - ! support --remove as service - 6. Compilation - + MSVC (msvcrt.dll) - + Intel Windows Compiler (msvcrt.dll) - + Windows/gcc (msvcrt.dll) - + Cygwin/gcc (cygwin.dll) - + Unix/gcc - + Unix/ccc - - Known bugs: - - report to 3proxy@security.nnov.ru - - Planned for future (0.6) release: - - External modules API - - Addon URL, antiviral, HTTP cache filters modules, authentication - modules for different protocols (RADIUS, PAM, integrated system, etc). - -$Id: Changelog,v 1.154 2006/03/08 18:44:00 vlad Exp $ - -11.12.2004 -+ man page for 3proxy.cfg added - -09.12.2004 -! restarting SQL on reloading configuration - -08.12.2004 -! Typo fixed in sockmap preventing portmappers from functioning - -06.12.2004 -+ Network input is now buffered, decreasing CPU usage -- Debugging printf() removed from ftppr - -30.11.2004 -!! Fixed: memory content may be leaked on FTP error in HTTP proxy -! Few race conditions with double socket closing fixed in FTP proxy -+ Content-Length is checked to do not allow traffic overdraft via HTTP proxy -+ Connection now can be aborted due to traffic limit (code 90) - -24.11.2004 -! 333 error removed - no longer required - -23.11.2004 -! Deadlock in checkACL() (introduced 18.11) fixed - -20.11.2004 -! All mutex operation are now atomic to prvent deadlocks -! Race conditions with bamdlimits on reload fixed - -18.11.2004 -! Mutex logic overwritten, should clear reload races completely -! Fixed socket leak on some failed FTP operations -! FD_SETSIZE increased, check for FD_SETSIZE added - -04.11.2004 -! Fixed: Maxconn limitation doesn't work, may lead to resource exhaustion - attacks -! Fixed: reference to unallocated memory if fails to create new thread - (may lead to crash together with previous bug). - -03.11.2004 -! Fixed: Wrong type for "ace.users" in datatypes.c -! Partially fixed: race conditions on reload in alwaysauth() - -02.11.2004 -! race condition in sql_init on reload fixed -! minor code cleanup -! typo with SQL deadlock introduced on last fix fixed -! checked few memory allocation calls missed with debug library (myalloc) - -30.10.2004 -! Fixed: minor memory leak on SQL error - -28.10.2004 -+ HTTP parent redirection for FTP requests - -23.10.2004 -! Fixed: access to free()'d memory in ODBC functions after few - configuration reloads -! Configuration reload is more (but not yet completely) thread safe - now. - -17.10.2004 -! Fixed: Content-Type: missed in web interface - -16.10.2004 -! Fixed: log may show invalid IP/port for parent proxy connection - -12.10.2004 -- Debug printing to stdout in webadmin removed - -11.10.2004 -! Race conditions fixed, could cause 3proxy to crash on configuration reload - -28.09.2004 -! Limitation for maximum string length in config file removed (for included files) - -26.09.2004 -! Typo corrected preventing compilation under *nix - -18.09.2004 -! URL decoding corrected (affect HTTP over FTP clients) -+ "writable" command added to allow config modification via Web interface -+ Config file can be edited via web interface - -14.09.2004 -! Crash on HTTP redirections introduced on 08.09 fixed. - -11.09.2004 -+ Weekday based access control is now possible -+ Time based access control added -! Speed improved in ACL checks - -08.09.2004 -+ * can be used as external username with a meaning of username should be - requested from user. -+ %n1-n2T is now available in logformat to log only few field of service - specific text -+ -t (silent start) option added - -20.08.2004 -! Yesterday fix was broken, corrected. - -19.08.2004 -! Fixed: target address is logged instead of proxy address in a case - of redirection - -09.08.2004 -! Fixed: under *nix if service fails to bind() port for few hours it falls - into endless loop with logging and high CPU usage. - -03.08.2004 -! Fixed: select() changes tv value on some Linux kernels (100% CPU usage) - -02.08.2004 -! Fixed: wrong initialization for counter descriptor (causes some stdout - noise). -! Fixed: no HTTP proxy diagnostic message if host name doesn't resolve -! Fixed: NULL pointer crash if no format specified - -30.07.2004 -! Few bugs with counters and bandlimits introduced yesterday fixed - -29.07.2004 -! Fixed few memory leaks on restart -! Some code cleanup for configuration information storing -+ Statistics extended -+ Added "Zombie" threads support (service thread waiting for child shutdown - to exit). -+ Every service can now have different log format and character filtering -+ It's now possible to set logformat for service from command line - -28.07.2004 -! Fixed: ACLs are not cleared on reload -! Fixed: bind() warnings on reload under *nix -!! Fixed potential race conditions DoS on some Unix systems with thread - exit on aborted connection (accept(): Software caused connection abort) - -24.07.2004 -+ Web interface shows information about all currently running services and - clients (plain format just for debugging, will be rewrtitten later) - -23.07.2004 -! Fixed: wrong external ip/port in logs sometimes on internal redirection -+ HowTo and FAQ (Russian) added to documentation, documentation corrected - -22.07.2004 -+ Added logging options for request duration and average send/recieve - speed per request - -20.07.2004 -! Changed default password for anonymous FTP -! Improved diagnostic messages for FTP over HTTP errors - -19.07.2004 -! Changed FTP behaviour for some RFC ignorant sites - -17.07.2004 -+ services and clients are now registered for future extensions -! counters show wrong result problem introduced yesterday fixed -! fixed descriptor leak on configuration reload -! fixed theoretical problem with client number limitations -! few theoretical mutex leaks fixed - -16.07.2004 -+ 3proxy can now read configuration from stdin under *nix, - 3proxy.cfg can be executable -+ 'config' command added to allow 3proxy reload configuration in chroot'ed - environment or if configured from stdin. -+ 'end' command added -+ Man pages in HTML added - -14.07.2004 -! Minor casting issues, Unix compilation issues fixed -+ counters sample added - -13.07.2004 -+ Configuration improved and repacked - -08.07.2004 -! Problem introduced yesteday (after rotation logs do not print to - logfile) fixed. - -07.07.2004 -! Fixed FTP behaviour on RFC ignoring FTP sites (ftp.drweb.ru). -! Config file example updated with FTP proxy service configuration -+ Logging changed to allow personal log files for every service (without - rotation) and to work on older FreeBSD systems. - -05.07.2004 -! Fixed call to free'ed memory (could cause crash on reloading 3proxy - configuration in 0.5b-devel after 28.06.2004) - -30.06.2004 -! Fixed redirection crash if parent username/password is not specified -! Fixed documentation buf (%h instead of %n for hostname in logformat) - -28.06.2004 -! Minor changes in error messages generation - -25.06.2004 -! distributive repacked, some Russian documentation by Kirill Lopuchov - added - -24.06.2004 -! realm sometimes is not shown in proxy-authentication - -23.06.2004 -! fixed maxconn parameter was not set to default value on proxy reload. -! fixed typo in pop3p causing it to fail - -22.06.2004 -! ftppr.c typo corrected, preventing compilation under unix. - -19.06.2004 -+ FTP proxy (compatible with both USER and OPEN mode). Redirection to - FTP proxy from SOCKS - -18.06.2004 -+ Local redirection to POP3 proxy is now awailable. -! Fixed race conditions with double socket closing in POP3 proxy - -17.06.2004 -!! Threading problem causing minor memory leak and preventing 3proxy - from functioning under few OS versions (including Linux) after - some number of requests fixed. - -16.06.2004 -! Authentication problem introduced on 05.06 fixed - -15.06.2004 -! FTP over HTTP proxy supports spaces, quotes and 0x255 in filenames. -!! Potential security risk fixed: FTP password may appear in log if - URL ftp://user:password@server is used. - -09.06.2004 -! NTLM is enabled by default. Use proxy -n to disable NTLM for proxy service - (for example, if crypt passwords are used). - -05.06.2004 -!! Potential security leak fixed: POP3 proxy password can appear in log if - proxy username is configured as proxyuser:proxypassword:pop3user@pop3server - in POP3 client program -! Child invocation code rewritten to avoid code dupclication. - -27.05.2004 -! Reloading is now fast (new thread starts before old one dies) -! Milliseconds are printed as .3 (not .4) in logs - -22.05.2004 -+ Reload command added to Web interface and SIGUSR1 handling -! Problem fixed: no mode is given to open() with O_CREAT for counter files, - counter file can be created as read only under Windows or with invalid mask - under Unix. -! Do not fail if bind() fails -! Setsockopt for integer options corrected -! REUSEADDR added to avoid "Address already in use" problem if restarted - under Unix - -18.05.2004 -+ Installation/removal as a service under Windows 95/98/ME now supported. - -17.05.2004 -! Fixed: 3proxy hangs on socket error during config reading - -14.05.2004 -! For HTTP proxy NTLM authentication both ntlm and basic are now advertized - to client for compatibility -! Optimization parameters are changed and stack protection is turned on for - MSVC (Windows default) compilation. -! Fixed: exiting thread shows last client IP in log - - -27.04.2004 -! Fixed: Microsoft domain authentication to web server may fail via - transparent HTTP proxy with some IE versions. -! HTTP HEAD now recognized - -23.04.2004 -! Fixed compilation issues under Unix - -22.04.2004 -+ Configuration now can be dynamically reloaded with - net pause 3proxy / net continue 3proxy or by sending SIGPAUSE twice - without breaking connections -! 3proxy is now distributed compiled with Microsoft Visual C++, thanx - to MS for releasing "Microsoft Visual C++ Toolkit 2003" for free. -! Few bugs introduced in latest versions (username/password for parent proxy, - dnspr and single packet UDP are fixed) - -13.04.2004 -+ NTLM authentication for proxy server (yes, it works under *nix). It will - not work with crypt password, only CL or NT. Use proxy -n to allow NTLM. -! potential DoS (NULL pointer) condition fixed in configuration with crypted - passwords - -08.04.2004 -+ %n (hostname) added to logformat - -05.04.04 -! compilation problem under Unix fixed - -01.04.04 -! problem with portmappers fixed (introduced on last modification) - -20.03.04 -+ FTP messages are shown now -! FTP problem with links with absolute paths fixed -! No more authentication requested for user if ACL denies access to resource - in HTTP proxy. -! ACLs are now stored in predefined container. It's required for future - improvement (Cisco-like ACL configuration and configuration reload without - restarting proxy). As a backside, number of ACLs is now limited to 256. -! Function for configuration reading implemented for future improvements. - -12.03.2004 -! error text generation changed for pthread_create (use return code - instead of errno). Memory leak on failed pthread_create fixed. - -02.03.2004 -! Transparent proxy fixed to work with ports different from 80. -! Workarond for Internet Explorer invalid Host: header bug - -28.02.2004 -+ -+ options added to logformat for character filtering -! ' character now filtered only if logged via ODBC -! few bugs fixed in ODBC logging reliability code. Now 3proxy should better - handle broken database connections. - -26.02.2004 -! user32 added to library list for MSVC - -24.02.2004 -! Ask installation confirmation before installation - -23.02.2004 -! ttl now is real for DNS proxy proxy reply - -21.02.2004 -+ dnspr - DNS caching proxy added to 3proxy module. Listens on UDP/53 - and answers hostname requests. Requires nserver/nscache to be configured. -! 3proxy wanrs user if installed as Windows service -! 3proxy child threads are now started faster - -22.01.2004 -! mutex deadlock fixed if gethostbyname() is used under Unix - -19.01.2004 -! compilation issue fixed for MSVC (definition inside code) - -15.01.2004 -! bug fixed in configuration reading getip() called befor WSAStartup - (thanks to Kerd) -! bug fixed with parent CONNECT proxy (thanks to Kerd) - -11.01.2003 -+ Few man pages added - -06.01.2003 -+ now it's possible to use "" inside quotation for double quote sign (for - example "say ""hello world""" - -04.01.2004 -+ maxconn configuration option added - -19.12.2003 -+ New "safe" memory allocation library implemented. It may slow down - performance but is thread safe and never cause memory fragmentation. -! Memory leak in redirection SOCKS->HTTP fixed - -11.12.2003 -! Memory leak in UDPPM fixed - -29.11.2003 -+ Copyrights added to banners -!! Few signed/unsigned mismatches fixed (including potentially dangerous) - -27.11.2003 -! 'redirect' now can be used with hostname instead of ip address - -21.11.2003 -! POP3 proxy bug fixed - -04.11.2003 -! '@' situation in username for POP3 proxy corrected - (pop3name@pop3realm@pop3server) - -03.11.2003 -! One more bug with 'archiver' causing 3proxy to crash on log archieving - fixed - -29.10.2003 -! Some threading safety is added for logging (inet_ntoa and ODBC - re-initialisation) - -28.10.2003 -! Bug causing daily log filename to work as weekly fixed -! 'daemon' example moved to beginning of configuration file - -16.10.2003 -+ pidfile configuration option added -+ processing for SIGCONT (pause/resume) and SIGTERM (termination) added - under Unix - -01.10.2003 -! Weekly log filename now is generated by the date of last Sunday. -! Do not strip executable for Unix (must be stripped during installation). - -21.09.2003 -! Bug fixed in "log" command processing (wrong buffer was used - for filename generation) - -16.09.2003 -! socksmapping algorythm changed to handle incomlete send() (for *BSD). - -15.09.2003 -! mutex added to gethostbyname() to avoid thread unsafety. It slows - down proxy if no nserver configured (it MUST be for *nix!) but prevents - crashing on active usage. -! signal() handling is added for SIGPIPE. It seems to be some race conditions - on FreeBSD between send() and gethostbyname() somewhere causing SIGPIPE on - gethostbyname(). - -13.09.2003 -! NULL reference corrected if rotate is given without archiver - -11.09.2003 -! Few additional checks added for open()/fopen() to do not crash on invalid - files in config -! Buffer moved from stack to heap in socks.c to eliminate crash on FreeBSD - -10.09.2003 -! Bug in SOCKSv5 UDP mapping corrected. Now it works fine (checked with - Unreal Tournament) with both SocksCAP and FreeCAP. - -06.08.2003 -! Algorithm for SOCKS5 bind/udp assoc port selection is now intellegent - enough to allow server applications to use same port number on socks - server if available and not denied by access list -! SOCKS5 bind/udp assoc now matches incoming connections/packet - with IP address from request in accordance to RFC 1928 to improve - security - -04.08.2003 -!!! Bug fixed sometimes causing 3proxy to crash if parent proxy is used -!!! UDP associate finaly completed and is fully functional - (tested with SocksCAP on Unreal Tournament). -!!! TCP bind code re-checked, and is probably working (doesn't work - on SocksCAP because of SocksCAP bug -!!! Socket leak on nbname auth fixed - -21.07.03 -+ Web administration module created -+ Dynamic enable/disable for counters now available via web interface - -19/07/2003 3[APA3A]tiny proxy 0.4 -New features marked with !. - - Features: - 1. General - + HTTP/1.1 Proxy with keep-alive client and server support, - transparent proxy support. - ! FTP over HTTP support. - ! DNS caching - + HTTPS (CONNECT) proxy - + SOCKSv4 Proxy - + SOCKSv5 Proxy (TCP only) - + Transparent SOCKS->HTTP redirection - + POP3 Proxy - + TCP port mapper - + UDP port mapper - + Threaded application (no child process). - 2. Proxy chaining - + Parent proxy support for any type of incoming connection - + Username/password authentication for parent proxy(s). - + HTTPS/SOCKS4/SOCKS5 and redirection parent support - + Random parent selecttion - + Chain building (multihop proxing) - 3. Logging - + turnable log format - + stdout logging - + file logging - + syslog logging (Unix) - + ODBC logging (Windows and Unix) - + log file rotation (hourly, daily, weekly, monthly) - + automatic log file comperssion with external archiver (for files) - + automatic removal of older log files - 4. Access control - ! ACL-driven (user/source/destination/protocol or combined) bandwith - limitation - ! ACL-driven (user/source/destination/protocol or combined) traffic - limitation per day, week or month - + User authorization by NetBIOS messanger name - + Access control by username, source IP, destination IP, destination - port and destination action (POST, PUT, GET, etc). - + Access control by username/password for SOCKSv5 and HTTP/HTTPS/FTP - + Cleartext or encrypted (crypt/MD5 or NT) passwords. - + Connection redirection - + Access control by requested action (CONNECT/BIND, - HTTP GET/POST/PUT/HEAD/OTHER). - 5. Configuration - + support for configuration files - + support for includes in configuration files - + interface binding - + running as daemon process - + utility for automated networks list building - Unix - + support for chroot - + support for setgid - + support for setuid - NT - + support --install as service - + support --remove as service - + support for service START, STOP, PAUSE and CONTINUE commands (on - PAUSE no new connection accepted, but active connections still in - progress) - 6. Compilation - + MSVC (msvcrt.dll) - + Intel Windows Compiler (msvcrt.dll) - + Windows/gcc (msvcrt.dll) - + Cygwin/gcc (cygwin.dll) - + Unix/gcc - + Unix/ccc - - Known bugs: - - - udppm doesn't work if compiled with cygwin. - - Cygwin doesn't support recvfrom()/sendto() on connected socket, so - recv/send is used instead... Not a big deal anyway. - - - Planned for future release: - - Web interface for configuration - - Signal handling on Unix (for stop/pause/resume/configuration change) - - External filter API - - Addon URL, antiviral, HTTP cache filters - -17.07.03 -+ ODBC changed to re-establish broken connection - -11.06.03 -! #ifndef NOSQL changed to NOODBC - -22.05.03 -+ strong auth now supported for POP3 proxy. Now, username can be in format - proxy_username:proxy_password:POP3_username@pop3server - -30.04.03 -! redirect function now do not change code of traffic limit error - -24.04.2003 -! -M changed to -D for *nix makefiles - -18.04.2003 -! HTTPS behaviour breaked by latest patches restored - -15.04.2003 -! fixed handling of special characters and non-existing files in - FTP over HTTP proxy. - -12.04.2003 -! fixed behaviour of HTTP proxy on RFC-incompatible web servers (banners - exchanges, price.ru, etc) - they terminate string with \n instead of - \r\n. - -10.04.2003 -+ nsrecord and dialer commands added -! Name resolution now occures right before authorization to prevent - unauthenticated users from performing NS lookups and demand dial. - -05.04.2003 -+ N (Never) option value added for counters refreshing - -29.03.2003 -+ !!! FTP support for HTTP proxy added. - -25.03.2003 -! Socks 4 bug fixed (was visible in Netscape) -+ Socks 4.5 support added (not tested) -! !! UDP portmapper code fixed - -24.03.2003 -! Timeout, close on closed socket and FD bugs fixed in UDPPM - -21.03.2003 -+ Proxy-Authorization now works for CONNECT (HTTPS proxy). - -07.03.2003 -! counter command extended to allow traffic reports - -02.03.2003 -! Bandwidth/Traffic limiting problems fixed -! gethostbyname() argument limited to 256 characters. It may be significant - for Windows - -27.02.2003 -+ !!! Traffic limitting feature added (counter/countin/nocountin) - -26.02.2003 -! nobandlim processing changed -! bandlim/nobamdlim commands renamed to bandlimin/nobandlimin - -22.02.2003 -+ !!! Bandwidth limiting features added (bandlim and nobandlim commands) - -18.02.2003 -+ Mutext support added for inter-thread data access. Should improve stability. -- debugging printf() removed from proxy, typo fixed in auth.c - -10.02.2003 -! Changed to use WSASocket()/WSAAccept() instead of socket()/accept() under - Windows - -30.01.2003 -! Version of gcc changed (3.2). -+ nscache option added to 3proxy configuration for DNS cache. For a while - caching is primitive (with no expiration). - -27.01.2003 -- \n removed from perror() calls - -27/01/2003 3[APA3A]tiny proxy 0.3b. -New features are marked with !. - - Features: - 1. General - + HTTP/1.1 Proxy with keep-alive client and server support, - transparent proxy support. - ! HTTPS (CONNECT) proxy - + SOCKSv4 Proxy - + SOCKSv5 Proxy (TCP only) - ! Transparent SOCKS->HTTP redirection - + POP3 Proxy - + TCP port mapper - + UDP port mapper - + Threaded application (no child process). - 2. Proxy chaining - ! Parent proxy support for any type of incoming connection - ! Username/password authentication for parent proxy(s). - ! HTTPS/SOCKS4/SOCKS5 and redirection parent support - ! Random parent select - ! Chain building (multihop proxing) - 3. Logging - ! turnable log format - + stdout logging - + file logging - + syslog logging (Unix) - ! ODBC logging (Windows) - + log file rotation (hourly, daily, weekly, monthly) - + automatic log file comperssion with external archiver (for files) - + automatic removal of older log files - 4. Access control - + User authorization by NetBIOS messanger name - + Access control by username, source IP, destination IP and destination - port - + Access control by username/password for SOCKSv5 and HTTP - + Cleartext or encrypted (crypt/MD5 or NT) passwords. - + Connection redirection - ! Access control by requested action (CONNECT/BIND, - HTTP GET/POST/PUT/HEAD/OTHER). - 5. Configuration - + support for configuration files - + support for includes in configuration files - + interface binding - + running as daemon process - ! utility for networks list building - Unix - + support for chroot - + support for setgid - + support for setuid - NT - + support --install as service - + support --remove as service - + support for service START, STOP, PAUSE and CONTINUE commands (on - PAUSE no new connection accepted, but active connections still in - progress) - 6. Compilation - + MSVC (msvcrt.dll) - ! Intel Windows Compiler (msvcrt.dll) - + Windows/gcc (msvcrt.dll) - + Cygwin/gcc (cygwin.dll) - + Unix/gcc - ! Unix/ccc - - Known bugs: - - - udppm doesn't work if compiled with cygwin. - - Cygwin doesn't support recvfrom()/sendto() on connected socket, so - recv/send is used instead... Not a big deal anyway. - - - Planned for future release: - - FTP proxy support - - Web interface for configuration - - Signal handling on Unix (for stop/pause/resume/configuration change) - - External filter API - - Addon trafficshape, URL, antiviral, HTTP cache filters - - -27.01.2003 -!!!!!!!!!!!!!!!!!!! -! Tagging as 0.3b ! -!!!!!!!!!!!!!!!!!!! - -24.01.2003 -- Fixed to use INVALID_SOCKET instead of -1 (for Windows compatibility) -- Fixed problem with threading support under gcc. Now ODBC logging seems - to work always. -! strncasecmp removed. Changed to use strnicmp for Windows. - -21.01.2003 -! 0.3 development frozen to only bugfixes -- bug fixed causing 3proxy to crash with NULL pointer reference on - transparent web redirection -- SQL support removed from default (gcc) compilation - -20.01.2003 -+ ODBC logging (yeah!). For a while it works stable only if compiled with - MSVC or Intel compiler. - -17.01.2003 -- bug introduced yesterday into CONNECT code cleaned - -16.01.2003 -+ timeouts command added - -13.01.2003 -- daemonizing code changed to work correctly on buggy libc (FreeBSD) - (pthread_* doesn't work after daemon()) -- logging code changed to work correctly on buggy libc (FreeBSD 4.4) - (freopen "a" mode doesn't work as expected on stdout) - -12.01.2003 -! License is changed to prohibit modification and commercial use - -11.01.2003 -! All makefiles are made uniform -+ Makefiles for Compaq C complier (Makefile.ccc) and Intel C Compiler for - Windows (Makefile.intl) added -+ Makefile.msvc added for Microsoft Visual C Compiler -! proxy.dsp removed - -10.01.2003 -+ Now checked to compile with Compaq C Compiler under linux on alpha platform -+ logformat configuration command added for custom log entry format -! Unix version changed to use gettimeofday instead of ftime to avoid -lcompat - issue. - -09.01.2003 -! Randomizer changed for proxy chaining -! Code cleaned: Makefile, signed/unsigned conversions, etc. -! Typo fixed preventing from compilation under *nix - -08.01.2003 -+ dateformat command added -! Log format changed!!! -+ Control for different operations (CONNECT,BIND,HTTP_*, etc) added to ACL, - see 3proxy.cfg.sample - -25.12.2002 -+ Proxy chaining now is fully operational!!!!! -+ SOCKSv4 and SOCKSv5 client code added for chaining -+ HTTP connect authentication added for chaining -+ Parent authentication for HTTP proxy added -- Problem with "Connection: close" resolved (if HTTP server time outs or closes - connection). - -24.12.2002 -+ Proxy chaining works!!! (for a while only HTTP CONNECT proxies - are supported and no parent authentication). Logging is updated to - include number of redirections (parent proxies) in square brackets. - See config.sample for example of "parent" command. - -23.12.2002 -! Transparent proxy operations improved, logging corrected -+ Added base code for proxy chaining -! Redirection code rewritten - -23.12.2002 -+ UDP ASSOCIATE added (but not tested) to SOCKS. -! Additional logging added to socks proxy -+ Local HTTP proxy redirection added (for SOCKS). - -01.12.2002 -! closesock() problem _finally_ patched... - -30.11.2002 -! Makefile.unix corrected -! Do not process $ in included files for 3proxy.cfg -! Common error codes are unified - -29.11.2002 -+ nserver example added to 3proxy.cfg.sample - -28.11.2002 -- fixed closesock() instead of close() call on 3proxy.cfg included files - for native Windows. - -27.11.2002 -! Minor changes in docummentation -+ dighosts utility added - -22.11.2002 -- Few problems corrected in logfiles rotation - -20.11.2002 -- SOCKSv5 bind() reply corrected. - -19.11.2002 -+ internal resolver added to avoid usage of thread unsafe gethostbyname(). - nserver configuration option added to config file. -! HTTP proxy behaviour slightly changed to be more compatible. - -06/11/2002 3[APA3A]tiny proxy 0.2b Initial release. - - Features: - 1. General - + HTTP/1.1 Proxy with keep-alive client and server support, - transparent proxy support. - + SOCKSv4 Proxy - + SOCKSv5 Proxy (TCP only) - + POP3 Proxy - + TCP port mapper - + UDP port mapper - + Threaded application (no child process). - 2. Logging - + stdout logging - + file logging - + syslog logging (Unix) - + log file rotation (hourly, daily, weekly, monthly) - + automatic log file comperssion with external archiver (for files) - + automatic removal of older log files - 3. Access control - + User authorization by NetBIOS messanger name - + Access control by username, source IP, destination IP and destination - port - + Access control by username/password for SOCKSv5 and HTTP - + Cleartext or encrypted (crypt/MD5 or NT) passwords. - 4. Configuration - + support for configuration files - + support for includes in configuration files - + interface binding - + running as daemon process - Unix - + support for chroot - + support for setgid - + support for setuid - NT - + support --install as service - + support --remove as service - + support for service START, STOP, PAUSE and CONTINUE commands (on - PAUSE no new connection accepted, but active connections still in - progress) - 5. Compilation - + Microsoft VC++ (msvcrt.dll) - + Windows/gcc (msvcrt.dll) - + Cygwin/gcc (cygwin.dll) - + Unix/gcc - - Known bugs: - - - udppm doesn't work if compiled with cygwin. - - Cygwin doesn't support recvfrom()/sendto() on connected socket, so - recv/send is used instead... Not a big deal anyway. - - - socks5 doesn't work with UDP - - Not implemented yet - - Planned for future release: - - UDP implementation in SOCKSv5 - - Signal handling on Unix (for pause/resume) - - External filter API - - Addon trafficshape, URL, antiviral, HTTP cache filters - -06.11.2002 -!!MARK IT 0.2beta -! Using UPX to compress 3proxy.exe - - -02.11.2002 -+ HTTP proxy now supports kepp-alive connections to HTTP server or proxy. - It dramatically decreases number of outgoing connections and amount of DNS - traffic. - -01.11.2002 -+ Now proxy can catch Web server style requests. It means proxy - may be used as a transparent proxy. Yes. It means you can redirect - SOCKS requests with target 80 to HTTP proxy. -! Port check in ACL fixed -! Now proxy catches redirection by changed destination IP or port. If - you redirect request to web server make sure it supports proxy style - requests (IIS and Apache do). -+ HTTP proxy supports keep-alive. Now number of threads required - significantly reduced. -+ HTTP CONNECT fully supported (both direct and redirected to another proxy). - Now you can use our proxy for HTTPs. Or for spam :) Don't forget to set ACL - for outgoing ports, cause now ports are not limited. - -26.10.2002 -+ mycrypt utility added for making crypted passwords in NT and crypt/MD5 -! ACL check for strong auth corrected -+ HTTP proxy support for authentication (basic). Now you can use strong - username/password authentication with proxy module. -+ Error messages added for HTTP proxy - -25.10.2002 -+ NT passwords are now supported in 3proxy.cfg -! Public License Agreement changed to be more clear - -24.10.2002 -! Fixed handle leak because of missed CloseHandle for threads in Windows - -23.10.2002 -! Fixed POP3 proxy bug -! Strong auth changed to allow rules with * for username -+ MD5 crypt format passwords is now supported... Do we ever need DES? - I will not implement blowfish - it's huge and rarely used. -+ More comments added to 3proxy.cfg.sample - -21.10.2002 -! Fixed strongauth problem - ACL was not checked for authenticated - SOCKSv5 users - -16.10.2002 -+ Added support for SOCKSv5 cleartext password authentication -+ "strong" authentication is now OK (use it only for SOCKS) -+ added "users" config file command to specify username and password. Only - cleartext for a while. - -20.09.2002 -! Minor improvements in socket operations - -17.09.2002 -! HTTP proxy changed to do not strip hostname from URI if target port is not - 80. It allows to redirect requests to another proxy as well as redirect to - different Web server via ACL. It will work for most servers (IIS, Apache) - if target redirected to non-standard port of Web server, but may fail in - some rare cases. Redirection to proxy should always work OK except if proxy - is on TCP/80. -+ Added "redirect" ACL command. You can redirect request to another destination - if ACL entry matches (that is by target or source IP, target port, username). -! Fixed documentation bug in 3proxy.cfg.sample ("authtype" instead of "auth") -! Fixed bug causing server to exit in native Win32 mode if "service" - configuration option is not configured -! Outgoing SOCKS connections are handled in common way now. - -07.09.2002 -+ added binding to external interface for outgoing connections -! Fixed bug causing username check in ACL always fail -+ Added ACL check for UDP map -+ Added "Single packet" services to UDP portmap (-s switch). Allows unlimited - number of clients to be handled by portmapper for single-packet services - (like DNS). - -06.09.2002 3[APA3A]tiny proxy 0.1b initial release - - Features: - 1. General - + HTTP/1.0 Proxy - + SOCKSv4 Proxy - + SOCKSv5 Proxy (TCP only) - + POP3 Proxy - + TCP port mapper - + UDP port mapper - + Threaded application (no child process). - 2. Logging - + stdout logging - + file logging - + syslog logging (Unix) - + log file rotation (hourly, daily, weekly, monthly) - + automatic log file comperssion with external archiver (for files) - + automatic removal of older log files - 3. Access control - + User authorization by NetBIOS messanger name - + Access control by username, source IP, destination IP and destination - port - 4. Configuration - + support for configuration files - + support for includes in configuration files - + interface binding - + running as daemon process - Unix - + support for chroot - + support for setgid - + support for setuid - NT - + support --install as service - + support --remove as service - + support for service START, STOP, PAUSE and CONTINUE commands (on - PAUSE no new connection accepted, but active connections still in - progress) - 5. Compilation - + Microsoft VC++ (msvcrt.dll) - + Windows/gcc (msvcrt.dll) - + Cygwin/gcc (cygwin.dll) - + Unix/gcc - - Known bugs: - - - udppm doesn't work if compiled with cygwin. - - Cygwin doesn't support recvfrom()/sendto() on connected socket, so - recv/send is used instead... Not a big deal anyway. - - - udppm works without authentication - - Will be patched later. - - - socks5 doesn't work with UDP - - Not implemented yet - - Planned for future release: - - Improvements to UDP portmapping - - UDP implementation in SOCKSv5 - - Ident authorization - - SOCKSv5 password authentication - - Signal handling on Unix (for pause/resume) - - External filter API - - Addon trafficshape, URL, antiviral, HTTP cache filters - - HTTP/1.1 support - - -$Id: Changelog,v 1.154 2006/03/08 18:44:00 vlad Exp $ \ No newline at end of file From cb590049b32810b170827d9e097f87466360bbbf Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 16 Apr 2014 15:39:38 +0400 Subject: [PATCH 011/122] More legacy code removed --- src/ftp.c | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/src/ftp.c b/src/ftp.c index de5a51b..d6708f2 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -33,11 +33,7 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) { if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 703; } -#ifndef NOPSTDIN param->statscli64 += (int)strlen(buf); -#else - param->statscli += (int)strlen(buf); -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -54,11 +50,7 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) { if((int)socksend(param->remsock, (unsigned char *)buf, res, conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 705; } -#ifndef NOPSTDIN param->statscli64 += res; -#else - param->statscli += res; -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0){ buf[i] = 0; @@ -89,11 +81,7 @@ int ftpcd(struct clientparam *param, unsigned char* path, char *nbuf, int *innbu if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 711; } -#ifndef NOPSTDIN param->statscli64 += (int)strlen(buf); -#else - param->statscli += (int)strlen(buf); -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ if(nbuf && innbuf && inbuf + i < *innbuf && i > 6) { @@ -126,11 +114,7 @@ int ftpsyst(struct clientparam *param, unsigned char *buf, unsigned len){ if(socksend(param->remsock, (unsigned char *)"SYST\r\n", 6, conf.timeouts[STRING_S]) != 6){ return 721; } -#ifndef NOPSTDIN param->statscli64 += 6; -#else - param->statscli += 6; -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -149,11 +133,7 @@ int ftppwd(struct clientparam *param, unsigned char *buf, unsigned len){ if(socksend(param->remsock, (unsigned char *)"PWD\r\n", 5, conf.timeouts[STRING_S]) != 5){ return 731; } -#ifndef NOPSTDIN param->statscli64 += 5; -#else - param->statscli += 5; -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -178,11 +158,7 @@ int ftptype(struct clientparam *param, unsigned char* f_type){ if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){ return 741; } -#ifndef NOPSTDIN param->statscli64 += (int)strlen(buf); -#else - param->statscli += (int)strlen(buf); -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -203,11 +179,7 @@ SOCKET ftpdata(struct clientparam *param){ if(socksend(param->remsock, (unsigned char *)"PASV\r\n", 6, conf.timeouts[STRING_S]) != 6){ return INVALID_SOCKET; } -#ifndef NOPSTDIN param->statscli64 += 6; -#else - param->statscli += 6; -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } @@ -245,11 +217,7 @@ SOCKET ftpcommand(struct clientparam *param, unsigned char * command, unsigned c so._closesocket(s); return INVALID_SOCKET; } -#ifndef NOPSTDIN param->statscli64 += (int)strlen(buf); -#else - param->statscli += (int)strlen(buf); -#endif param->nwrites++; while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){ } From e3144dc61bed56eba265883a8308ae61114a266f Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Sun, 4 May 2014 23:10:14 +0400 Subject: [PATCH 012/122] ldapauth memory leak fixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Привет ! Рсправил старую багу РїРѕ утечки памяти РІ плагине .. теперь вообще РЅРµ течет , глупая ошибка.. Р’РѕС‚ так 3,5 РіРѕРґР° РЅРµ попрограммируеш , СЃСЂСѓР·Сѓ ошибку найдеш :) -- Kirill Lopuchov --- src/plugins/LdapPlugin/ldapauth.c | 14 +++++++++++--- src/plugins/LdapPlugin/ldapauth.txt | 10 ---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/plugins/LdapPlugin/ldapauth.c b/src/plugins/LdapPlugin/ldapauth.c index bc69f68..5b8231c 100644 --- a/src/plugins/LdapPlugin/ldapauth.c +++ b/src/plugins/LdapPlugin/ldapauth.c @@ -121,6 +121,9 @@ static int ldapfunc(struct clientparam *param) int rc = -1; char tmpbuf[1024]; + /* test proxy user auth ------------------------*/ + if(!param->username || !param->password) return 4; + if(strlen(param->password)==0) return 4; /* init ldap ---------------------- */ ld = ldap_init( ldap_serv, 389 ); @@ -131,9 +134,6 @@ static int ldapfunc(struct clientparam *param) return 7; } - /* test proxy user auth ------------------------*/ - if(!param->username || !param->password) return 4; - if(strlen(param->password)==0) return 4; /* this code for Active Directory LDAP catalog :( detail see documentation for plugin */ @@ -161,6 +161,14 @@ static int ldapfunc(struct clientparam *param) ldap_unbind_s(ld); ld = ldap_init( ldap_serv, 389 ); + + if ( ld == NULL ) + { + param->srv->logfunc(param,"Error ldap_init: No init lib ldap"); + /*ldap_perror( ld, "Error ldap_init" ); */ + return 7; + } + rc = ldap_bind_s( ld, ldap_user, ldap_pass, LDAP_AUTH_SIMPLE ); if ( rc != LDAP_SUCCESS ) diff --git a/src/plugins/LdapPlugin/ldapauth.txt b/src/plugins/LdapPlugin/ldapauth.txt index 0c23a6e..89f04d5 100644 --- a/src/plugins/LdapPlugin/ldapauth.txt +++ b/src/plugins/LdapPlugin/ldapauth.txt @@ -27,11 +27,6 @@ http://lucas.bergmans.us/hacks/openldap/ под unix подобной ОС (Freebsd) использовался стандартный gcc. и библиотеки openldap-client. -!!!! Внимание при работе плагина возможна утечка памяти !!!! -У меня на Win 2000 Serv и окола 600 пользователях при канале 500 кбит/сек . -процесс 3proxy за сутки выростает до 40 мб . Лечится рестартом сервиса. -Если кто то знает хорошо Open Ldap api и может указать на ошибку в плагине -с радостью выслушаю :) . 2. Настройка плагина. @@ -328,11 +323,6 @@ http://lucas.bergmans.us/hacks/openldap/ РПД unix РПДПВОПК пу (Freebsd) ЙУРПМШЪПЧБМУС УФБОДБТФОЩК gcc. Й ВЙВМЙПФЕЛЙ openldap-client. -!!!! чОЙНБОЙЕ РТЙ ТБВПФЕ РМБЗЙОБ ЧПЪНПЦОБ ХФЕЮЛБ РБНСФЙ !!!! -х НЕОС ОБ Win 2000 Serv Й ПЛПМБ 600 РПМШЪПЧБФЕМСИ РТЙ ЛБОБМЕ 500 ЛВЙФ/УЕЛ . -РТПГЕУУ 3proxy ЪБ УХФЛЙ ЧЩТПУФБЕФ ДП 40 НВ . мЕЮЙФУС ТЕУФБТФПН УЕТЧЙУБ. -еУМЙ ЛФП ФП ЪОБЕФ ИПТПЫП Open Ldap api Й НПЦЕФ ХЛБЪБФШ ОБ ПЫЙВЛХ Ч РМБЗЙОЕ -У ТБДПУФША ЧЩУМХЫБА :) . 2. оБУФТПКЛБ РМБЗЙОБ. From aad255900497b12d9de1448eeb644b1d11a0fdd7 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 7 May 2014 01:42:22 +0400 Subject: [PATCH 013/122] FTP proxy debugging output removed, bind to same IP with control connection for active FTP FTP proxy debugging output removed, bind to same IP with control connection for active FTP --- src/ftppr.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/ftppr.c b/src/ftppr.c index 6fd5342..22bb4a2 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -42,8 +42,6 @@ void * ftpprchild(struct clientparam* param) { if (req) myfree (req); req = NULL; -(*param->srv->logfunc)(param, buf); - if (!strncasecmp((char *)buf, "OPEN ", 5)){ if(parsehostname((char *)buf+5, param, 21)){RETURN(803);} if(param->remsock != INVALID_SOCKET) { @@ -123,10 +121,10 @@ void * ftpprchild(struct clientparam* param) { } if ((clidatasock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {RETURN(821);} sasize = sizeof(struct sockaddr_in); + if(so._getsockname(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(824);} + param->sinc.sin_port = 0; + if(so._bind(clidatasock, (struct sockaddr *)¶m->sinc, sasize)){RETURN(822);} if (pasv) { - if(so._getsockname(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(824);} - param->sinc.sin_port = 0; - if(so._bind(clidatasock, (struct sockaddr *)¶m->sinc, sasize)){RETURN(822);} if(so._listen(clidatasock, 1)) {RETURN(823);} if(so._getsockname(clidatasock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(824);} sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n", @@ -137,7 +135,6 @@ void * ftpprchild(struct clientparam* param) { (unsigned)(((unsigned char *)(¶m->sinc.sin_port))[0]), (unsigned)(((unsigned char *)(¶m->sinc.sin_port))[1]) ); -param->srv->logfunc(param,buf); } else { unsigned long b1, b2, b3, b4; From 6b99de69c408e753e86ae11c03d15d9ff5427533 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Tue, 6 May 2014 02:56:35 +0400 Subject: [PATCH 014/122] getip46() added int getip46(int family, unsigned char *name, struct sockaddr_storage *sa) family: IPv4/IPv6 preference order 4, 6, 46, 64 or 0 for getip() compatibility. name - hostname, sa - destination sockaddr (must be large enougth) returns: 0 fo failed resolution IP address for family = 0 AF_INET/AF_INET6 overwise. --- src/common.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++--- src/proxy.h | 9 ++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/src/common.c b/src/common.c index b2509a3..fe94d3e 100644 --- a/src/common.c +++ b/src/common.c @@ -688,9 +688,8 @@ unsigned long getip(unsigned char *name){ if(name[i] <'0' || name[i] >'9') break; } if(!name[i] && ndots == 3){ - unsigned long ip; - if(scanaddr(name, &ip, NULL) == 4){ - return ip; + if(scanaddr(name, &retval, NULL) == 4){ + return retval; } } if(resolvfunc){ @@ -719,3 +718,61 @@ unsigned long getip(unsigned char *name){ #endif return retval; } + +#ifdef NOIPV6 +unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa){ +#else +unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa){ + int ndots=0, ncols=0; + struct addrinfo *ai, *iter; + struct sockaddr *sa4, *sa6; + int i; + + if(!sa) return 0; + if(!family) { +#endif + memset(sa, 0, sizeof(struct sockaddr_in)); + ((struct sockaddr_in *)sa)->sin_family = AF_INET; + return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0; +#ifndef NOIPV6 + } + for(i=0; name[i]; i++){ + if(name[i] == '.'){ + if(++ndots > 3) break; + continue; + } + else if(name[i] == ':'){ + if(++ndots > 7) break; + continue; + } + if(name[i] <'0' || name[i] >'9') break; + } + if(!name[i]){ + if(ndots == 3 && ncols == 0){ + return inet_pton(AF_INET, name, sa)? AF_INET : 0; + } + if(ncols >= 2) { + return inet_pton(AF_INET6, name, sa)? AF_INET6 : 0; + } + } + if (getaddrinfo(name, NULL, NULL, &ai)) return 0; + for(iter = ai; iter; iter = iter->ai_next){ + if(!sa4 && iter->ai_addr->sa_family == AF_INET) sa4 = iter->ai_addr; + if(!sa6 && iter->ai_addr->sa_family == AF_INET) sa6 = iter->ai_addr; + } + if(sa6 && ((family == 6) || (family == 64) || (family == 46 && !sa4))){ + memcpy(sa, sa6, sizeof(struct sockaddr_in6)); + freeaddrinfo(ai); + return AF_INET6; + } + else if(sa4 && family != 6){ + memcpy(sa, sa4, sizeof(struct sockaddr_in)); + freeaddrinfo(ai); + return AF_INET; + } + else { + freeaddrinfo(ai); + return 0; + } +#endif +} diff --git a/src/proxy.h b/src/proxy.h index fbccdde..e195cc1 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -47,6 +47,10 @@ #ifdef _WIN32 #include +#ifndef NOIPV6 +#include + +#endif #ifndef _WINCE #include #else @@ -188,6 +192,11 @@ int myinet_ntoa(struct in_addr in, char * buf); extern unsigned long nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); +#ifdef NOIPV6 +unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa){ +#else +unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa){ +#endif unsigned long myresolver(unsigned char *); unsigned long fakeresolver (unsigned char *name); int initdnshashtable(unsigned nhashsize); From cce3a94f04f1e14db48315086fa56670b1994078 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 7 May 2014 03:20:18 +0400 Subject: [PATCH 015/122] proxy.h getip46() description fixed --- src/proxy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proxy.h b/src/proxy.h index e195cc1..0e5ee31 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -193,9 +193,9 @@ extern unsigned long nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); #ifdef NOIPV6 -unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa){ +unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa); #else -unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa){ +unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa); #endif unsigned long myresolver(unsigned char *); unsigned long fakeresolver (unsigned char *name); From bc7ca3af09d8db2d32f8003c2395e40647bb30bf Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 7 May 2014 03:29:57 +0400 Subject: [PATCH 016/122] intip changed to intsa intip changed to intsa for IPv6 use --- src/3proxy.c | 2 +- src/common.c | 3 ++- src/datatypes.c | 18 +++++++++++++++--- src/dnspr.c | 2 +- src/proxy.c | 3 ++- src/proxy.h | 5 ----- src/proxymain.c | 10 ++++++---- src/socks.c | 2 +- src/structures.h | 9 +++++++-- 9 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 5c88298..20e8caa 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -727,7 +727,7 @@ static int h_proxy(int argc, unsigned char ** argv){ } static int h_internal(int argc, unsigned char ** argv){ - conf.intip = getip(argv[1]); + getip46(46, argv[1], &conf.intsa); return 0; } diff --git a/src/common.c b/src/common.c index fe94d3e..028fe42 100644 --- a/src/common.c +++ b/src/common.c @@ -56,7 +56,8 @@ struct extparam conf = { NULL, NULL, NONE, NONE, NULL, - INADDR_ANY, INADDR_ANY, + {AF_INET}, + INADDR_ANY, 0, 0, NULL, NULL, diff --git a/src/datatypes.c b/src/datatypes.c index 554ab8f..ce9c94c 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -72,6 +72,17 @@ static void pr_ip(struct node *node, CBFUNC cbf, void*cb){ if(node->value)(*cbf)(cb, buf, ipprint(buf, *(unsigned *)node -> value)); } +static void pr_sa(struct node *node, CBFUNC cbf, void*cb){ +#ifdef NOIPV6 + if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr) +#else + char buf[64]; + *buf = 0; + inet_ntop(((struct sockaddr *)node -> value)->sa_family, node->value, buf, sizeof(buf)); + if(node->value)(*cbf)(cb, buf, strlen(buf)); +#endif +} + static void pr_wdays(struct node *node, CBFUNC cbf, void*cb){ char buf[16]; int i, found = 0; @@ -555,8 +566,8 @@ static void * ef_server_targetport(struct node * node){ return &((struct srvparam *)node->value) -> targetport; } -static void * ef_server_intip(struct node * node){ - return &((struct srvparam *)node->value) -> intip; +static void * ef_server_intsa(struct node * node){ + return &((struct srvparam *)node->value) -> intsa; } static void * ef_server_extip(struct node * node){ @@ -763,7 +774,7 @@ static struct property prop_server[] = { {prop_server + 2, "target", ef_server_target, TYPE_STRING, "portmapper target ip"}, {prop_server + 3, "targetport", ef_server_targetport, TYPE_PORT, "portmapper target port"}, {prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"}, - {prop_server + 5, "intip", ef_server_intip, TYPE_IP, "ip address of internal interface"}, + {prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"}, {prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"}, {prop_server + 7, "intport", ef_server_intport, TYPE_PORT, "port to listen"}, {prop_server + 8, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"}, @@ -819,6 +830,7 @@ struct datatype datatypes[64] = { {"traffic", NULL, pr_traffic, NULL}, {"port", NULL, pr_port, NULL}, {"ip", NULL, pr_ip, NULL}, + {"sa", NULL, pr_sa, NULL}, {"cidr", NULL, pr_cidr, NULL}, {"string", NULL, pr_string, NULL}, {"datetime", NULL, pr_datetime, NULL}, diff --git a/src/dnspr.c b/src/dnspr.c index 6612d6f..f9ef868 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -107,7 +107,7 @@ void * dnsprchild(struct clientparam* param) { unsigned a, b, c, d; sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d); ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a); - if(ip == param->srv->intip){ + if(param->srv->intsa.ss_family == AF_INET && ip == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr){ buf[2] = 0x85; buf[3] = 0x80; buf[6] = 0; diff --git a/src/proxy.c b/src/proxy.c index f971abe..cd6824c 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -545,7 +545,8 @@ for(;;){ #endif if((res = (*param->srv->authfunc)(param))) {RETURN(res);} - if (param->sins.sin_addr.s_addr == param->srv->intip && param->sins.sin_port == param->srv->intport) { + if (param->srv->intsa.ss_family == AF_INET && + (param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == param->srv->intport)) { RETURN(519); } sasize = sizeof(struct sockaddr_in); diff --git a/src/proxy.h b/src/proxy.h index 0e5ee31..2fd1c22 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -47,10 +47,6 @@ #ifdef _WIN32 #include -#ifndef NOIPV6 -#include - -#endif #ifndef _WINCE #include #else @@ -319,7 +315,6 @@ extern pthread_mutex_t odbc_mutex; #endif extern struct hashtable dns_table; - extern struct datatype datatypes[64]; extern struct commands commandhandlers[]; diff --git a/src/proxymain.c b/src/proxymain.c index ff22a9b..a158afa 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -173,7 +173,7 @@ int MODULEMAINFUNC (int argc, char** argv){ } break; case 'i': - srv.intip = getip((unsigned char *)argv[i]+2); + getip46(46, argv[i]+2, &srv.intsa); break; case 'e': srv.extip = getip((unsigned char *)argv[i]+2); @@ -535,8 +535,8 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat); } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); - if(!srv->intip) srv->intip = conf.intip; - param->sinc.sin_addr.s_addr = srv->intip; + if(!srv->intsa.ss_family) memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); + param->sinc.sin_addr.s_addr = ((struct sockaddr_in *)&srv->intsa)->sin_addr.s_addr; param->sinc.sin_port = srv->intport; if(!srv->extip) srv->extip = conf.extip; param->sins.sin_addr.s_addr = param->extip = srv->extip; @@ -843,7 +843,9 @@ void freeconf(struct extparam *confp){ confp->logtype = NONE; confp->authfunc = ipauth; confp->bandlimfunc = NULL; - confp->intip = confp->extip = 0; + memset(&confp->intsa, 0, sizeof(confp->intsa)); + confp->intsa.ss_family = AF_INET; + confp->extip = 0; confp->intport = confp->extport = 0; confp->singlepacket = 0; confp->maxchild = 100; diff --git a/src/socks.c b/src/socks.c index 5bdba1d..d8c9237 100644 --- a/src/socks.c +++ b/src/socks.c @@ -178,7 +178,7 @@ fflush(stderr); param->clisock = so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if(param->clisock == INVALID_SOCKET) {RETURN(11);} sin.sin_family = AF_INET; - sin.sin_addr.s_addr = param->srv->intip; + sin.sin_addr.s_addr = ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr; sin.sin_port = htons(0); if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(struct sockaddr_in))) {RETURN (12);} #if SOCKSTRACE > 0 diff --git a/src/structures.h b/src/structures.h index b0058d3..6cabb6d 100644 --- a/src/structures.h +++ b/src/structures.h @@ -28,6 +28,9 @@ extern "C" { #define INVALID_SOCKET (-1) #else #include +#ifndef NOIPV6 +#include +#endif #define pthread_mutex_t CRITICAL_SECTION #define pthread_mutex_init(x, y) InitializeCriticalSection(x) #define pthread_mutex_lock(x) EnterCriticalSection(x) @@ -330,7 +333,7 @@ struct srvparam { int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv; unsigned bufsize; unsigned logdumpsrv, logdumpcli; - unsigned long intip; + struct sockaddr_storage intsa; unsigned long extip; pthread_mutex_t counter_mutex; struct pollfd fds; @@ -451,7 +454,8 @@ struct extparam { unsigned char *logname, **archiver; ROTATION logtype, countertype; char * counterfile; - unsigned long intip, extip; + struct sockaddr_storage intsa; + unsigned long extip; unsigned short intport, extport; struct passwords *pwl; struct auth * authenticate; @@ -659,6 +663,7 @@ typedef enum { TYPE_TRAFFIC, TYPE_PORT, TYPE_IP, + TYPE_SA, TYPE_CIDR, TYPE_STRING, TYPE_DATETIME, From 7897b009a1af5a0d57d5dc321b008104e5096192 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Sun, 11 May 2014 01:39:02 +0400 Subject: [PATCH 017/122] intport removed, SA macro added --- .gitignore | 1 + src/common.c | 54 +++++++++++++++++++++++++++--------------------- src/datatypes.c | 35 ++++++++++++++----------------- src/dnspr.c | 2 +- src/proxy.c | 6 +++--- src/proxy.h | 6 +----- src/proxymain.c | 30 ++++++++++++++------------- src/structures.h | 30 +++++++++++++++++++++++---- 8 files changed, 94 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 22ac573..cf580e3 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ doc/html/index.html verfile.sh Makefile Changelog +res copytgz.sh *~.nib local.properties diff --git a/src/common.c b/src/common.c index 028fe42..341967f 100644 --- a/src/common.c +++ b/src/common.c @@ -58,7 +58,7 @@ struct extparam conf = { NULL, {AF_INET}, INADDR_ANY, - 0, 0, + 0, NULL, NULL, doconnect, @@ -463,7 +463,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += myinet_ntoa(param->req.sin_addr, (char *)buf + i); break; case 'p': - sprintf((char *)buf+i, "%hu", ntohs(param->srv->intport)); + sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->srv->intsa))); i += (int)strlen((char *)buf+i); break; case 'c': @@ -720,60 +720,66 @@ unsigned long getip(unsigned char *name){ return retval; } -#ifdef NOIPV6 -unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa){ -#else -unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa){ - int ndots=0, ncols=0; +unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ +#ifndef NOIPV6 + int ndots=0, ncols=0, nhex=0; struct addrinfo *ai, *iter; - struct sockaddr *sa4, *sa6; + struct sockaddr *sa4=NULL, *sa6=NULL; int i; if(!sa) return 0; if(!family) { #endif - memset(sa, 0, sizeof(struct sockaddr_in)); ((struct sockaddr_in *)sa)->sin_family = AF_INET; return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0; #ifndef NOIPV6 } for(i=0; name[i]; i++){ if(name[i] == '.'){ - if(++ndots > 3) break; - continue; + if(++ndots > 3) { + break; + } } else if(name[i] == ':'){ - if(++ndots > 7) break; - continue; + if(++ncols > 7) { + break; + } + } + else if(name[i] == '%' || (name[i] >= 'a' && name[i] <= 'f') || (name[i] >= 'A' && name[i] <= 'F')){ + nhex++; + } + else if(name[i] <'0' || name[i] >'9') { + break; } - if(name[i] <'0' || name[i] >'9') break; } if(!name[i]){ - if(ndots == 3 && ncols == 0){ - return inet_pton(AF_INET, name, sa)? AF_INET : 0; + if(ndots == 3 && ncols == 0 && nhex == 0){ + *SAFAMILY(sa)=AF_INET; + return inet_pton(AF_INET, name, SAADDR(sa))? AF_INET : 0; } if(ncols >= 2) { - return inet_pton(AF_INET6, name, sa)? AF_INET6 : 0; + *SAFAMILY(sa)=AF_INET6; + return inet_pton(AF_INET6, name, SAADDR(sa))? AF_INET6 : 0; } } if (getaddrinfo(name, NULL, NULL, &ai)) return 0; for(iter = ai; iter; iter = iter->ai_next){ if(!sa4 && iter->ai_addr->sa_family == AF_INET) sa4 = iter->ai_addr; - if(!sa6 && iter->ai_addr->sa_family == AF_INET) sa6 = iter->ai_addr; + if(!sa6 && iter->ai_addr->sa_family == AF_INET6) sa6 = iter->ai_addr; } if(sa6 && ((family == 6) || (family == 64) || (family == 46 && !sa4))){ - memcpy(sa, sa6, sizeof(struct sockaddr_in6)); + *SAFAMILY(sa)=AF_INET6; + memcpy(SAADDR(sa), SAADDR(sa6), SAADDRLEN(sa)); freeaddrinfo(ai); return AF_INET6; } else if(sa4 && family != 6){ - memcpy(sa, sa4, sizeof(struct sockaddr_in)); + *SAFAMILY(sa)=AF_INET; + memcpy(SAADDR(sa), SAADDR(sa4), SAADDRLEN(sa)); freeaddrinfo(ai); return AF_INET; } - else { - freeaddrinfo(ai); - return 0; - } + freeaddrinfo(ai); + return 0; #endif } diff --git a/src/datatypes.c b/src/datatypes.c index ce9c94c..a80196e 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -77,8 +77,10 @@ static void pr_sa(struct node *node, CBFUNC cbf, void*cb){ if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr) #else char buf[64]; - *buf = 0; - inet_ntop(((struct sockaddr *)node -> value)->sa_family, node->value, buf, sizeof(buf)); + buf[0] = '[' + buf[1] = 0; + inet_ntop(*SAFAMILY(node->value), node->value, buf+1, sizeof(buf)-10); + sprintf(buf + strlen(buf), "]:hu", (unsigned short)*SAPORT(node->value)); if(node->value)(*cbf)(cb, buf, strlen(buf)); #endif } @@ -574,10 +576,6 @@ static void * ef_server_extip(struct node * node){ return &((struct srvparam *)node->value) -> extip; } -static void * ef_server_intport(struct node * node){ - return &((struct srvparam *)node->value) -> intport; -} - static void * ef_server_extport(struct node * node){ return &((struct srvparam *)node->value) -> extport; } @@ -776,19 +774,18 @@ static struct property prop_server[] = { {prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"}, {prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"}, {prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"}, - {prop_server + 7, "intport", ef_server_intport, TYPE_PORT, "port to listen"}, - {prop_server + 8, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"}, - {prop_server + 9, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, - {prop_server + 10, "acl", ef_server_acl, TYPE_ACE, "access control list"}, - {prop_server + 11, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, - {prop_server + 12, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, - {prop_server + 13, "log", ef_server_log, TYPE_STRING, "type of logging"}, - {prop_server + 14, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, - {prop_server + 15, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, - {prop_server + 16, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, - {prop_server + 17, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, - {prop_server + 18, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, - {prop_server + 19, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, + {prop_server + 7, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"}, + {prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, + {prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"}, + {prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, + {prop_server + 11, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, + {prop_server + 12, "log", ef_server_log, TYPE_STRING, "type of logging"}, + {prop_server + 13, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, + {prop_server + 14, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, + {prop_server + 15, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, + {prop_server + 16, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, + {prop_server + 17, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, + {prop_server + 18, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, {NULL, "next", ef_server_next, TYPE_SERVER, "next"} }; diff --git a/src/dnspr.c b/src/dnspr.c index f9ef868..65faaf6 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -107,7 +107,7 @@ void * dnsprchild(struct clientparam* param) { unsigned a, b, c, d; sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d); ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a); - if(param->srv->intsa.ss_family == AF_INET && ip == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr){ + if(*SAFAMILY(¶m->srv->intsa) == AF_INET && ip == *(unsigned long*)SAADDR(¶m->srv->intsa)){ buf[2] = 0x85; buf[3] = 0x80; buf[6] = 0; diff --git a/src/proxy.c b/src/proxy.c index cd6824c..c1fe343 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -545,8 +545,8 @@ for(;;){ #endif if((res = (*param->srv->authfunc)(param))) {RETURN(res);} - if (param->srv->intsa.ss_family == AF_INET && - (param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == param->srv->intport)) { + if (*SAFAMILY(¶m->srv->intsa) == AF_INET && + (param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == *SAPORT(¶m->srv->intsa))) { RETURN(519); } sasize = sizeof(struct sockaddr_in); @@ -830,7 +830,7 @@ for(;;){ if(anonymous!=1){ sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 "); gethostname((char *)(buf+strlen((char *)buf)), 256); - sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(param->srv->intport), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); + sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); if(!anonymous)myinet_ntoa(param->sinc.sin_addr, (char *)buf + strlen((char *)buf)); else { unsigned long tmp; diff --git a/src/proxy.h b/src/proxy.h index 2fd1c22..829ace8 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -188,11 +188,7 @@ int myinet_ntoa(struct in_addr in, char * buf); extern unsigned long nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); -#ifdef NOIPV6 -unsigned long getip46(int family, unsigned char *name, struct sockaddr_in *sa); -#else -unsigned long getip46(int family, unsigned char *name, struct sockaddr_storage *sa); -#endif +unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa); unsigned long myresolver(unsigned char *); unsigned long fakeresolver (unsigned char *name); int initdnshashtable(unsigned nhashsize); diff --git a/src/proxymain.c b/src/proxymain.c index a158afa..a2df6a6 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -173,13 +173,13 @@ int MODULEMAINFUNC (int argc, char** argv){ } break; case 'i': - getip46(46, argv[i]+2, &srv.intsa); + getip46(46, argv[i]+2, (struct sockaddr *)&srv.intsa); break; case 'e': srv.extip = getip((unsigned char *)argv[i]+2); break; case 'p': - srv.intport = htons(atoi(argv[i]+2)); + *SAPORT(&srv.intsa) = htons(atoi(argv[i]+2)); break; case 'b': srv.bufsize = atoi(argv[i]+2); @@ -259,7 +259,7 @@ int MODULEMAINFUNC (int argc, char** argv){ else { #endif #ifndef NOPORTMAP - if (error || argc != i+3 || *argv[i]=='-'|| (srv.intport = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) { + if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) { #ifndef STDMAIN haveerror = 1; conf.threadinit = 0; @@ -311,7 +311,7 @@ int MODULEMAINFUNC (int argc, char** argv){ srvinit2(&srv, &defparam); - if(!srv.intport) srv.intport = htons(childdef.port); + if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port); if(!defparam.sinc.sin_port) defparam.sinc.sin_port = htons(childdef.port); if(hostname)parsehostname(hostname, &defparam, childdef.port); @@ -329,7 +329,7 @@ int MODULEMAINFUNC (int argc, char** argv){ if(!isudp){ lg.l_onoff = 1; lg.l_linger = conf.timeouts[STRING_L]; - sock=so._socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + sock=so._socket(SASOCK(&srv.intsa), SOCK_STREAM, IPPROTO_TCP); } else { sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); @@ -350,8 +350,8 @@ int MODULEMAINFUNC (int argc, char** argv){ #endif } - size = sizeof(defparam.sinc); - for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&defparam.sinc, size)==-1; usleep(sleeptime)) { + size = sizeof(srv.intsa); + for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&srv.intsa, size)==-1; usleep(sleeptime)) { sprintf((char *)buf, "bind(): %s", strerror(errno)); if(!srv.silent)(*srv.logfunc)(&defparam, buf); sleeptime = (sleeptime<<1); @@ -374,8 +374,10 @@ int MODULEMAINFUNC (int argc, char** argv){ sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self()); (*srv.logfunc)(&defparam, buf); } - defparam.sinc.sin_addr.s_addr = defparam.sins.sin_addr.s_addr = 0; - defparam.sinc.sin_port = defparam.sins.sin_port = 0; + memset(&defparam.sinc, 0, sizeof(defparam.sinc)); + memset(&defparam.sins, 0, sizeof(defparam.sins)); + *SAFAMILY(&defparam.sinc) = AF_INET; + *SAFAMILY(&defparam.sins) = AF_INET; srv.fds.fd = sock; srv.fds.events = POLLIN; @@ -519,7 +521,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET; param->req.sin_family = param->sins.sin_family = param->sinc.sin_family = AF_INET; pthread_mutex_init(&srv->counter_mutex, NULL); - + memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); } void srvinit2(struct srvparam * srv, struct clientparam *param){ @@ -535,9 +537,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat); } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); - if(!srv->intsa.ss_family) memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); + if(!*SAFAMILY(&srv->intsa)) *SAFAMILY(&srv->intsa) = AF_INET; param->sinc.sin_addr.s_addr = ((struct sockaddr_in *)&srv->intsa)->sin_addr.s_addr; - param->sinc.sin_port = srv->intport; + param->sinc.sin_port = *SAPORT(&srv->intsa); if(!srv->extip) srv->extip = conf.extip; param->sins.sin_addr.s_addr = param->extip = srv->extip; if(!srv->extport) srv->extport = htons(conf.extport); @@ -844,9 +846,9 @@ void freeconf(struct extparam *confp){ confp->authfunc = ipauth; confp->bandlimfunc = NULL; memset(&confp->intsa, 0, sizeof(confp->intsa)); - confp->intsa.ss_family = AF_INET; + *SAFAMILY(&confp->intsa) = AF_INET; confp->extip = 0; - confp->intport = confp->extport = 0; + *SAPORT(&confp->intsa) = confp->extport = 0; confp->singlepacket = 0; confp->maxchild = 100; resolvfunc = NULL; diff --git a/src/structures.h b/src/structures.h index 6cabb6d..9d91ece 100644 --- a/src/structures.h +++ b/src/structures.h @@ -101,6 +101,21 @@ int #define IM_MSN 0x00400000 #define ADMIN 0x01000000 + +#define SAFAMILY(sa) (&(((struct sockaddr_in *)sa)->sin_family)) + +#ifndef NOIPV6 +#define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port) +#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) +#define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4) +#define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET) +#else +#define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port) +#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.a_addr) +#define SAADDRLEN(sa) (4) +#define SASOCK(sa) (PF_INET) +#endif + typedef enum { CLIENT, SERVER @@ -333,7 +348,11 @@ struct srvparam { int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv; unsigned bufsize; unsigned logdumpsrv, logdumpcli; - struct sockaddr_storage intsa; +#ifndef NOIPV6 + struct sockaddr_in6 intsa; +#else + struct sockaddr_in intsa +#endif unsigned long extip; pthread_mutex_t counter_mutex; struct pollfd fds; @@ -347,7 +366,6 @@ struct srvparam { unsigned char * logformat; unsigned char * logtarget; unsigned char * nonprintable; - unsigned short intport; unsigned short extport; unsigned short targetport; unsigned char replace; @@ -454,9 +472,13 @@ struct extparam { unsigned char *logname, **archiver; ROTATION logtype, countertype; char * counterfile; - struct sockaddr_storage intsa; +#ifndef NOIPV6 + struct sockaddr_in6 intsa; +#else + struct sockaddr_in intsa +#endif unsigned long extip; - unsigned short intport, extport; + unsigned short extport; struct passwords *pwl; struct auth * authenticate; AUTHFUNC authfunc; From ccf606fd9e354886ab41a71a09c1d80745285d9e Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Sun, 11 May 2014 02:41:13 +0400 Subject: [PATCH 018/122] ntoa changed to ntop --- src/3proxy.c | 2 +- src/auth.c | 2 +- src/common.c | 33 +++++++++++++++++++++------------ src/datatypes.c | 2 +- src/icqpr.c | 4 ++-- src/msnpr.c | 2 +- src/plugins.c | 4 ++-- src/proxy.c | 4 ++-- src/proxy.h | 2 +- src/socks.c | 5 +++-- src/structures.h | 2 +- 11 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 20e8caa..751fcf6 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -727,7 +727,7 @@ static int h_proxy(int argc, unsigned char ** argv){ } static int h_internal(int argc, unsigned char ** argv){ - getip46(46, argv[1], &conf.intsa); + getip46(46, argv[1], (struct sockaddr *)&conf.intsa); return 0; } diff --git a/src/auth.c b/src/auth.c index 9ccb124..5c1999f 100644 --- a/src/auth.c +++ b/src/auth.c @@ -100,7 +100,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l len = 8 + sprintf((char *)buf + 8, "%.256s", param->hostname); } else { - len = 8 + myinet_ntoa(ina, (char *)buf+8); + len = 8 + myinet_ntop(AF_INET, &ina, (char *)buf+8, 256); } len += sprintf((char *)buf + len, ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(port)); diff --git a/src/common.c b/src/common.c index 341967f..96397ca 100644 --- a/src/common.c +++ b/src/common.c @@ -22,13 +22,22 @@ int randomizer = 1; unsigned char **stringtable = NULL; -int myinet_ntoa(struct in_addr in, char * buf){ - unsigned u = ntohl(in.s_addr); - return sprintf(buf, "%u.%u.%u.%u", - ((u&0xFF000000)>>24), - ((u&0x00FF0000)>>16), - ((u&0x0000FF00)>>8), - ((u&0x000000FF))); +int myinet_ntop(int af, const void *src, char *dst, socklen_t size){ +#ifndef NOIPV6 + if(af != AF_INET6){ +#endif + unsigned u = ntohl(((struct in_addr *)src)->s_addr); + return sprintf(dst, "%u.%u.%u.%u", + ((u&0xFF000000)>>24), + ((u&0x00FF0000)>>16), + ((u&0x0000FF00)>>8), + ((u&0x000000FF))); +#ifndef NOIPV6 + } + *dst = 0; + inet_ntop(af, src, dst, size); + return strlen(dst); +#endif } char *rotations[] = { @@ -421,7 +430,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i++; } } - else i += myinet_ntoa(param->sins.sin_addr, (char *)buf + i); + else i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64); break; case 'N': @@ -451,16 +460,16 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char break; case 'e': tmpia.s_addr = param->extip; - i += myinet_ntoa(tmpia, (char *)buf + i); + i += myinet_ntop(AF_INET, &tmpia, (char *)buf + i, 64); break; case 'C': - i += myinet_ntoa(param->sinc.sin_addr, (char *)buf + i); + i += myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + i, 64); break; case 'R': - i += myinet_ntoa(param->sins.sin_addr, (char *)buf + i); + i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64); break; case 'Q': - i += myinet_ntoa(param->req.sin_addr, (char *)buf + i); + i += myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + i, 64); break; case 'p': sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->srv->intsa))); diff --git a/src/datatypes.c b/src/datatypes.c index a80196e..211020d 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -77,7 +77,7 @@ static void pr_sa(struct node *node, CBFUNC cbf, void*cb){ if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr) #else char buf[64]; - buf[0] = '[' + buf[0] = '['; buf[1] = 0; inet_ntop(*SAFAMILY(node->value), node->value, buf+1, sizeof(buf)-10); sprintf(buf + strlen(buf), "]:hu", (unsigned short)*SAPORT(node->value)); diff --git a/src/icqpr.c b/src/icqpr.c index ee6808a..0cde9c0 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -118,7 +118,7 @@ static void addbuffer(int increment, struct clientparam * param, unsigned char * static int searchcookie(struct clientparam *param, struct flap_header * flap, int len, int * dif, struct tlv_header *tlv, int extra){ struct icq_cookie *ic; - char smallbuf[32]; + char smallbuf[64]; struct tlv_header *bostlv = NULL; struct sockaddr_in sa; SASIZETYPE size = sizeof(sa); @@ -165,7 +165,7 @@ static int searchcookie(struct clientparam *param, struct flap_header * flap, in pthread_mutex_unlock(&icq_cookie_mutex); if(bostlv){ if(so._getsockname(param->clisock, (struct sockaddr *)&sa, &size)==-1) return 1; - len = myinet_ntoa(sa.sin_addr, smallbuf); + len = myinet_ntop(*SAFAMILY(&sa),SAADDR(&sa), smallbuf, 64); if(strchr(ic->connectstring, ':'))sprintf(smallbuf+len, ":%hu", ntohs(sa.sin_port)); len = (int)strlen(smallbuf); *dif = len - (int)ntohs(bostlv->size); diff --git a/src/msnpr.c b/src/msnpr.c index 31895b4..749847e 100644 --- a/src/msnpr.c +++ b/src/msnpr.c @@ -70,7 +70,7 @@ static FILTER_ACTION msn_srv(void *fc, struct clientparam * param, unsigned char len = (int)strlen(tmpbuf); tmpbuf[len++] = ' '; - len+=myinet_ntoa(sa.sin_addr, tmpbuf+len); + len+=myinet_ntop(*SAFAMILY(&sa), SAADDR(&sa), tmpbuf+len, 64); sprintf(tmpbuf+len, ":%hu %s", ntohs(sa.sin_port), sp3 + 1); len = (int)strlen(tmpbuf); memcpy(*buf_p + offset, tmpbuf, len); diff --git a/src/plugins.c b/src/plugins.c index 51a602f..6c21cf4 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -33,7 +33,7 @@ struct symbol symbols[] = { {symbols+5, "sockgetcharcli", (void *) sockgetcharcli}, {symbols+6, "sockgetcharsrv", (void *) sockgetcharsrv}, {symbols+7, "sockgetlinebuf", (void *) sockgetlinebuf}, - {symbols+8, "myinet_ntoa", (void *) myinet_ntoa}, + {symbols+8, "myinet_ntop", (void *) myinet_ntop}, {symbols+9, "dobuf", (void *) dobuf}, {symbols+10, "scanaddr", (void *) scanaddr}, {symbols+11, "getip", (void *) getip}, @@ -103,7 +103,7 @@ struct pluginlink pluginlink = { sockgetcharcli, sockgetcharsrv, sockgetlinebuf, - myinet_ntoa, + myinet_ntop, dobuf, dobuf2, scanaddr, diff --git a/src/proxy.c b/src/proxy.c index c1fe343..6a1a594 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -831,13 +831,13 @@ for(;;){ sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 "); gethostname((char *)(buf+strlen((char *)buf)), 256); sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); - if(!anonymous)myinet_ntoa(param->sinc.sin_addr, (char *)buf + strlen((char *)buf)); + if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + strlen((char *)buf), 64); else { unsigned long tmp; tmp = param->sinc.sin_addr.s_addr; param->sinc.sin_addr.s_addr = ((unsigned long)myrand(param, sizeof(struct clientparam))<<16)^(unsigned long)rand(); - myinet_ntoa(param->sinc.sin_addr, (char *)buf + strlen((char *)buf)); + myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + strlen((char *)buf), 64); param->sinc.sin_addr.s_addr = tmp; } sprintf((char*)buf+strlen((char *)buf), "\r\n"); diff --git a/src/proxy.h b/src/proxy.h index 829ace8..d539087 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -184,7 +184,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask); -int myinet_ntoa(struct in_addr in, char * buf); +int myinet_ntop(int af, const void *src, char *dst, socklen_t size); extern unsigned long nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); diff --git a/src/socks.c b/src/socks.c index d8c9237..9d980c5 100644 --- a/src/socks.c +++ b/src/socks.c @@ -96,7 +96,7 @@ void * sockschild(struct clientparam* param) { if(command==1 && !param->req.sin_addr.s_addr) { RETURN(422); } - myinet_ntoa(param->sins.sin_addr, (char *)buf); + myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + strlen((char *)buf), 64); break; case 3: if ((size = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} /* nmethods */ @@ -400,7 +400,8 @@ fflush(stderr); if(param->hostname){ sprintf((char *)buf + strlen((char *)buf), "%.265s", param->hostname); } - else myinet_ntoa(param->req.sin_addr, (char *)buf+strlen((char *)buf)); + else + myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + strlen((char *)buf), 64); sprintf((char *)buf+strlen((char *)buf), ":%hu", ntohs(param->req.sin_port)); (*param->srv->logfunc)(param, buf); myfree(buf); diff --git a/src/structures.h b/src/structures.h index 9d91ece..dc1c085 100644 --- a/src/structures.h +++ b/src/structures.h @@ -625,7 +625,7 @@ struct pluginlink { int (*sockgetcharcli)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetcharsrv)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to); - int (*myinet_ntoa)(struct in_addr in, char * buf); + int (*myinet_ntop)(int af, const void *src, char *dst, socklen_t size); int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec); int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format); int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask); From a30d5d51a58dd1a43f63130dd2881d4340b5395a Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Sun, 11 May 2014 05:04:04 +0400 Subject: [PATCH 019/122] IPv6 server side code + IPv6 server side support !!! Auth need to be fixed --- src/auth.c | 33 ++++++++++++++++++------------ src/common.c | 8 ++++---- src/datatypes.c | 29 +++++++++++---------------- src/dnspr.c | 12 +++++------ src/ftppr.c | 51 +++++++++++++++++++++++++---------------------- src/icqpr.c | 2 +- src/proxy.c | 8 +++----- src/proxy.h | 4 ++-- src/proxymain.c | 32 ++++++++++++++++++----------- src/smtpp.c | 2 +- src/sockgetchar.c | 16 +++++++-------- src/sockmap.c | 8 ++++---- src/socks.c | 38 ++++++++++++++++++----------------- src/structures.h | 14 +++++++++---- src/udppm.c | 6 +++--- 15 files changed, 141 insertions(+), 122 deletions(-) diff --git a/src/auth.c b/src/auth.c index 5c1999f..c1f705d 100644 --- a/src/auth.c +++ b/src/auth.c @@ -44,12 +44,12 @@ unsigned char * getNetBIOSnamebyip(unsigned long ip){ sins.sin_family = AF_INET; sins.sin_addr.s_addr = ip; sins.sin_port = htons(137); - res=socksendto(sock, &sins, request, sizeof(request), conf.timeouts[SINGLEBYTE_L]*1000); + res=socksendto(sock, (struct sockaddr*)&sins, request, sizeof(request), conf.timeouts[SINGLEBYTE_L]*1000); if(res <= 0) { so._closesocket(sock); return NULL; } - res = sockrecvfrom(sock, &sins, buf, sizeof(buf), conf.timeouts[SINGLEBYTE_L]*1000); + res = sockrecvfrom(sock, (struct sockaddr*)&sins, buf, sizeof(buf), conf.timeouts[SINGLEBYTE_L]*1000); so._closesocket(sock); if(res < (HEADERSIZE + RECORDSIZE)) { return NULL; @@ -376,7 +376,8 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){ username = param->username?param->username:(unsigned char *)"-"; if(acentry->src) { for(ipentry = acentry->src; ipentry; ipentry = ipentry->next) - if(ipentry->ip == (param->sinc.sin_addr.s_addr & ipentry->mask)) { +/* FIX IT !*/ + if(ipentry->ip == (*(unsigned long *)SAADDR(¶m->sincr) & ipentry->mask)) { break; } if(!ipentry) return 0; @@ -673,7 +674,8 @@ int cacheauth(struct clientparam * param){ } if(((!(conf.authcachetype&2)) || (param->username && ac->username && !strcmp(ac->username, param->username))) && - ((!(conf.authcachetype&1)) || ac->ip == param->sinc.sin_addr.s_addr) && +/* FIX IT */ + ((!(conf.authcachetype&1)) || ac->ip == *(unsigned long *)SAADDR(¶m->sincr)) && (!(conf.authcachetype&4) || (ac->password && param->password && !strcmp(ac->password, param->password)))) { if(param->username){ myfree(param->username); @@ -707,7 +709,8 @@ int doauth(struct clientparam * param){ pthread_mutex_lock(&hash_mutex); for(ac = authc; ac; ac = ac->next){ if((!(conf.authcachetype&2) || !strcmp(ac->username, param->username)) && - (!(conf.authcachetype&1) || ac->ip == param->sinc.sin_addr.s_addr) && +/* FIX IT */ + (!(conf.authcachetype&1) || ac->ip == *(unsigned long *)SAADDR(¶m->sincr)) && (!(conf.authcachetype&4) || (ac->password && !strcmp(ac->password, param->password)))) { ac->expires = conf.time + conf.authcachetime; if(strcmp(ac->username, param->username)){ @@ -720,7 +723,8 @@ int doauth(struct clientparam * param){ ac->password = mystrdup(param->password); myfree(tmp); } - ac->ip = param->sinc.sin_addr.s_addr; +/* FIX IT */ + ac->ip = *(unsigned long *)SAADDR(¶m->sincr); break; } } @@ -729,7 +733,8 @@ int doauth(struct clientparam * param){ if(ac){ ac->expires = conf.time + conf.authcachetime; ac->username = mystrdup(param->username); - ac->ip = param->sinc.sin_addr.s_addr; +/* FIX IT */ + ac->ip = *(unsigned long *)SAADDR(¶m->sincr); ac->password = NULL; if((conf.authcachetype&4) && param->password) ac->password = mystrdup(param->password); } @@ -765,7 +770,8 @@ int userauth(struct clientparam * param){ } int nbnameauth(struct clientparam * param){ - unsigned char * name = getNetBIOSnamebyip(param->sinc.sin_addr.s_addr); +/* FIX IT */ + unsigned char * name = getNetBIOSnamebyip(*(unsigned long *)SAADDR(¶m->sincr)); if (param->username) myfree (param->username); param->username = name; @@ -774,7 +780,8 @@ int nbnameauth(struct clientparam * param){ int dnsauth(struct clientparam * param){ char buf[32]; - unsigned u = ntohl(param->sinc.sin_addr.s_addr); +/* FIX IT */ + unsigned u = ntohl(*(unsigned long *)SAADDR(¶m->sincr)); sprintf(buf, "%u.%u.%u.%u.in-addr.arpa", @@ -784,8 +791,8 @@ int dnsauth(struct clientparam * param){ ((u&0x00FF0000)>>16), ((u&0xFF000000)>>24)); - - if(param->sinc.sin_addr.s_addr != udpresolve(buf, NULL, param, 1)) return 6; +/* FIX IT */ + if(*(unsigned long *)SAADDR(¶m->sincr) != udpresolve(buf, NULL, param, 1)) return 6; return param->username? 0:4; } @@ -1054,13 +1061,13 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa buf[len++] = (makeauth == 1)? 0x0c : 0x01; /* PTR:host address */ buf[len++] = 0; buf[len++] = 1; /* INET */ - if(socksendto(sock, sinsp, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ + if(socksendto(sock, (struct sockaddr *)sinsp, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); continue; } if(param) param->statscli64 += len; - len = sockrecvfrom(sock, sinsp, buf, 4096, 15000); + len = sockrecvfrom(sock, (struct sockaddr *) sinsp, buf, 4096, 15000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); if(len <= 13) continue; diff --git a/src/common.c b/src/common.c index 96397ca..7b2e114 100644 --- a/src/common.c +++ b/src/common.c @@ -22,7 +22,7 @@ int randomizer = 1; unsigned char **stringtable = NULL; -int myinet_ntop(int af, const void *src, char *dst, socklen_t size){ +int myinet_ntop(int af, void *src, char *dst, socklen_t size){ #ifndef NOIPV6 if(af != AF_INET6){ #endif @@ -463,7 +463,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += myinet_ntop(AF_INET, &tmpia, (char *)buf + i, 64); break; case 'C': - i += myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + i, 64); + i += myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + i, 64); break; case 'R': i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64); @@ -476,7 +476,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += (int)strlen((char *)buf+i); break; case 'c': - sprintf((char *)buf+i, "%hu", ntohs(param->sinc.sin_port)); + sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->sincr))); i += (int)strlen((char *)buf+i); break; case 'r': @@ -612,7 +612,7 @@ int doconnect(struct clientparam * param){ bindsa.sin_family = AF_INET; bindsa.sin_port = param->extport; bindsa.sin_addr.s_addr = param->extip; - if (param->srv->targetport && !bindsa.sin_port && ntohs(param->sinc.sin_port) > 1023) bindsa.sin_port = param->sinc.sin_port; + if (param->srv->targetport && !bindsa.sin_port && ntohs(*SAPORT(¶m->sincr)) > 1023) bindsa.sin_port = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)&bindsa, sizeof(bindsa))==-1) { memset(&bindsa, 0, sizeof(bindsa)); bindsa.sin_family = AF_INET; diff --git a/src/datatypes.c b/src/datatypes.c index 211020d..5d9a681 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -637,8 +637,8 @@ static void * ef_client_extpassword(struct node * node){ return ((struct clientparam *)node->value) -> extpassword; } -static void * ef_client_cliip(struct node * node){ - return &((struct clientparam *)node->value) -> sinc.sin_addr.s_addr; +static void * ef_client_clisa(struct node * node){ + return &((struct clientparam *)node->value) -> sincr; } static void * ef_client_srvip(struct node * node){ @@ -657,10 +657,6 @@ static void * ef_client_srvport(struct node * node){ return &((struct clientparam *)node->value) -> sins.sin_port; } -static void * ef_client_cliport(struct node * node){ - return &((struct clientparam *)node->value) -> sinc.sin_port; -} - static void * ef_client_pwtype(struct node * node){ return &((struct clientparam *)node->value) -> pwtype; } @@ -802,17 +798,16 @@ static struct property prop_client[] = { {prop_client + 9, "extpassword", ef_client_extpassword, TYPE_STRING, "password for requested host"}, {prop_client + 10, "username", ef_client_username, TYPE_STRING, "client username"}, {prop_client + 11, "password", ef_client_password, TYPE_STRING, "client password"}, - {prop_client + 12, "cliip", ef_client_cliip, TYPE_IP, "client ip"}, - {prop_client + 13, "cliport", ef_client_cliport, TYPE_PORT, "client port"}, - {prop_client + 14, "srvip", ef_client_srvip, TYPE_IP, "target server ip"}, - {prop_client + 15, "srvport", ef_client_srvport, TYPE_PORT, "target server port"}, - {prop_client + 16, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"}, - {prop_client + 17, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"}, - {prop_client + 18, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, - {prop_client + 19, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, - {prop_client + 20, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, - {prop_client + 21, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, - {prop_client + 22, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, + {prop_client + 12, "clisa", ef_client_clisa, TYPE_SA, "client sa"}, + {prop_client + 13, "srvip", ef_client_srvip, TYPE_IP, "target server ip"}, + {prop_client + 14, "srvport", ef_client_srvport, TYPE_PORT, "target server port"}, + {prop_client + 15, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"}, + {prop_client + 16, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"}, + {prop_client + 17, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, + {prop_client + 18, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, + {prop_client + 19, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, + {prop_client + 20, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, + {prop_client + 21, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, {NULL, "next", ef_client_next, TYPE_CLIENT, "next"} diff --git a/src/dnspr.c b/src/dnspr.c index 65faaf6..945edcc 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -36,8 +36,8 @@ void * dnsprchild(struct clientparam* param) { param->srv->fds.events = POLLIN; RETURN (21); } - size = sizeof(struct sockaddr_in); - i = so._recvfrom(param->srv->srvsock, buf, BUFSIZE, 0, (struct sockaddr *)¶m->sinc, &size); + size = sizeof(param->sincr); + i = so._recvfrom(param->srv->srvsock, buf, BUFSIZE, 0, (struct sockaddr *)¶m->sincr, &size); #ifdef _WIN32 if((param->clisock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); @@ -144,19 +144,19 @@ void * dnsprchild(struct clientparam* param) { } param->sins.sin_addr.s_addr = nservers[0]; param->sins.sin_port = htons(53); - if(socksendto(param->remsock, ¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ + if(socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ RETURN(820); } param->statscli64 += i; param->nwrites++; - len = sockrecvfrom(param->remsock, ¶m->sins, buf, BUFSIZE, 15000); + len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, buf, BUFSIZE, 15000); if(len <= 13) { RETURN(821); } param->statssrv64 += len; param->nreads++; if(buf[6] || buf[7]){ - if(socksendto(param->clisock, ¶m->sinc, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ + if(socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ RETURN(822); } RETURN(0); @@ -168,7 +168,7 @@ void * dnsprchild(struct clientparam* param) { buf[3] = 0x83; } usleep(SLEEPTIME); - res = socksendto(param->clisock, ¶m->sinc, buf, len, conf.timeouts[SINGLEBYTE_L]*1000); + res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000); if(res != len){RETURN(819);} if(!ip) {RETURN(888);} diff --git a/src/ftppr.c b/src/ftppr.c index 22bb4a2..14bc1f1 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -119,32 +119,35 @@ void * ftpprchild(struct clientparam* param) { so._closesocket(clidatasock); clidatasock = INVALID_SOCKET; } - if ((clidatasock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {RETURN(821);} - sasize = sizeof(struct sockaddr_in); - if(so._getsockname(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(824);} - param->sinc.sin_port = 0; - if(so._bind(clidatasock, (struct sockaddr *)¶m->sinc, sasize)){RETURN(822);} + if ((clidatasock=socket(SASOCK(¶m->sincl), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {RETURN(821);} + sasize = sizeof(param->sincl); + *SAPORT(¶m->sincl) = 0; + if(so._bind(clidatasock, (struct sockaddr *)¶m->sincl, sasize)){RETURN(822);} if (pasv) { if(so._listen(clidatasock, 1)) {RETURN(823);} - if(so._getsockname(clidatasock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(824);} - sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n", - (unsigned)(((unsigned char *)(¶m->sinc.sin_addr.s_addr))[0]), - (unsigned)(((unsigned char *)(¶m->sinc.sin_addr.s_addr))[1]), - (unsigned)(((unsigned char *)(¶m->sinc.sin_addr.s_addr))[2]), - (unsigned)(((unsigned char *)(¶m->sinc.sin_addr.s_addr))[3]), - (unsigned)(((unsigned char *)(¶m->sinc.sin_port))[0]), - (unsigned)(((unsigned char *)(¶m->sinc.sin_port))[1]) - ); + if(so._getsockname(clidatasock, (struct sockaddr *)¶m->sincl, &sasize)){RETURN(824);} + if(*SAFAMILY(¶m->sincl) == AF_INET) + sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n", + (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[0]), + (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[1]), + (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[2]), + (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[3]), + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]), + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]) + ); + else sprintf((char *)buf, "227 OK (127,0,0,1,%u,%u)\r\n", + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]), + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]) + ); } else { unsigned long b1, b2, b3, b4; unsigned short b5, b6; if(sscanf((char *)buf+5, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) {RETURN(828);} - param->sinc.sin_family = AF_INET; - param->sinc.sin_port = htons((unsigned short)((b5<<8)^b6)); - param->sinc.sin_addr.s_addr = htonl((b1<<24)^(b2<<16)^(b3<<8)^b4); - if(so._connect(clidatasock, (struct sockaddr *)¶m->sinc, sasize)) { + *SAPORT(¶m->sincr) = htons((unsigned short)((b5<<8)^b6)); + sasize = sizeof(param->sincr); + if(so._connect(clidatasock, (struct sockaddr *)¶m->sincr, sasize)) { so._closesocket(clidatasock); clidatasock = INVALID_SOCKET; RETURN(826); @@ -203,8 +206,8 @@ void * ftpprchild(struct clientparam* param) { if(res != 1) { RETURN(857); } - sasize = sizeof(struct sockaddr_in); - ss = so._accept(clidatasock, (struct sockaddr *)¶m->sinc, &sasize); + sasize = sizeof(param->sincr); + ss = so._accept(clidatasock, (struct sockaddr *)¶m->sincr, &sasize); if (ss == INVALID_SOCKET) { RETURN (858);} so._shutdown(clidatasock, SHUT_RDWR); so._closesocket(clidatasock); @@ -283,8 +286,8 @@ void * ftpprchild(struct clientparam* param) { if(status == 5) {RETURN (0);} if(i < 3) {RETURN (813);} } - sasize = sizeof(struct sockaddr_in); - if(so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize)){RETURN(819);} + sasize = sizeof(param->sincr); + if(so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sincr, &sasize)){RETURN(819);} if(req && (param->statscli64 || param->statssrv64)){ (*param->srv->logfunc)(param, (unsigned char *)req); } @@ -304,8 +307,8 @@ CLEANRET: so._shutdown(clidatasock, SHUT_RDWR); so._closesocket(clidatasock); } - sasize = sizeof(struct sockaddr_in); - so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sinc, &sasize); + sasize = sizeof(param->sincr); + so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sincr, &sasize); if(param->res != 0 || param->statscli64 || param->statssrv64 ){ (*param->srv->logfunc)(param, (unsigned char *)((req && (param->res > 802))? req:NULL)); } diff --git a/src/icqpr.c b/src/icqpr.c index 0cde9c0..04abaf6 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -105,7 +105,7 @@ static void addbuffer(int increment, struct clientparam * param, unsigned char * *buf_p = newbuf; *bufsize_p = bufsize; } - if(increment) len = sockrecvfrom(param->remsock, ¶m->sins, *buf_p + *length_p, increment, conf.timeouts[STRING_S]*1000); + if(increment) len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, *buf_p + *length_p, increment, conf.timeouts[STRING_S]*1000); if(len > 0) { *length_p += len; param->nreads++; diff --git a/src/proxy.c b/src/proxy.c index 6a1a594..7d0f9d3 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -831,14 +831,12 @@ for(;;){ sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 "); gethostname((char *)(buf+strlen((char *)buf)), 256); sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); - if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + strlen((char *)buf), 64); + if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 64); else { unsigned long tmp; - tmp = param->sinc.sin_addr.s_addr; - param->sinc.sin_addr.s_addr = ((unsigned long)myrand(param, sizeof(struct clientparam))<<16)^(unsigned long)rand(); - myinet_ntop(*SAFAMILY(¶m->sinc), SAADDR(¶m->sinc), (char *)buf + strlen((char *)buf), 64); - param->sinc.sin_addr.s_addr = tmp; + tmp = ((unsigned long)myrand(param, sizeof(struct clientparam))<<16)^(unsigned long)rand(); + myinet_ntop(AF_INET, &tmp, (char *)buf + strlen((char *)buf), 64); } sprintf((char*)buf+strlen((char *)buf), "\r\n"); } diff --git a/src/proxy.h b/src/proxy.h index d539087..873b977 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -148,8 +148,8 @@ extern struct extparam conf; int sockmap(struct clientparam * param, int timeo); int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to); -int socksendto(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to); -int sockrecvfrom(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to); +int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to); +int sockrecvfrom(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to); int sockgetcharcli(struct clientparam * param, int timeosec, int timeousec); diff --git a/src/proxymain.c b/src/proxymain.c index a2df6a6..cae0081 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -190,9 +190,9 @@ int MODULEMAINFUNC (int argc, char** argv){ #ifdef STDMAIN #ifndef _WIN32 case 'I': - size = sizeof(defparam.sinc); - if(so._getsockname(0, (struct sockaddr*)&defparam.sinc, &size) || - defparam.sinc.sin_family != AF_INET) error = 1; + size = sizeof(defparam.sincl); + if(so._getsockname(0, (struct sockaddr*)&defparam.sincl, &size) || + defparam.sincl.sin_family != AF_INET) error = 1; else inetd = 1; break; @@ -311,8 +311,8 @@ int MODULEMAINFUNC (int argc, char** argv){ srvinit2(&srv, &defparam); + if(!*SAFAMILY(&srv.intsa)) *SAFAMILY(&srv.intsa) = AF_INET; if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port); - if(!defparam.sinc.sin_port) defparam.sinc.sin_port = htons(childdef.port); if(hostname)parsehostname(hostname, &defparam, childdef.port); @@ -374,9 +374,11 @@ int MODULEMAINFUNC (int argc, char** argv){ sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self()); (*srv.logfunc)(&defparam, buf); } - memset(&defparam.sinc, 0, sizeof(defparam.sinc)); + memset(&defparam.sincr, 0, sizeof(defparam.sincr)); + memset(&defparam.sincl, 0, sizeof(defparam.sincl)); memset(&defparam.sins, 0, sizeof(defparam.sins)); - *SAFAMILY(&defparam.sinc) = AF_INET; + *SAFAMILY(&defparam.sincr) = AF_INET; + *SAFAMILY(&defparam.sincl) = AF_INET; *SAFAMILY(&defparam.sins) = AF_INET; srv.fds.fd = sock; @@ -413,13 +415,19 @@ int MODULEMAINFUNC (int argc, char** argv){ } if((conf.paused != srv.version) || (error < 0)) break; if(!isudp){ - size = sizeof(defparam.sinc); - new_sock = so._accept(sock, (struct sockaddr*)&defparam.sinc, &size); + size = sizeof(defparam.sincr); + new_sock = so._accept(sock, (struct sockaddr*)&defparam.sincr, &size); if(new_sock == INVALID_SOCKET){ sprintf((char *)buf, "accept(): %s", strerror(errno)); if(!srv.silent)(*srv.logfunc)(&defparam, buf); continue; } + size = sizeof(defparam.sincl); + if(so._getsockname(new_sock, (struct sockaddr *)&defparam.sincl, &size)){ + sprintf((char *)buf, "getsockname(): %s", strerror(errno)); + if(!srv.silent)(*srv.logfunc)(&defparam, buf); + continue; + } #ifdef _WIN32 ioctlsocket(new_sock, FIONBIO, &ul); #else @@ -482,7 +490,8 @@ int MODULEMAINFUNC (int argc, char** argv){ } #endif pthread_mutex_unlock(&srv.counter_mutex); - memset(&defparam.sinc, 0, sizeof(defparam.sinc)); + memset(&defparam.sincl, 0, sizeof(defparam.sincl)); + memset(&defparam.sincr, 0, sizeof(defparam.sincr)); if(isudp) while(!srv.fds.events)usleep(SLEEPTIME); } @@ -519,7 +528,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ memset(param, 0, sizeof(struct clientparam)); param->srv = srv; param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET; - param->req.sin_family = param->sins.sin_family = param->sinc.sin_family = AF_INET; + *SAFAMILY(¶m->req) = *SAFAMILY(¶m->sins) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET; pthread_mutex_init(&srv->counter_mutex, NULL); memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); } @@ -538,8 +547,7 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); if(!*SAFAMILY(&srv->intsa)) *SAFAMILY(&srv->intsa) = AF_INET; - param->sinc.sin_addr.s_addr = ((struct sockaddr_in *)&srv->intsa)->sin_addr.s_addr; - param->sinc.sin_port = *SAPORT(&srv->intsa); + memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); if(!srv->extip) srv->extip = conf.extip; param->sins.sin_addr.s_addr = param->extip = srv->extip; if(!srv->extport) srv->extport = htons(conf.extport); diff --git a/src/smtpp.c b/src/smtpp.c index 8c17e73..9246117 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -83,7 +83,7 @@ int readdata (struct clientparam* param) { return -1; } #endif - socksendto(param->remsock, ¶m->sins, buf, i, conf.timeouts[STRING_S]); + socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf, i, conf.timeouts[STRING_S]); } if(i < 1) { myfree(buf); diff --git a/src/sockgetchar.c b/src/sockgetchar.c index 0041fdf..1000d2c 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -33,7 +33,7 @@ int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to){ } -int socksendto(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to){ +int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to){ int sent = 0; int res; struct pollfd fds; @@ -45,7 +45,7 @@ int socksendto(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int b res = so._poll(&fds, 1, to); if(res < 0 && (errno == EAGAIN || errno == EINTR)) continue; if(res < 1) break; - res = so._sendto(sock, buf + sent, bufsize - sent, 0, (struct sockaddr *)sin, sizeof(struct sockaddr_in)); + res = so._sendto(sock, buf + sent, bufsize - sent, 0, sin, SASIZE(sin)); if(res < 0) { if(errno != EAGAIN) break; continue; @@ -55,7 +55,7 @@ int socksendto(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int b return sent; } -int sockrecvfrom(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to){ +int sockrecvfrom(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to){ struct pollfd fds; SASIZETYPE sasize; int res; @@ -64,7 +64,7 @@ int sockrecvfrom(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int fds.events = POLLIN; if(conf.timetoexit) return EOF; if (so._poll(&fds, 1, to)<1) return 0; - sasize = sizeof(struct sockaddr_in); + sasize = SASIZE(sin); do { res = so._recvfrom(sock, buf, bufsize, 0, (struct sockaddr *)sin, &sasize); } while (res < 0 && (errno == EAGAIN || errno == EINTR)); @@ -83,7 +83,7 @@ int sockgetcharcli(struct clientparam * param, int timeosec, int timeousec){ return (int)param->clibuf[param->clioffset++]; } param->clioffset = param->cliinbuf = 0; - if ((len = sockrecvfrom(param->clisock, ¶m->sinc, param->clibuf, param->clibufsize, timeosec*1000 + timeousec))<=0) return EOF; + if ((len = sockrecvfrom(param->clisock, (struct sockaddr *)¶m->sincr, param->clibuf, param->clibufsize, timeosec*1000 + timeousec))<=0) return EOF; param->cliinbuf = len; param->clioffset = 1; return (int)*param->clibuf; @@ -103,7 +103,7 @@ int sockfillbuffcli(struct clientparam * param, unsigned long size, int timeosec } if(size <= param->cliinbuf) return size; size -= param->cliinbuf; - if((len = sockrecvfrom(param->clisock, ¶m->sinc, param->clibuf + param->cliinbuf, (param->clibufsize - param->cliinbuf) < size? param->clibufsize - param->cliinbuf:size, timeosec*1000)) > 0){ + if((len = sockrecvfrom(param->clisock, (struct sockaddr *)¶m->sincr, param->clibuf + param->cliinbuf, (param->clibufsize - param->cliinbuf) < size? param->clibufsize - param->cliinbuf:size, timeosec*1000)) > 0){ param->cliinbuf += len; } return param->cliinbuf; @@ -123,7 +123,7 @@ int sockfillbuffsrv(struct clientparam * param, unsigned long size, int timeosec } if(size <= param->srvinbuf) return size; size -= param->srvinbuf; - if((len = sockrecvfrom(param->remsock, ¶m->sinc, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ + if((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ param->srvinbuf += len; param->nreads++; param->statssrv64 += len; @@ -148,7 +148,7 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){ return (int)param->srvbuf[param->srvoffset++]; } param->srvoffset = param->srvinbuf = 0; - if ((len = sockrecvfrom(param->remsock, ¶m->sins, param->srvbuf, param->srvbufsize, timeosec*1000 + timeousec))<=0) return EOF; + if ((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, param->srvbuf, param->srvbufsize, timeosec*1000 + timeousec))<=0) return EOF; param->srvinbuf = len; param->srvoffset = 1; param->nreads++; diff --git a/src/sockmap.c b/src/sockmap.c index d2a2eca..24fe342 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -128,7 +128,7 @@ int sockmap(struct clientparam * param, int timeo){ if(param->bandlimfunc) { sleeptime = (*param->bandlimfunc)(param, param->srvinbuf - param->srvoffset, 0); } - res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver64 || (param->waitserver64 - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : (int)(param->waitserver64 - received), 0, (struct sockaddr*)¶m->sinc, sasize); + res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver64 || (param->waitserver64 - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : (int)(param->waitserver64 - received), 0, (struct sockaddr*)¶m->sincr, sasize); if(res < 0) { if(errno != EAGAIN) return 96; continue; @@ -171,7 +171,7 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "recv from client"); #endif - res = so._recvfrom(param->clisock, param->clibuf + param->cliinbuf, param->clibufsize - param->cliinbuf, 0, (struct sockaddr *)¶m->sinc, &sasize); + res = so._recvfrom(param->clisock, param->clibuf + param->cliinbuf, param->clibufsize - param->cliinbuf, 0, (struct sockaddr *)¶m->sincr, &sasize); if (res==0) { so._shutdown(param->clisock, SHUT_RDWR); so._closesocket(param->clisock); @@ -241,7 +241,7 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to client"); #endif - res = socksendto(param->clisock, ¶m->sinc, param->srvbuf + param->srvoffset, param->srvinbuf - param->srvoffset, conf.timeouts[STRING_S] * 1000); + res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, param->srvbuf + param->srvoffset, param->srvinbuf - param->srvoffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->srvoffset += res; param->statssrv64 += res; @@ -253,7 +253,7 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to server"); #endif - res = socksendto(param->remsock, ¶m->sins, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); + res = socksendto(param->remsock, (struct sockaddr *)¶m->sins, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->clioffset += res; param->statscli64 += res; diff --git a/src/socks.c b/src/socks.c index 9d980c5..6cdff57 100644 --- a/src/socks.c +++ b/src/socks.c @@ -28,7 +28,11 @@ void * sockschild(struct clientparam* param) { struct pollfd fds[3]; int ver=0; int havepass = 0; +#ifndef NOIPV6 + struct sockaddr_in6 sin; +#else struct sockaddr_in sin; +#endif int len; @@ -171,20 +175,18 @@ fprintf(stderr, "%s:%hu binded to communicate with server\n", fflush(stderr); #endif } - sasize = sizeof(struct sockaddr_in); + sasize = sizeof(param->sins); so._getsockname(param->remsock, (struct sockaddr *)¶m->sins, &sasize); if(command == 3) { param->ctrlsock = param->clisock; - param->clisock = so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + param->clisock = so._socket(SASOCK(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP); if(param->clisock == INVALID_SOCKET) {RETURN(11);} - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr; - sin.sin_port = htons(0); - if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(struct sockaddr_in))) {RETURN (12);} + memcpy(&sin, ¶m->sincl, sizeof(&sin)); + *SAPORT(&sin) = htons(0); + if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (12);} #if SOCKSTRACE > 0 -fprintf(stderr, "%s:%hu binded to communicate with client\n", - inet_ntoa(sin.sin_addr), - ntohs(sin.sin_port) +fprintf(stderr, "%hu binded to communicate with client\n", + ntohs(*SAPORT(&sin)) ); fflush(stderr); #endif @@ -195,7 +197,7 @@ fflush(stderr); CLEANRET: if(param->clisock != INVALID_SOCKET){ - sasize = sizeof(struct sockaddr_in); + sasize = sizeof(sin); if(command != 3) so._getsockname(param->remsock, (struct sockaddr *)&sin, &sasize); else so._getsockname(param->clisock, (struct sockaddr *)&sin, &sasize); #if SOCKSTRACE > 0 @@ -212,15 +214,15 @@ fflush(stderr); buf[1] = param->res%10; buf[2] = 0; buf[3] = 1; - memcpy(buf+4, &sin.sin_addr.s_addr, 4); - memcpy(buf+8, &sin.sin_port, 2); + memcpy(buf+4, SAADDR(&sin), 4); + memcpy(buf+8, SAPORT(&sin), 2); socksend((command == 3)?param->ctrlsock:param->clisock, buf, 10, conf.timeouts[STRING_S]); } else{ buf[0] = 0; buf[1] = 90 + (param->res%10); - memcpy(buf+2, &sin.sin_port, 2); - memcpy(buf+4, &sin.sin_addr.s_addr, 4); + memcpy(buf+2, SAPORT(&sin), 2); + memcpy(buf+4, SAADDR(&sin), 4); socksend(param->clisock, buf, 8, conf.timeouts[STRING_S]); } @@ -300,12 +302,12 @@ fflush(stderr); break; } if (fds[1].revents) { - sasize = sizeof(struct sockaddr_in); + sasize = sizeof(sin); if((len = so._recvfrom(param->clisock, buf, 65535, 0, (struct sockaddr *)&sin, &sasize)) <= 10) { param->res = 464; break; } - if(sin.sin_addr.s_addr != param->sinc.sin_addr.s_addr){ + if(SAADDRLEN(&sin) != SAADDRLEN(¶m->sincr) || memcmp(SAADDR(&sin), SAADDR(¶m->sincr), SAADDRLEN(&sin))){ param->res = 465; break; } @@ -335,7 +337,7 @@ fflush(stderr); sasize = sizeof(param->sins); if(len > (int)i){ - if(socksendto(param->remsock, ¶m->sins, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000) <= 0){ + if(socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000) <= 0){ param->res = 467; break; } @@ -371,7 +373,7 @@ fflush(stderr); memcpy(buf+4, &tsin.sin_addr.s_addr, 4); memcpy(buf+8, &tsin.sin_port, 2); sasize = sizeof(param->sins); - if(socksendto(param->clisock, &sin, buf, len + 10, conf.timeouts[SINGLEBYTE_L]*1000) <=0){ + if(socksendto(param->clisock, (struct sockaddr *)&sin, buf, len + 10, conf.timeouts[SINGLEBYTE_L]*1000) <=0){ param->res = 469; break; } diff --git a/src/structures.h b/src/structures.h index dc1c085..c44efd2 100644 --- a/src/structures.h +++ b/src/structures.h @@ -109,11 +109,13 @@ int #define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) #define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4) #define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET) +#define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) #else #define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port) #define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.a_addr) #define SAADDRLEN(sa) (4) #define SASOCK(sa) (PF_INET) +#define SASIZE(sa) (sizeof(struct sockaddr_in)) #endif typedef enum { @@ -431,8 +433,12 @@ struct clientparam { uint64_t maxtrafin64, maxtrafout64; - struct sockaddr_in sinc, - sins, +#ifndef NOIPV6 + struct sockaddr_in6 sincl, sincr; +#else + struct sockaddr_in sincl, sincr; +#endif + struct sockaddr_in sins, req; uint64_t statscli64, @@ -620,8 +626,8 @@ struct pluginlink { struct commands * commandhandlers; void * (*findbyname)(const char *name); int (*socksend)(SOCKET sock, unsigned char * buf, int bufsize, int to); - int (*socksendto)(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to); - int (*sockrecvfrom)(SOCKET sock, struct sockaddr_in * sin, unsigned char * buf, int bufsize, int to); + int (*socksendto)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to); + int (*sockrecvfrom)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to); int (*sockgetcharcli)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetcharsrv)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to); diff --git a/src/udppm.c b/src/udppm.c index 62dc9c8..e746540 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -49,7 +49,7 @@ void * udppmchild(struct clientparam* param) { RETURN (21); } param->cliinbuf = param->clioffset = 0; - i = sockrecvfrom(param->srv->srvsock, ¶m->sinc, param->clibuf, param->clibufsize, 0); + i = sockrecvfrom(param->srv->srvsock, (struct sockaddr *)¶m->sincr, param->clibuf, param->clibufsize, 0); if(i<=0){ param->srv->fds.events = POLLIN; RETURN (214); @@ -57,12 +57,12 @@ void * udppmchild(struct clientparam* param) { param->cliinbuf = i; #ifdef _WIN32 - if((param->clisock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { + if((param->clisock=so._socket(*SAFAMILY(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; ioctlsocket(param->clisock, FIONBIO, &ul); - size = sizeof(struct sockaddr_in); + size = sizeof(param->sins); if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sins, &size)) {RETURN(21);}; if(so._bind(param->clisock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) { RETURN(822); From 4fef3a1df020fb2909066f9adfe5dc31a6c47498 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 12 May 2014 00:21:22 +0400 Subject: [PATCH 020/122] More changes for IPv6 suppot +nbname auth removed --- src/3proxy.c | 52 +++++++++++++++++++--- src/auth.c | 111 ++++++++++++----------------------------------- src/datatypes.c | 61 ++++++++++---------------- src/ntlm.c | 4 +- src/plugins.c | 67 ++++++++++++++-------------- src/proxy.h | 1 - src/structures.h | 10 ++++- src/webadmin.c | 18 +++----- 8 files changed, 145 insertions(+), 179 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 751fcf6..bed4737 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1149,6 +1149,47 @@ static int h_nolog(int argc, unsigned char **argv){ return 0; } +int scanipl(unsigned char *arg, struct iplist *dst){ +#ifndef NOIPV6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + char * slash, *dash; + int masklen, addrlen; + if((slash = strchr(arg, '/'))) *slash = 0; + if((dash = strchr(arg,'-'))) *dash = 0; + + if(!getip46(46, arg, (struct sockaddr *)&sa)) return 1; + memcpy(&dst->ip_from, SAADDR(&sa), SAADDRLEN(&sa)); + dst->family = *SAFAMILY(&sa); + if(dash){ + if(!getip46(46, dash+1, (struct sockaddr *)&sa)) return 2; + memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa)); + return 0; + } + if(slash){ + addrlen = SAADDRLEN(&sa); + masklen = atoi(slash+1); + if(masklen >= 0 && masklen<(addrlen*8)){ + int i, nbytes = masklen / 8, nbits = masklen % 8; + + for(i = addrlen; i; i--){ + ((unsigned char *)&dst->ip_from)[i-1] = 0x00; + ((unsigned char *)&dst->ip_to)[i-1] = 0xff; + } + memcpy(&dst->ip_to, &dst->ip_from, addrlen - i); + for(;nbits;nbits--){ + ((unsigned char *)&dst->ip_from)[i-1] &= (0x01<<(nbits-1)); + ((unsigned char *)&dst->ip_to)[i-1] |= (0x01<<(nbits-1)); + } + return 0; + } + } + memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)); + return 0; +} + struct ace * make_ace (int argc, unsigned char ** argv){ struct ace * acl; unsigned char *arg; @@ -1195,12 +1236,9 @@ struct ace * make_ace (int argc, unsigned char ** argv){ return(NULL); } memset(ipl, 0, sizeof(struct iplist)); - if (!scanaddr(arg, &ipl->ip, &ipl->mask)) { - if((ipl->ip = getip(arg)) == 0){ - fprintf(stderr, "Invalid IP or CIDR, line %d\n", linenum); - return(NULL); - } - ipl->mask = 0xFFFFFFFF; + if (scanipl(arg, ipl)) { + fprintf(stderr, "Invalid IP or CIDR, line %d\n", linenum); + return(NULL); } } while((arg = (unsigned char *)strtok((char *)NULL, ","))); } @@ -1256,7 +1294,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ return(NULL); } memset(ipl, 0, sizeof(struct iplist)); - if (!scanaddr(arg, &ipl->ip, &ipl->mask)) { + if (scanipl(arg, ipl)) { fprintf(stderr, "Invalid IP or CIDR, line %d\n", linenum); return(NULL); } diff --git a/src/auth.c b/src/auth.c index c1f705d..b2bba6e 100644 --- a/src/auth.c +++ b/src/auth.c @@ -12,62 +12,6 @@ #define HEADERSIZE 57 #define RECORDSIZE 18 -unsigned char request[] = { - 0xa2, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x4b, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x21, - 0x00, 0x01}; - -unsigned char * getNetBIOSnamebyip(unsigned long ip){ - unsigned char buf[1024]; - struct sockaddr_in sins; - int res; - SOCKET sock; - unsigned char * username = NULL; - int i; - int j; - int nnames; - int type; - - if ( (sock=so._socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) == INVALID_SOCKET) return NULL; - memset(&sins, 0, sizeof(sins)); - sins.sin_family = AF_INET; - sins.sin_port = htons(0); - sins.sin_addr.s_addr = INADDR_ANY; - if(so._bind(sock,(struct sockaddr *)&sins,sizeof(sins))) { - so._closesocket(sock); - return NULL; - } - sins.sin_family = AF_INET; - sins.sin_addr.s_addr = ip; - sins.sin_port = htons(137); - res=socksendto(sock, (struct sockaddr*)&sins, request, sizeof(request), conf.timeouts[SINGLEBYTE_L]*1000); - if(res <= 0) { - so._closesocket(sock); - return NULL; - } - res = sockrecvfrom(sock, (struct sockaddr*)&sins, buf, sizeof(buf), conf.timeouts[SINGLEBYTE_L]*1000); - so._closesocket(sock); - if(res < (HEADERSIZE + RECORDSIZE)) { - return NULL; - } - nnames = buf[HEADERSIZE-1]; - if (res < (HEADERSIZE + (nnames * RECORDSIZE))) return NULL; - for (i = 0; i < nnames; i++){ - type = buf[HEADERSIZE + (i*RECORDSIZE) + 15]; - if( type == 3) { - for(j = 14; j && buf[HEADERSIZE + (i*RECORDSIZE) + j] == ' '; j--) - buf[HEADERSIZE + (i*RECORDSIZE) + j] = 0; - if(username)myfree(username); - username = (unsigned char *)mystrdup((char *)buf + HEADERSIZE + i*RECORDSIZE); - } - buf[HEADERSIZE + (i*RECORDSIZE) + 15] = 0; - } - return username; -} int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned long ip, unsigned short port){ unsigned char buf[1024]; @@ -362,6 +306,18 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ return redir?clientnegotiate(redir, param, targetip, targetport):0; } +int IPInentry(struct sockaddr *sa, struct iplist *ipentry){ + int i, addrlen; + unsigned char *ip, *ipf, *ipt; + ip = (unsigned char *)SAADDR(sa); + ipf = (unsigned char *)&ipentry->ip_from; + ipt = (unsigned char *)&ipentry->ip_to; + if(!sa || ! ipentry || *SAFAMILY(sa) != ipentry->family) return 0; + addrlen = SAADDRLEN(sa); + for(i=0; iipt[i]) return 0; + return 1; + +} int ACLmatches(struct ace* acentry, struct clientparam * param){ struct userlist * userentry; @@ -376,15 +332,14 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){ username = param->username?param->username:(unsigned char *)"-"; if(acentry->src) { for(ipentry = acentry->src; ipentry; ipentry = ipentry->next) -/* FIX IT !*/ - if(ipentry->ip == (*(unsigned long *)SAADDR(¶m->sincr) & ipentry->mask)) { + if(IPInentry((struct sockaddr *)¶m->sincr, ipentry)) { break; } - if(!ipentry) return 0; + if(!ipentry) return 0; } if((acentry->dst && param->req.sin_addr.s_addr) || (acentry->dstnames && param->hostname)) { for(ipentry = acentry->dst; ipentry; ipentry = ipentry->next) - if(ipentry->ip == (param->req.sin_addr.s_addr & ipentry->mask)) { + if(IPInentry((struct sockaddr *)¶m->req, ipentry)) { break; } if(!ipentry) { @@ -647,7 +602,11 @@ struct authcache { char * username; char * password; time_t expires; - unsigned long ip; +#ifndef NOIPV6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif struct authcache *next; } *authc = NULL; @@ -674,8 +633,7 @@ int cacheauth(struct clientparam * param){ } if(((!(conf.authcachetype&2)) || (param->username && ac->username && !strcmp(ac->username, param->username))) && -/* FIX IT */ - ((!(conf.authcachetype&1)) || ac->ip == *(unsigned long *)SAADDR(¶m->sincr)) && + ((!(conf.authcachetype&1)) || (*SAFAMILY(&ac->sa) == *SAFAMILY(¶m->sincr) && !memcmp(SAADDR(&ac->sa), ¶m->sincr, SAADDRLEN(&ac->sa)))) && (!(conf.authcachetype&4) || (ac->password && param->password && !strcmp(ac->password, param->password)))) { if(param->username){ myfree(param->username); @@ -709,8 +667,7 @@ int doauth(struct clientparam * param){ pthread_mutex_lock(&hash_mutex); for(ac = authc; ac; ac = ac->next){ if((!(conf.authcachetype&2) || !strcmp(ac->username, param->username)) && -/* FIX IT */ - (!(conf.authcachetype&1) || ac->ip == *(unsigned long *)SAADDR(¶m->sincr)) && + (!(conf.authcachetype&1) || (*SAFAMILY(&ac->sa) == *SAFAMILY(¶m->sincr) && !memcmp(SAADDR(&ac->sa), ¶m->sincr, SAADDRLEN(&ac->sa)))) && (!(conf.authcachetype&4) || (ac->password && !strcmp(ac->password, param->password)))) { ac->expires = conf.time + conf.authcachetime; if(strcmp(ac->username, param->username)){ @@ -723,8 +680,7 @@ int doauth(struct clientparam * param){ ac->password = mystrdup(param->password); myfree(tmp); } -/* FIX IT */ - ac->ip = *(unsigned long *)SAADDR(¶m->sincr); + memcpy(&ac->sa, ¶m->sincr, SASIZE(¶m->sincr)); break; } } @@ -733,8 +689,7 @@ int doauth(struct clientparam * param){ if(ac){ ac->expires = conf.time + conf.authcachetime; ac->username = mystrdup(param->username); -/* FIX IT */ - ac->ip = *(unsigned long *)SAADDR(¶m->sincr); + memcpy(&ac->sa, ¶m->sincr, SASIZE(¶m->sincr)); ac->password = NULL; if((conf.authcachetype&4) && param->password) ac->password = mystrdup(param->password); } @@ -769,15 +724,6 @@ int userauth(struct clientparam * param){ return (param->username)? 0:4; } -int nbnameauth(struct clientparam * param){ -/* FIX IT */ - unsigned char * name = getNetBIOSnamebyip(*(unsigned long *)SAADDR(¶m->sincr)); - - if (param->username) myfree (param->username); - param->username = name; - return name? 0:4; -} - int dnsauth(struct clientparam * param){ char buf[32]; /* FIX IT */ @@ -862,11 +808,10 @@ struct auth authfuncs[] = { {authfuncs+1, NULL, NULL, ""}, {authfuncs+2, ipauth, NULL, "iponly"}, {authfuncs+3, userauth, checkACL, "useronly"}, - {authfuncs+4, nbnameauth, checkACL, "nbname"}, - {authfuncs+5, dnsauth, checkACL, "dnsname"}, - {authfuncs+6, strongauth, checkACL, "strong"}, - {authfuncs+7, cacheauth, checkACL, "cache"}, - {authfuncs+8, NULL, NULL, "none"}, + {authfuncs+4, dnsauth, checkACL, "dnsname"}, + {authfuncs+5, strongauth, checkACL, "strong"}, + {authfuncs+6, cacheauth, checkACL, "cache"}, + {authfuncs+7, NULL, NULL, "none"}, {NULL, NULL, NULL, ""} }; diff --git a/src/datatypes.c b/src/datatypes.c index 5d9a681..d5dea1d 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -57,19 +57,14 @@ static void pr_datetime(struct node *node, CBFUNC cbf, void*cb){ } } -int ipprint(char *buf, unsigned uu){ - unsigned u = ntohl(uu); - - return sprintf(buf, "%u.%u.%u.%u", - ((u&0xFF000000)>>24), - ((u&0x00FF0000)>>16), - ((u&0x0000FF00)>>8), - ((u&0x000000FF))); -} - static void pr_ip(struct node *node, CBFUNC cbf, void*cb){ char buf[16]; - if(node->value)(*cbf)(cb, buf, ipprint(buf, *(unsigned *)node -> value)); + if(node->value)(*cbf)(cb, buf, myinet_ntop(AF_INET, node -> value, buf, 4)); +} + +static void pr_ip6(struct node *node, CBFUNC cbf, void*cb){ + char buf[64]; + if(node->value)(*cbf)(cb, buf, myinet_ntop(AF_INET6, node -> value, buf, 16)); } static void pr_sa(struct node *node, CBFUNC cbf, void*cb){ @@ -243,9 +238,22 @@ static void pr_userlist(struct node *node, CBFUNC cbf, void*cb){ } } +int printiple(char *buf, struct iplist* ipl){ + int addrlen = (ipl->family == AF_INET6)?16:4, i; + i = myinet_ntop(ipl->family, &ipl->ip_from, buf, addrlen); + if(memcmp(&ipl->ip_from, &ipl->ip_to, addrlen)){ + buf[i++] = '-'; + i += myinet_ntop(ipl->family, &ipl->ip_from, buf+i, addrlen); + } + if(ipl->next){ + buf[i++] = ','; + buf[i++] = ' '; + } + return i; +} + static void pr_iplist(struct node *node, CBFUNC cbf, void*cb){ - char buf[20]; - int i; + char buf[128]; struct iplist *il = (struct iplist *)node->value; if(!il) { @@ -253,10 +261,7 @@ static void pr_iplist(struct node *node, CBFUNC cbf, void*cb){ return; } for(; il; il = il->next){ - i = ipprint(buf, il->ip); - i += cidrprint(buf+i, il->mask); - if(il->next)buf[i++] = ','; - (*cbf)(cb, buf, i); + (*cbf)(cb, buf, printiple(buf, il)); } } @@ -277,18 +282,6 @@ static void * ef_iplist_next(struct node *node){ return (((struct iplist *)node->value) -> next); } -static void * ef_iplist_ip(struct node *node){ - return &(((struct iplist *)node->value) -> ip); -} - -static void * ef_iplist_cidr(struct node *node){ - return &(((struct iplist *)node->value) -> mask); -} - -static void * ef_iplist_mask(struct node *node){ - return &(((struct iplist *)node->value) -> mask); -} - static void * ef_userlist_next(struct node * node){ return (((struct userlist *)node->value) -> next); } @@ -519,7 +512,6 @@ static void * ef_server_auth(struct node * node){ AUTHFUNC af = ((struct srvparam *)node->value) -> authfunc; if(af == alwaysauth) return "none"; - if(af == nbnameauth) return "nbname"; if(af == ipauth) return "iponly"; if(af == strongauth) return "strong"; return "uknown"; @@ -703,13 +695,6 @@ static struct property prop_pwlist[] = { {NULL, "next", ef_pwlist_next, TYPE_PWLIST, "next"} }; -static struct property prop_iplist[] = { - {prop_iplist + 1, "ip", ef_iplist_ip, TYPE_IP, "ip address"}, - {prop_iplist + 2, "cidr", ef_iplist_cidr, TYPE_CIDR, "ip mask length"}, - {prop_iplist + 3, "mask", ef_iplist_mask, TYPE_IP, "ip mask"}, - {NULL, "next", ef_iplist_next, TYPE_IPLIST, "next"} -}; - static struct property prop_chain[] = { {prop_chain + 1, "ip", ef_chain_ip, TYPE_IP, "parent ip address"}, {prop_chain + 2, "port", ef_chain_port, TYPE_PORT, "parent port"}, @@ -829,7 +814,7 @@ struct datatype datatypes[64] = { {"operations", NULL, pr_operations, NULL}, {"rotation", NULL, pr_rotation, NULL}, {"portlist", ef_portlist_next, pr_portlist, prop_portlist}, - {"iplist", ef_iplist_next, pr_iplist, prop_iplist}, + {"iplist", ef_iplist_next, pr_iplist, NULL}, {"userlist", ef_userlist_next, pr_userlist, prop_userlist}, {"pwlist", ef_pwlist_next, NULL, prop_pwlist}, {"chain", ef_chain_next, NULL, prop_chain}, diff --git a/src/ntlm.c b/src/ntlm.c index 9f57c92..c13f62c 100644 --- a/src/ntlm.c +++ b/src/ntlm.c @@ -81,8 +81,8 @@ void genchallenge(struct clientparam *param, char * challenge, char *buf){ chal->flags[3] = 0xA0; text2unicode(hostname, (char *)chal->data, 64); time((time_t *)challenge); - memcpy(challenge+4, ¶m->sinc.sin_addr.s_addr, 4); - challenge[1]^=param->sinc.sin_port; + memcpy(challenge+4, SAADDR(¶m->sincr), 4); + challenge[1]^=*SAPORT(¶m->sincr); for(i = 0; i < 8; i++) challenge[i] ^= myrand(challenge, 8); memcpy(chal->challenge, challenge, 8); en64((unsigned char *)tmpbuf, (unsigned char *)buf, (int)((unsigned char *)chal->data - (unsigned char *)chal) + len); diff --git a/src/plugins.c b/src/plugins.c index 6c21cf4..0891cb0 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -44,40 +44,39 @@ struct symbol symbols[] = { {symbols+16, "trafcountfunc", (void *) trafcountfunc}, {symbols+17, "alwaysauth", (void *) alwaysauth}, {symbols+18, "ipauth", (void *) ipauth}, - {symbols+19, "nbnameauth", (void *) nbnameauth}, - {symbols+20, "strongauth", (void *) strongauth}, - {symbols+21, "checkACL", (void *) checkACL}, - {symbols+22, "nametohash", (void *) nametohash}, - {symbols+23, "hashindex", (void *) hashindex}, - {symbols+24, "nservers", (void *) nservers}, - {symbols+25, "udpresolve", (void *) udpresolve}, - {symbols+26, "bandlim_mutex", (void *) &bandlim_mutex}, - {symbols+27, "tc_mutex", (void *) &tc_mutex}, - {symbols+28, "hash_mutex", (void *) &hash_mutex}, - {symbols+29, "pwl_mutex", (void *) &pwl_mutex}, - {symbols+30, "linenum", (void *) &linenum}, - {symbols+31, "proxy_stringtable", (void *) proxy_stringtable}, - {symbols+32, "en64", (void *) en64}, - {symbols+33, "de64", (void *) de64}, - {symbols+34, "tohex", (void *) tohex}, - {symbols+35, "fromhex", (void *) fromhex}, - {symbols+36, "dnspr", (void *) dnsprchild}, - {symbols+37, "pop3p", (void *) pop3pchild}, - {symbols+38, "proxy", (void *) proxychild}, - {symbols+39, "socks", (void *) sockschild}, - {symbols+40, "tcppm", (void *) tcppmchild}, - {symbols+41, "udppm", (void *) udppmchild}, - {symbols+42, "admin", (void *) adminchild}, - {symbols+43, "ftppr", (void *) ftpprchild}, - {symbols+44, "smtpp", (void *) smtppchild}, - {symbols+45, "icqpr", (void *) icqprchild}, - {symbols+46, "msnpr", (void *) msnprchild}, - {symbols+47, "authfuncs", (void *) &authfuncs}, - {symbols+48, "commandhandlers", (void *) &commandhandlers}, - {symbols+49, "decodeurl", (void *) decodeurl}, - {symbols+50, "parsestr", (void *) parsestr}, - {symbols+51, "make_ace", (void *) make_ace}, - {symbols+52, "freeacl", (void *) freeacl}, + {symbols+19, "strongauth", (void *) strongauth}, + {symbols+20, "checkACL", (void *) checkACL}, + {symbols+21, "nametohash", (void *) nametohash}, + {symbols+22, "hashindex", (void *) hashindex}, + {symbols+23, "nservers", (void *) nservers}, + {symbols+24, "udpresolve", (void *) udpresolve}, + {symbols+25, "bandlim_mutex", (void *) &bandlim_mutex}, + {symbols+26, "tc_mutex", (void *) &tc_mutex}, + {symbols+27, "hash_mutex", (void *) &hash_mutex}, + {symbols+28, "pwl_mutex", (void *) &pwl_mutex}, + {symbols+29, "linenum", (void *) &linenum}, + {symbols+30, "proxy_stringtable", (void *) proxy_stringtable}, + {symbols+31, "en64", (void *) en64}, + {symbols+32, "de64", (void *) de64}, + {symbols+33, "tohex", (void *) tohex}, + {symbols+34, "fromhex", (void *) fromhex}, + {symbols+35, "dnspr", (void *) dnsprchild}, + {symbols+36, "pop3p", (void *) pop3pchild}, + {symbols+37, "proxy", (void *) proxychild}, + {symbols+38, "socks", (void *) sockschild}, + {symbols+39, "tcppm", (void *) tcppmchild}, + {symbols+40, "udppm", (void *) udppmchild}, + {symbols+41, "admin", (void *) adminchild}, + {symbols+42, "ftppr", (void *) ftpprchild}, + {symbols+43, "smtpp", (void *) smtppchild}, + {symbols+44, "icqpr", (void *) icqprchild}, + {symbols+45, "msnpr", (void *) msnprchild}, + {symbols+46, "authfuncs", (void *) &authfuncs}, + {symbols+47, "commandhandlers", (void *) &commandhandlers}, + {symbols+48, "decodeurl", (void *) decodeurl}, + {symbols+49, "parsestr", (void *) parsestr}, + {symbols+50, "make_ace", (void *) make_ace}, + {symbols+51, "freeacl", (void *) freeacl}, {NULL, "", NULL} }; diff --git a/src/proxy.h b/src/proxy.h index 873b977..3dfaa22 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -174,7 +174,6 @@ int init_sql(char * s); void close_sql(); #endif int doconnect(struct clientparam * param); -int nbnameauth(struct clientparam * param); int alwaysauth(struct clientparam * param); int ipauth(struct clientparam * param); int doauth(struct clientparam * param); diff --git a/src/structures.h b/src/structures.h index c44efd2..ea59ae3 100644 --- a/src/structures.h +++ b/src/structures.h @@ -170,8 +170,14 @@ struct auth { struct iplist { struct iplist *next; - unsigned long ip; - unsigned long mask; + int family; +#ifndef NOIPV6 + struct in6_addr ip_from; + struct in6_addr ip_to; +#else + struct in_addr ip_from; + struct in_addr ip_to; +#endif }; struct portlist { diff --git a/src/webadmin.c b/src/webadmin.c index a4e6760..8a41bd6 100644 --- a/src/webadmin.c +++ b/src/webadmin.c @@ -319,21 +319,15 @@ static int printuserlist(char *buf, int bufsize, struct userlist* ul, char * del return printed; } + +int printiple(char *buf, struct iplist* ipl); + static int printiplist(char *buf, int bufsize, struct iplist* ipl, char * delim){ int printed = 0; for(; ipl; ipl = ipl->next){ - if(printed > (bufsize - 64)) break; - printed += sprintf(buf+printed, "%u.%u.%u.%u mask %u.%u.%u.%u%s", - (unsigned)(ntohl(ipl->ip)&0xff000000)>>24, - (unsigned)(ntohl(ipl->ip)&0x00ff0000)>>16, - (unsigned)(ntohl(ipl->ip)&0x0000ff00)>>8, - (unsigned)(ntohl(ipl->ip)&0x000000ff), - (unsigned)(ntohl(ipl->mask)&0xff000000)>>24, - (unsigned)(ntohl(ipl->mask)&0x00ff0000)>>16, - (unsigned)(ntohl(ipl->mask)&0x0000ff00)>>8, - (unsigned)(ntohl(ipl->mask)&0x000000ff), - ipl->next?delim:""); - if(printed > (bufsize - 64)) { + if(printed > (bufsize - 128)) break; + printed += printiple(buf+printed, ipl); + if(printed > (bufsize - 128)) { printed += sprintf(buf+printed, "..."); break; } From 7ca32fc940ce0c00453c665ed795db77e515069a Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 11 Jun 2014 00:57:18 +0400 Subject: [PATCH 021/122] overlapped memcpy replaced with memmove --- src/proxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxy.c b/src/proxy.c index 7d0f9d3..1889222 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -339,7 +339,7 @@ for(;;){ if(!isconnect){ if(se==sg)*se-- = ' '; *se = '/'; - memcpy(ss, se, i - (se - sb) + 1); + memmove(ss, se, i - (se - sb) + 1); } } reqlen = i = (int)strlen((char *)buf); From 7bae6c45258d3b2ace3f77acb144fa7f07234134 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 11 Jun 2014 01:26:07 +0400 Subject: [PATCH 022/122] resolving compilation issues for *nix --- src/proxy.h | 2 +- src/proxymain.c | 2 +- src/structures.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/proxy.h b/src/proxy.h index 3dfaa22..3c689d3 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -183,7 +183,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask); -int myinet_ntop(int af, const void *src, char *dst, socklen_t size); +int myinet_ntop(int af, void *src, char *dst, socklen_t size); extern unsigned long nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); diff --git a/src/proxymain.c b/src/proxymain.c index cae0081..ad69314 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -192,7 +192,7 @@ int MODULEMAINFUNC (int argc, char** argv){ case 'I': size = sizeof(defparam.sincl); if(so._getsockname(0, (struct sockaddr*)&defparam.sincl, &size) || - defparam.sincl.sin_family != AF_INET) error = 1; + SAFAMILY(&defparam.sincl) != AF_INET) error = 1; else inetd = 1; break; diff --git a/src/structures.h b/src/structures.h index ea59ae3..5195131 100644 --- a/src/structures.h +++ b/src/structures.h @@ -637,7 +637,7 @@ struct pluginlink { int (*sockgetcharcli)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetcharsrv)(struct clientparam * param, int timeosec, int timeousec); int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to); - int (*myinet_ntop)(int af, const void *src, char *dst, socklen_t size); + int (*myinet_ntop)(int af, void *src, char *dst, socklen_t size); int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec); int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format); int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask); From 8975b00cce0b168252fb28309454a3e3076e60ec Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 11 Jun 2014 01:54:25 +0400 Subject: [PATCH 023/122] better EINTR handling --- src/sockgetchar.c | 2 +- src/sockmap.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sockgetchar.c b/src/sockgetchar.c index 1000d2c..906a4bd 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -47,7 +47,7 @@ int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufs if(res < 1) break; res = so._sendto(sock, buf + sent, bufsize - sent, 0, sin, SASIZE(sin)); if(res < 0) { - if(errno != EAGAIN) break; + if(errno != EAGAIN && errno != EINTR) break; continue; } sent += res; diff --git a/src/sockmap.c b/src/sockmap.c index 24fe342..5626d3d 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -130,7 +130,8 @@ int sockmap(struct clientparam * param, int timeo){ } res = so._sendto(param->clisock, param->srvbuf + param->srvoffset,(!param->waitserver64 || (param->waitserver64 - received) > (param->srvinbuf - param->srvoffset))? param->srvinbuf - param->srvoffset : (int)(param->waitserver64 - received), 0, (struct sockaddr*)¶m->sincr, sasize); if(res < 0) { - if(errno != EAGAIN) return 96; + if(errno != EAGAIN && errno != EINTR) return 96; + if(errno == EINTR) usleep(SLEEPTIME); continue; } param->srvoffset += res; @@ -155,7 +156,8 @@ int sockmap(struct clientparam * param, int timeo){ } res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient64 || (param->waitclient64 - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : (int)(param->waitclient64 - sent), 0, (struct sockaddr*)¶m->sins, sasize); if(res < 0) { - if(errno != EAGAIN) return 97; + if(errno != EAGAIN && errno != EINTR) return 97; + if(errno == EINTR) usleep(SLEEPTIME); continue; } param->clioffset += res; @@ -180,7 +182,8 @@ int sockmap(struct clientparam * param, int timeo){ } else { if (res < 0){ - if( errno != EAGAIN) return (94); + if(errno != EAGAIN && errno != EINTR) return 94; + if(errno == EINTR) usleep(SLEEPTIME); continue; } param->cliinbuf += res; @@ -210,7 +213,8 @@ int sockmap(struct clientparam * param, int timeo){ } else { if (res < 0){ - if( errno != EAGAIN) return (93); + if(errno != EAGAIN && errno != EINTR) return 93; + if(errno == EINTR) usleep(SLEEPTIME); continue; } param->srvinbuf += res; From 5cccf7cbdd80ecea7e6f1f6c8c8c93e16e698489 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 28 Jun 2014 17:29:26 +0400 Subject: [PATCH 024/122] Do not ignore version.h version.h is required to build from sources Conflicts: .gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index cf580e3..12689cb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,6 @@ tmp/ *.swp *.o *.idb -Changelog -src/version.h src/res version.c 3proxy.res From 9416012a011eed1f7d433fab829f3843793ce5a3 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 1 Jul 2014 19:01:28 +0200 Subject: [PATCH 025/122] Fix some awkward NOIPV6 typoes and ommissions --- src/datatypes.c | 2 +- src/structures.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/datatypes.c b/src/datatypes.c index d5dea1d..074b62c 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -69,7 +69,7 @@ static void pr_ip6(struct node *node, CBFUNC cbf, void*cb){ static void pr_sa(struct node *node, CBFUNC cbf, void*cb){ #ifdef NOIPV6 - if(node->value)return pr_ip(node, &((struct sockaddr_in *)node->value)->sin_addr.s_addr) + if(node->value)return pr_ip(node, cbf, cb); #else char buf[64]; buf[0] = '['; diff --git a/src/structures.h b/src/structures.h index 5195131..3b25c06 100644 --- a/src/structures.h +++ b/src/structures.h @@ -112,7 +112,7 @@ int #define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) #else #define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port) -#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.a_addr) +#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) #define SAADDRLEN(sa) (4) #define SASOCK(sa) (PF_INET) #define SASIZE(sa) (sizeof(struct sockaddr_in)) @@ -359,7 +359,7 @@ struct srvparam { #ifndef NOIPV6 struct sockaddr_in6 intsa; #else - struct sockaddr_in intsa + struct sockaddr_in intsa; #endif unsigned long extip; pthread_mutex_t counter_mutex; @@ -487,7 +487,7 @@ struct extparam { #ifndef NOIPV6 struct sockaddr_in6 intsa; #else - struct sockaddr_in intsa + struct sockaddr_in intsa; #endif unsigned long extip; unsigned short extport; From 6b579b8190b25a3c2edbc521ba38c73707b01c10 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 1 Jul 2014 19:08:31 +0200 Subject: [PATCH 026/122] Communicate SOCKS error states properly This used to look pretty random :( Try to keep the last decimal digits of internal errors sensible for v5 error codes. For most cases we can't really do much better than using the value of one. One specific code paths where we can return something more useful is the authentication, where we not communicate the underlying error code or signal an ACL denial. As for v4, there's not really much space to be too smart as only the code of 91 is meaningful. Therefore we limit the last digit to zero and one now. --- src/socks.c | 66 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/socks.c b/src/socks.c index 6cdff57..a48ffbf 100644 --- a/src/socks.c +++ b/src/socks.c @@ -48,29 +48,29 @@ void * sockschild(struct clientparam* param) { if(ver == 5){ if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} /* nmethods */ for (; i; i--) { - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(442);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} if (res == 2 && !param->srv->nouser) { havepass = res; } } buf[0] = 5; buf[1] = havepass; - if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(402);} + if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(401);} if (havepass) { if (((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_L], 0))) != 1) { RETURN(412); } - if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(443);} - if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(444);}; + if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} + if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(441);}; buf[i] = 0; if(!param->username)param->username = (unsigned char *)mystrdup((char *)buf); if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(445);} - if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(446);}; + if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(441);}; buf[i] = 0; if(!param->password)param->password = (unsigned char *)mystrdup((char *)buf); buf[0] = 1; buf[1] = 0; - if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(402);} + if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(481);} } if ((c = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_L], 0)) != 5) { RETURN(421); @@ -82,9 +82,9 @@ void * sockschild(struct clientparam* param) { c = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0); /* atype */ } else { - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(448);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[0] = (unsigned char) res; - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(449);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[1] = (unsigned char) res; param->sins.sin_port = param->req.sin_port = *(unsigned short*)buf; c = 1; @@ -93,19 +93,19 @@ void * sockschild(struct clientparam* param) { switch(c) { case 1: for (i = 0; i<4; i++){ - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(450);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[i] = (unsigned char)res; } param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr = *(unsigned long *)buf; if(command==1 && !param->req.sin_addr.s_addr) { - RETURN(422); + RETURN(421); } myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + strlen((char *)buf), 64); break; case 3: if ((size = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} /* nmethods */ for (i=0; ihostname)myfree(param->hostname); param->hostname = (unsigned char *)mystrdup((char *)buf); if (ver == 5) { - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(453);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[0] = (unsigned char) res; - if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(454);} + if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[1] = (unsigned char) res; param->sins.sin_port = param->req.sin_port = *(unsigned short*)buf; } @@ -139,7 +139,7 @@ void * sockschild(struct clientparam* param) { param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr = getip(buf); } } - if(command == 1 && !param->req.sin_port) {RETURN(424);} + if(command == 1 && !param->req.sin_port) {RETURN(421);} param->sins.sin_family = AF_INET; switch(command) { case 1: @@ -161,12 +161,38 @@ void * sockschild(struct clientparam* param) { RETURN(997); } - if((res = (*param->srv->authfunc)(param))) {RETURN(res);} + errno = 0; + if((res = (*param->srv->authfunc)(param))) { + res *= 10; + switch (errno) { + /* If authfunc failed but errno stays intacts we assume ACL denied the access, + * otherwise we do our best to pick a good error code for SOCKSv5. */ + case 0: + res += 2; /* connection not allowed by ruleset */ + break; + case ENETUNREACH: + res += 3; /* Network unreachable */ + break; + case EHOSTUNREACH: + res += 4; /* Host unreachable */ + break; + case ECONNREFUSED: + res += 5; /* Connection refused */ + break; + case EPFNOSUPPORT: + case EAFNOSUPPORT: + res += 8; /* Address type not supported */ + break; + default: + res += 1; + } + RETURN(res); + } if(command > 1) { if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) { param->sins.sin_port = 0; - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins)))RETURN (12); + if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins)))RETURN (11); #if SOCKSTRACE > 0 fprintf(stderr, "%s:%hu binded to communicate with server\n", inet_ntoa(param->sins.sin_addr), @@ -183,7 +209,7 @@ fflush(stderr); if(param->clisock == INVALID_SOCKET) {RETURN(11);} memcpy(&sin, ¶m->sincl, sizeof(&sin)); *SAPORT(&sin) = htons(0); - if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (12);} + if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (11);} #if SOCKSTRACE > 0 fprintf(stderr, "%hu binded to communicate with client\n", ntohs(*SAPORT(&sin)) @@ -220,7 +246,7 @@ fflush(stderr); } else{ buf[0] = 0; - buf[1] = 90 + (param->res%10); + buf[1] = 90 + !!(param->res%10); memcpy(buf+2, SAPORT(&sin), 2); memcpy(buf+4, SAADDR(&sin), 4); socksend(param->clisock, buf, 8, conf.timeouts[STRING_S]); @@ -329,7 +355,7 @@ fflush(stderr); param->sins.sin_addr.s_addr = getip(buf+4); break; default: - RETURN(996); + RETURN(997); } memcpy(¶m->sins.sin_port, buf+i, 2); From 1f5198a238aa0d3c4d309e16a42556f52be62dff Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 1 Jul 2014 21:31:57 +0400 Subject: [PATCH 027/122] Keep 2-digit error codes for socket operations 2 digit codes are common for all modules, should not be changed --- src/socks.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/socks.c b/src/socks.c index a48ffbf..184cc5c 100644 --- a/src/socks.c +++ b/src/socks.c @@ -192,7 +192,7 @@ void * sockschild(struct clientparam* param) { if(command > 1) { if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) { param->sins.sin_port = 0; - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins)))RETURN (11); + if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins)))RETURN (12); #if SOCKSTRACE > 0 fprintf(stderr, "%s:%hu binded to communicate with server\n", inet_ntoa(param->sins.sin_addr), @@ -209,7 +209,7 @@ fflush(stderr); if(param->clisock == INVALID_SOCKET) {RETURN(11);} memcpy(&sin, ¶m->sincl, sizeof(&sin)); *SAPORT(&sin) = htons(0); - if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (11);} + if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (12);} #if SOCKSTRACE > 0 fprintf(stderr, "%hu binded to communicate with client\n", ntohs(*SAPORT(&sin)) From ce6c2a069ccc90c59a50abda2ac18ac2ff422801 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 1 Jul 2014 18:57:57 +0200 Subject: [PATCH 028/122] Don't pad the text address with the binary form The buf gets copied to hostname and is present verbatim in logs looking like pure random garbage. Moreover you can't really strlen() it. This was likely some silly typo in inet_ntoa -> inet_ntop conversion for ipv6, since it used to be correct before. --- src/socks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socks.c b/src/socks.c index 184cc5c..68c3959 100644 --- a/src/socks.c +++ b/src/socks.c @@ -100,7 +100,7 @@ void * sockschild(struct clientparam* param) { if(command==1 && !param->req.sin_addr.s_addr) { RETURN(421); } - myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + strlen((char *)buf), 64); + myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf, 64); break; case 3: if ((size = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} /* nmethods */ From f8cefb989cacb18a31b47e9881ce28b41b73371a Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 1 Jul 2014 18:53:55 +0200 Subject: [PATCH 029/122] Try to use stdint.h with gcc <= 4.4 There's no way to tell whether the architecture has its stdint.h, as __UINT_FAST64_TYPE__ built in define didn't exist yet. Redefining the types would break the build, and chances are we're not on some exotic architecture where stdint would be missing, so let's assume it exists. --- src/pstdint.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pstdint.h b/src/pstdint.h index 00fc1fc..41aa44b 100644 --- a/src/pstdint.h +++ b/src/pstdint.h @@ -191,7 +191,7 @@ * do nothing else. On the Mac OS X version of gcc this is _STDINT_H_. */ -#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) )) && !defined (_PSTDINT_H_INCLUDED) +#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 4)) )) && !defined (_PSTDINT_H_INCLUDED) #include #define _PSTDINT_H_INCLUDED # ifndef PRINTF_INT64_MODIFIER From 085b47d64ec401e1a96792c8a10ce5a174454cd3 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 3 Jul 2014 03:40:16 +0400 Subject: [PATCH 030/122] Fix compatibility issues ! avoid errno usage due to compatibility issues (and never use errno as a lvalue). socks changed to use internal error codes instead. ! NOIPV6 compilation issues solved ! -lite version is switched to NOIPV6 --- Makefile.win | 2 +- src/socks.c | 37 +++++++++++-------------------------- src/structures.h | 2 -- src/version.h | 2 ++ 4 files changed, 14 insertions(+), 29 deletions(-) create mode 100644 src/version.h diff --git a/Makefile.win b/Makefile.win index 39882bc..7a1870d 100644 --- a/Makefile.win +++ b/Makefile.win @@ -11,7 +11,7 @@ BUILDDIR = ../bin/ CC = gcc -CFLAGS = -O2 -s -c -mthreads -DWITH_STD_MALLOC +CFLAGS = -O2 -s -c -mthreads -DWITH_STD_MALLOC -DNOIPV6 COUT = -o LN = gcc LDFLAGS = -O2 -s -mthreads diff --git a/src/socks.c b/src/socks.c index 68c3959..d21ed4e 100644 --- a/src/socks.c +++ b/src/socks.c @@ -161,31 +161,7 @@ void * sockschild(struct clientparam* param) { RETURN(997); } - errno = 0; if((res = (*param->srv->authfunc)(param))) { - res *= 10; - switch (errno) { - /* If authfunc failed but errno stays intacts we assume ACL denied the access, - * otherwise we do our best to pick a good error code for SOCKSv5. */ - case 0: - res += 2; /* connection not allowed by ruleset */ - break; - case ENETUNREACH: - res += 3; /* Network unreachable */ - break; - case EHOSTUNREACH: - res += 4; /* Host unreachable */ - break; - case ECONNREFUSED: - res += 5; /* Connection refused */ - break; - case EPFNOSUPPORT: - case EAFNOSUPPORT: - res += 8; /* Address type not supported */ - break; - default: - res += 1; - } RETURN(res); } @@ -223,6 +199,8 @@ fflush(stderr); CLEANRET: if(param->clisock != INVALID_SOCKET){ + int repcode; + sasize = sizeof(sin); if(command != 3) so._getsockname(param->remsock, (struct sockaddr *)&sin, &sasize); else so._getsockname(param->clisock, (struct sockaddr *)&sin, &sasize); @@ -235,9 +213,16 @@ fprintf(stderr, "Sending confirmation to client with code %d for %s with %s:%hu\ ); fflush(stderr); #endif + if(!param->res) repcode = 0; + else if(param->res <= 10) repcode = 2; + else if (param->res < 20) repcode = 5; + else if (param->res < 30) repcode = 1; + else if (param->res < 100) repcode = 4; + else repcode = param->res%10; + if(ver == 5){ buf[0] = 5; - buf[1] = param->res%10; + buf[1] = repcode; buf[2] = 0; buf[3] = 1; memcpy(buf+4, SAADDR(&sin), 4); @@ -246,7 +231,7 @@ fflush(stderr); } else{ buf[0] = 0; - buf[1] = 90 + !!(param->res%10); + buf[1] = 90 + !!(repcode); memcpy(buf+2, SAPORT(&sin), 2); memcpy(buf+4, SAADDR(&sin), 4); socksend(param->clisock, buf, 8, conf.timeouts[STRING_S]); diff --git a/src/structures.h b/src/structures.h index 3b25c06..5489299 100644 --- a/src/structures.h +++ b/src/structures.h @@ -28,9 +28,7 @@ extern "C" { #define INVALID_SOCKET (-1) #else #include -#ifndef NOIPV6 #include -#endif #define pthread_mutex_t CRITICAL_SECTION #define pthread_mutex_init(x, y) InitializeCriticalSection(x) #define pthread_mutex_lock(x) EnterCriticalSection(x) diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..45f99ca --- /dev/null +++ b/src/version.h @@ -0,0 +1,2 @@ +#define VERSION "3proxy-0.8b-devel" +#define BUILDDATE "140703033508" From a425dc40b37430a98d4255373cfb55a2ded77a8b Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 15 Aug 2014 18:48:06 +0400 Subject: [PATCH 031/122] Correct error handling for thread creation Error handling corrected for thread creation in case of e.g. insufficient system resources. --- src/proxymain.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index ad69314..b8ad7e2 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -470,22 +470,26 @@ int MODULEMAINFUNC (int argc, char** argv){ #else h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)32768, (BEGINTHREADFUNC)srv.pf, (void *) newparam, 0, &thread); #endif - newparam->threadid = (unsigned)thread; + srv.childcount++; if (h) { - srv.childcount++; + newparam->threadid = (unsigned)thread; CloseHandle(h); } else { - myfree(newparam); + sprintf((char *)buf, "_beginthreadex(): %s", _strerror(NULL)); + if(!srv.silent)(*srv.logfunc)(&defparam, buf); + freeparam(newparam); } #else - if((error = pthread_create(&thread, &pa, (PTHREADFUNC)srv.pf, (void *)newparam))){ + + error = pthread_create(&thread, &pa, (PTHREADFUNC)srv.pf, (void *)newparam); + srv.childcount++; + if(error){ sprintf((char *)buf, "pthread_create(): %s", strerror(error)); if(!srv.silent)(*srv.logfunc)(&defparam, buf); freeparam(newparam); } else { - srv.childcount++; newparam->threadid = (unsigned)thread; } #endif From f1e017394d970ee8f8e22edf9a9a2c3e77f33cbd Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 19 Oct 2014 04:32:18 +0400 Subject: [PATCH 032/122] Added IPv6 support for 'external' command and -e Now, 2 external addresses can be specified: one for IPv4 and one for IPv6 --- src/3proxy.c | 13 +++++++++++-- src/common.c | 8 +++++--- src/datatypes.c | 12 ++++++------ src/proxymain.c | 33 +++++++++++++++++++++++++-------- src/structures.h | 8 ++++---- src/version.h | 2 +- 6 files changed, 52 insertions(+), 24 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index bed4737..1cd8d15 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -732,7 +732,16 @@ static int h_internal(int argc, unsigned char ** argv){ } static int h_external(int argc, unsigned char ** argv){ - conf.extip = getip(argv[1]); + int res; +#ifndef NOIPV6 + struct sockaddr_in6 sa6; + res = getip46(46, argv[1], (struct sockaddr *)&sa6); + if(!res) return 1; + memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&conf.extsa:(void *)&conf.extsa6, &sa6, SASIZE(&sa6)); +#else + res = getip46(46, argv[1], (struct sockaddr *)&conf.extsa); + if(!res) return 1; +#endif return 0; } @@ -2040,7 +2049,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int { char * args[] = {"auth", "iponly", NULL}; - h_auth(2, args); + h_auth(2, (unsigned char **)args); } res = readconfig(fp); diff --git a/src/common.c b/src/common.c index 7b2e114..a0b18bd 100644 --- a/src/common.c +++ b/src/common.c @@ -65,9 +65,11 @@ struct extparam conf = { NULL, NULL, NONE, NONE, NULL, - {AF_INET}, - INADDR_ANY, - 0, +#ifndef NOIPV6 + {AF_INET},{AF_INET6},{AF_INET}, +#else + {AF_INET},{AF_INET}, +#endif NULL, NULL, doconnect, diff --git a/src/datatypes.c b/src/datatypes.c index 074b62c..40b5649 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -564,12 +564,12 @@ static void * ef_server_intsa(struct node * node){ return &((struct srvparam *)node->value) -> intsa; } -static void * ef_server_extip(struct node * node){ - return &((struct srvparam *)node->value) -> extip; +static void * ef_server_extsa(struct node * node){ + return &((struct srvparam *)node->value) -> extsa; } -static void * ef_server_extport(struct node * node){ - return &((struct srvparam *)node->value) -> extport; +static void * ef_server_extsa6(struct node * node){ + return &((struct srvparam *)node->value) -> extsa6; } static void * ef_server_acl(struct node * node){ @@ -754,8 +754,8 @@ static struct property prop_server[] = { {prop_server + 3, "targetport", ef_server_targetport, TYPE_PORT, "portmapper target port"}, {prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"}, {prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"}, - {prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"}, - {prop_server + 7, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"}, + {prop_server + 6, "extsa", ef_server_extsa, TYPE_SA, "ip address of external interface"}, + {prop_server + 7, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"}, {prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, {prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"}, {prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, diff --git a/src/proxymain.c b/src/proxymain.c index b8ad7e2..ab2c5ae 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -176,7 +176,15 @@ int MODULEMAINFUNC (int argc, char** argv){ getip46(46, argv[i]+2, (struct sockaddr *)&srv.intsa); break; case 'e': - srv.extip = getip((unsigned char *)argv[i]+2); + { +#ifndef NOIPV6 + struct sockaddr_in6 sa6; + error = !getip46(46, argv[i]+2, (struct sockaddr *)&sa6); + if(!error) memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&srv.extsa:(void *)&srv.extsa6, &sa6, SASIZE(&sa6)); +#else + error = !getip46(46, argv[i]+2, (struct sockaddr *)&srv.extsa); +#endif + } break; case 'p': *SAPORT(&srv.intsa) = htons(atoi(argv[i]+2)); @@ -313,6 +321,10 @@ int MODULEMAINFUNC (int argc, char** argv){ srvinit2(&srv, &defparam); if(!*SAFAMILY(&srv.intsa)) *SAFAMILY(&srv.intsa) = AF_INET; if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port); + *SAFAMILY(&srv.extsa) = AF_INET; +#ifndef NOIPV6 + *SAFAMILY(&srv.extsa6) = AF_INET6; +#endif if(hostname)parsehostname(hostname, &defparam, childdef.port); @@ -535,6 +547,10 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ *SAFAMILY(¶m->req) = *SAFAMILY(¶m->sins) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET; pthread_mutex_init(&srv->counter_mutex, NULL); memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); + memcpy(&srv->extsa, &conf.extsa, sizeof(srv->extsa)); +#ifndef NOIPV6 + memcpy(&srv->extsa6, &conf.extsa6, sizeof(srv->extsa6)); +#endif } void srvinit2(struct srvparam * srv, struct clientparam *param){ @@ -550,12 +566,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat); } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); - if(!*SAFAMILY(&srv->intsa)) *SAFAMILY(&srv->intsa) = AF_INET; memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); - if(!srv->extip) srv->extip = conf.extip; - param->sins.sin_addr.s_addr = param->extip = srv->extip; - if(!srv->extport) srv->extport = htons(conf.extport); - param->sins.sin_port = param->extport = srv->extport; +/* FIX ME */ + memcpy(¶m->sins, &srv->extsa, sizeof(param->sins)); } void srvfree(struct srvparam * srv){ @@ -858,9 +871,13 @@ void freeconf(struct extparam *confp){ confp->authfunc = ipauth; confp->bandlimfunc = NULL; memset(&confp->intsa, 0, sizeof(confp->intsa)); + memset(&confp->extsa, 0, sizeof(confp->extsa)); +#ifndef NOIPV6 + memset(&confp->extsa6, 0, sizeof(confp->extsa6)); + *SAFAMILY(&confp->extsa6) = AF_INET6; +#endif *SAFAMILY(&confp->intsa) = AF_INET; - confp->extip = 0; - *SAPORT(&confp->intsa) = confp->extport = 0; + *SAFAMILY(&confp->extsa) = AF_INET; confp->singlepacket = 0; confp->maxchild = 100; resolvfunc = NULL; diff --git a/src/structures.h b/src/structures.h index 5489299..5aa2ced 100644 --- a/src/structures.h +++ b/src/structures.h @@ -356,10 +356,11 @@ struct srvparam { unsigned logdumpsrv, logdumpcli; #ifndef NOIPV6 struct sockaddr_in6 intsa; + struct sockaddr_in6 extsa6; #else struct sockaddr_in intsa; #endif - unsigned long extip; + struct sockaddr_in extsa; pthread_mutex_t counter_mutex; struct pollfd fds; FILE *stdlog; @@ -372,7 +373,6 @@ struct srvparam { unsigned char * logformat; unsigned char * logtarget; unsigned char * nonprintable; - unsigned short extport; unsigned short targetport; unsigned char replace; time_t time_start; @@ -484,11 +484,11 @@ struct extparam { char * counterfile; #ifndef NOIPV6 struct sockaddr_in6 intsa; + struct sockaddr_in6 extsa6; #else struct sockaddr_in intsa; #endif - unsigned long extip; - unsigned short extport; + struct sockaddr_in extsa; struct passwords *pwl; struct auth * authenticate; AUTHFUNC authfunc; diff --git a/src/version.h b/src/version.h index 45f99ca..15a8005 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "140703033508" +#define BUILDDATE "141019042604" From c7310a20608a93b0e9a20835e9e37093aa3ecb5c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 19 Oct 2014 21:54:24 +0400 Subject: [PATCH 033/122] initial partial patches for IPv6 client support --- src/3proxy.c | 2 + src/Makefile.inc | 15 +---- src/auth.c | 2 + src/common.c | 4 ++ src/ftppr.c | 2 +- src/icqpr.c | 2 +- src/plugins.c | 14 +++-- src/pop3p.c | 2 +- src/proxy.c | 13 ----- src/proxymain.c | 13 +++-- src/smtpp.c | 10 ++-- src/sockgetchar.c | 4 +- src/sockmap.c | 4 +- src/socks.c | 146 +++++++++++++++++++++++----------------------- src/stringtable.c | 5 +- src/structures.h | 17 +++--- src/udppm.c | 20 +++---- src/version.h | 2 +- 18 files changed, 134 insertions(+), 143 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 1cd8d15..a25b882 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -694,6 +694,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.service = S_ICQPR; childdef.helpmessage = ""; } +/* else if(!strcmp((char *)argv[0], "msnpr")) { childdef.pf = msnprchild; childdef.port = 0; @@ -701,6 +702,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.service = S_MSNPR; childdef.helpmessage = ""; } +*/ else if(!strcmp((char *)argv[0], "udppm")) { childdef.pf = udppmchild; childdef.port = 0; diff --git a/src/Makefile.inc b/src/Makefile.inc index 96176d7..f134c9f 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -3,7 +3,7 @@ # 3 proxy common Makefile # -all: pre $(VERFILE) $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)msnpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) $(BUILDDIR)countersutil$(EXESUFFICS) allplugins +all: pre $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) $(BUILDDIR)countersutil$(EXESUFFICS) allplugins pre: @@ -53,9 +53,6 @@ tcppm$(OBJSUFFICS): tcppm.c proxy.h structures.h proxymain.c icqpr$(OBJSUFFICS): icqpr.c proxy.h structures.h proxymain.c $(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)PORTMAP icqpr.c -msnpr$(OBJSUFFICS): msnpr.c proxy.h structures.h proxymain.c - $(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)PORTMAP msnpr.c - socks$(OBJSUFFICS): socks.c proxy.h structures.h proxymain.c $(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)NOPORTMAP socks.c @@ -86,9 +83,6 @@ $(BUILDDIR)tcppm$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) tcp $(BUILDDIR)icqpr$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) icqpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LN) $(LNOUT)$(BUILDDIR)icqpr$(EXESUFFICS) $(LDFLAGS) $(VERFILE) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) icqpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS) -$(BUILDDIR)msnpr$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) msnpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) - $(LN) $(LNOUT)$(BUILDDIR)msnpr$(EXESUFFICS) $(LDFLAGS) $(VERFILE) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) msnpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS) - $(BUILDDIR)udppm$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) udppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LN) $(LNOUT)$(BUILDDIR)udppm$(EXESUFFICS) $(LDFLAGS) $(VERFILE) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) udppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS) @@ -115,9 +109,6 @@ srvtcppm$(OBJSUFFICS): tcppm.c proxy.h structures.h srvicqpr$(OBJSUFFICS): icqpr.c proxy.h structures.h $(CC) $(COUT)srvicqpr$(OBJSUFFICS) $(CFLAGS) icqpr.c -srvmsnpr$(OBJSUFFICS): msnpr.c proxy.h structures.h - $(CC) $(COUT)srvmsnpr$(OBJSUFFICS) $(CFLAGS) msnpr.c - srvsocks$(OBJSUFFICS): socks.c proxy.h structures.h $(CC) $(COUT)srvsocks$(OBJSUFFICS) $(CFLAGS) socks.c @@ -174,8 +165,8 @@ ntlm$(OBJSUFFICS): ntlm.c stringtable$(OBJSUFFICS): stringtable.c $(CC) $(COUT)stringtable$(OBJSUFFICS) $(CFLAGS) stringtable.c -$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvmsnpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) - $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvmsnpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) +$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) + $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) clean: @$(REMOVECOMMAND) *$(OBJSUFFICS) $(COMPFILES) diff --git a/src/auth.c b/src/auth.c index b2bba6e..a3b2831 100644 --- a/src/auth.c +++ b/src/auth.c @@ -260,9 +260,11 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ case R_ICQ: param->redirectfunc = icqprchild; break; +/* case R_MSN: param->redirectfunc = msnprchild; break; +*/ default: param->redirectfunc = proxychild; } diff --git a/src/common.c b/src/common.c index a0b18bd..bf96d55 100644 --- a/src/common.c +++ b/src/common.c @@ -597,6 +597,10 @@ void logsyslog(struct clientparam * param, const unsigned char *s) { int doconnect(struct clientparam * param){ SASIZETYPE size = sizeof(param->sins); struct sockaddr_in bindsa; + + if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(param->req)) && + *SAPORT(¶m->sincr) == *SAPORT(¶m->req)) return 519; + if (param->operation == ADMIN || param->operation == DNSRESOLVE || param->operation == BIND || param->operation == UDPASSOC) return 0; if (param->remsock != INVALID_SOCKET){ diff --git a/src/ftppr.c b/src/ftppr.c index 14bc1f1..fe1fb47 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -71,7 +71,7 @@ void * ftpprchild(struct clientparam* param) { param->res = res; if(inbuf && inbuf != BUFSIZE && socksend(param->ctrlsock, buf, inbuf, conf.timeouts[STRING_S])!=inbuf) {RETURN (807);} if(!res) status = 3; - sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(param->sins.sin_port)==21)?0:':', ntohs(param->sins.sin_port)); + sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(*SAPORT(¶m->sinsr))==21)?0:':', ntohs(*SAPORT(¶m->sinsr))); req = mystrdup((char *)buf); #ifndef WITHMAIN { diff --git a/src/icqpr.c b/src/icqpr.c index 04abaf6..6aa5760 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -105,7 +105,7 @@ static void addbuffer(int increment, struct clientparam * param, unsigned char * *buf_p = newbuf; *bufsize_p = bufsize; } - if(increment) len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, *buf_p + *length_p, increment, conf.timeouts[STRING_S]*1000); + if(increment) len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, *buf_p + *length_p, increment, conf.timeouts[STRING_S]*1000); if(len > 0) { *length_p += len; param->nreads++; diff --git a/src/plugins.c b/src/plugins.c index 0891cb0..7820822 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -70,13 +70,15 @@ struct symbol symbols[] = { {symbols+42, "ftppr", (void *) ftpprchild}, {symbols+43, "smtpp", (void *) smtppchild}, {symbols+44, "icqpr", (void *) icqprchild}, +/* {symbols+45, "msnpr", (void *) msnprchild}, - {symbols+46, "authfuncs", (void *) &authfuncs}, - {symbols+47, "commandhandlers", (void *) &commandhandlers}, - {symbols+48, "decodeurl", (void *) decodeurl}, - {symbols+49, "parsestr", (void *) parsestr}, - {symbols+50, "make_ace", (void *) make_ace}, - {symbols+51, "freeacl", (void *) freeacl}, +*/ + {symbols+45, "authfuncs", (void *) &authfuncs}, + {symbols+46, "commandhandlers", (void *) &commandhandlers}, + {symbols+47, "decodeurl", (void *) decodeurl}, + {symbols+48, "parsestr", (void *) parsestr}, + {symbols+49, "make_ace", (void *) make_ace}, + {symbols+50, "freeacl", (void *) freeacl}, {NULL, "", NULL} }; diff --git a/src/pop3p.c b/src/pop3p.c index c3a7ef6..b76a77a 100644 --- a/src/pop3p.c +++ b/src/pop3p.c @@ -49,7 +49,7 @@ void * pop3pchild(struct clientparam* param) { CLEANRET: if(param->hostname&¶m->extusername) { - sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(param->sins.sin_port)==110)?0:':', ntohs(param->sins.sin_port)); + sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (*SAPORT(¶m->sinsr)==110)?0:':', ntohs(*SAPORT(¶m->sinsr))); (*param->srv->logfunc)(param, buf); } else (*param->srv->logfunc)(param, NULL); diff --git a/src/proxy.c b/src/proxy.c index 1889222..827ef85 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -229,7 +229,6 @@ void * proxychild(struct clientparam* param) { int authenticate; struct pollfd fds[2]; SOCKET ftps; - SASIZETYPE sasize; #ifndef WITHMAIN FILTER_ACTION action; #endif @@ -260,8 +259,6 @@ for(;;){ ckeepalive = 0; so._shutdown(param->remsock, SHUT_RDWR); so._closesocket(param->remsock); - param->sins.sin_addr.s_addr = 0; - param->sins.sin_port = 0; param->remsock = INVALID_SOCKET; param->redirected = 0; param->redirtype = 0; @@ -282,8 +279,6 @@ for(;;){ so._shutdown(param->remsock, SHUT_RDWR); so._closesocket(param->remsock); } - param->sins.sin_addr.s_addr = 0; - param->sins.sin_port = 0; param->remsock = INVALID_SOCKET; param->redirected = 0; param->redirtype = 0; @@ -545,14 +540,6 @@ for(;;){ #endif if((res = (*param->srv->authfunc)(param))) {RETURN(res);} - if (*SAFAMILY(¶m->srv->intsa) == AF_INET && - (param->sins.sin_addr.s_addr == ((struct sockaddr_in *)¶m->srv->intsa)->sin_addr.s_addr && param->sins.sin_port == *SAPORT(¶m->srv->intsa))) { - RETURN(519); - } - sasize = sizeof(struct sockaddr_in); - if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sins, &sasize)){ - RETURN(520); - } #define FTPBUFSIZE 1536 if(ftp && param->redirtype != R_HTTP){ diff --git a/src/proxymain.c b/src/proxymain.c index ab2c5ae..d12d8ee 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -388,10 +388,14 @@ int MODULEMAINFUNC (int argc, char** argv){ } memset(&defparam.sincr, 0, sizeof(defparam.sincr)); memset(&defparam.sincl, 0, sizeof(defparam.sincl)); - memset(&defparam.sins, 0, sizeof(defparam.sins)); + memset(&defparam.sinsl, 0, sizeof(defparam.sinsl)); + memset(&defparam.sinsr, 0, sizeof(defparam.sinsr)); + memset(&defparam.req, 0, sizeof(defparam.req)); *SAFAMILY(&defparam.sincr) = AF_INET; *SAFAMILY(&defparam.sincl) = AF_INET; - *SAFAMILY(&defparam.sins) = AF_INET; + *SAFAMILY(&defparam.sinsl) = AF_INET; + *SAFAMILY(&defparam.sinsr) = AF_INET; + *SAFAMILY(&defparam.req) = AF_INET; srv.fds.fd = sock; srv.fds.events = POLLIN; @@ -544,7 +548,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ memset(param, 0, sizeof(struct clientparam)); param->srv = srv; param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET; - *SAFAMILY(¶m->req) = *SAFAMILY(¶m->sins) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET; + *SAFAMILY(¶m->req) = *SAFAMILY(¶m->sinsl) = *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET; pthread_mutex_init(&srv->counter_mutex, NULL); memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); memcpy(&srv->extsa, &conf.extsa, sizeof(srv->extsa)); @@ -567,8 +571,7 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); -/* FIX ME */ - memcpy(¶m->sins, &srv->extsa, sizeof(param->sins)); + memcpy(¶m->sinsl, &srv->extsa, sizeof(param->sinsl)); } void srvfree(struct srvparam * srv){ diff --git a/src/smtpp.c b/src/smtpp.c index 9246117..167b4e0 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -83,7 +83,7 @@ int readdata (struct clientparam* param) { return -1; } #endif - socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf, i, conf.timeouts[STRING_S]); + socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf, i, conf.timeouts[STRING_S]); } if(i < 1) { myfree(buf); @@ -99,7 +99,6 @@ void * smtppchild(struct clientparam* param) { int i=0, res; unsigned char buf[320]; unsigned char username[256]; - unsigned long ul; char * command = NULL; int login = 0; @@ -188,8 +187,9 @@ void * smtppchild(struct clientparam* param) { if( i < 3 ) {RETURN(671);} buf[i] = 0; if(strncasecmp((char *)buf, "220", 3)||!strncasecmp((char *)buf+4, "PROXY", 5)){RETURN(672);} - ul = param->extip; - i = sprintf(buf, "EHLO [%lu.%lu.%lu.%lu]\r\n", ((ul&0xFF000000)>>24), ((ul&0x00FF0000)>>16), ((ul&0x0000FF00)>>8), ((ul&0x000000FF))); + i = sprintf(buf, "EHLO ["); + i += myinet_ntop(*SAFAMILY(¶m->sinsl), SAADDR(¶m->sinsl), buf+strlen(buf), 64); + i += sprintf(buf+strlen(buf), "]\r\n"); if(socksend(param->remsock, buf, i, conf.timeouts[STRING_S])!= i) {RETURN(673);} param->statscli64+=i; param->nwrites++; @@ -292,7 +292,7 @@ void * smtppchild(struct clientparam* param) { CLEANRET: if(param->hostname&¶m->extusername) { - sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(param->sins.sin_port)==25)?0:':', ntohs(param->sins.sin_port)); + sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(*SAPORT(¶m->sinsr))==25)?0:':', *SAPORT(¶m->sinsr)); (*param->srv->logfunc)(param, buf); } else (*param->srv->logfunc)(param, NULL); diff --git a/src/sockgetchar.c b/src/sockgetchar.c index 906a4bd..cfaa0f1 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -123,7 +123,7 @@ int sockfillbuffsrv(struct clientparam * param, unsigned long size, int timeosec } if(size <= param->srvinbuf) return size; size -= param->srvinbuf; - if((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ + if((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, param->srvbuf + param->srvinbuf, (param->srvbufsize - param->srvinbuf) < size? param->srvbufsize - param->srvinbuf:size, timeosec*1000)) > 0){ param->srvinbuf += len; param->nreads++; param->statssrv64 += len; @@ -148,7 +148,7 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){ return (int)param->srvbuf[param->srvoffset++]; } param->srvoffset = param->srvinbuf = 0; - if ((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, param->srvbuf, param->srvbufsize, timeosec*1000 + timeousec))<=0) return EOF; + if ((len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, param->srvbuf, param->srvbufsize, timeosec*1000 + timeousec))<=0) return EOF; param->srvinbuf = len; param->srvoffset = 1; param->nreads++; diff --git a/src/sockmap.c b/src/sockmap.c index 5626d3d..1479a48 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -154,7 +154,7 @@ int sockmap(struct clientparam * param, int timeo){ sl1 = (*param->bandlimfunc)(param, 0, param->cliinbuf - param->clioffset); if(sl1 > sleeptime) sleeptime = sl1; } - res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient64 || (param->waitclient64 - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : (int)(param->waitclient64 - sent), 0, (struct sockaddr*)¶m->sins, sasize); + res = so._sendto(param->remsock, param->clibuf + param->clioffset, (!param->waitclient64 || (param->waitclient64 - sent) > (param->cliinbuf - param->clioffset))? param->cliinbuf - param->clioffset : (int)(param->waitclient64 - sent), 0, (struct sockaddr*)¶m->sinsr, sasize); if(res < 0) { if(errno != EAGAIN && errno != EINTR) return 97; if(errno == EINTR) usleep(SLEEPTIME); @@ -257,7 +257,7 @@ int sockmap(struct clientparam * param, int timeo){ #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "flushing buffer to server"); #endif - res = socksendto(param->remsock, (struct sockaddr *)¶m->sins, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); + res = socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, param->clibuf + param->clioffset, param->cliinbuf - param->clioffset, conf.timeouts[STRING_S] * 1000); if(res > 0){ param->clioffset += res; param->statscli64 += res; diff --git a/src/socks.c b/src/socks.c index d21ed4e..e8aa81e 100644 --- a/src/socks.c +++ b/src/socks.c @@ -22,6 +22,7 @@ void * sockschild(struct clientparam* param) { SOCKET s; unsigned size; SASIZETYPE sasize; + unsigned short port = 0; unsigned char * buf=NULL; unsigned char c; unsigned char command=0; @@ -29,14 +30,13 @@ void * sockschild(struct clientparam* param) { int ver=0; int havepass = 0; #ifndef NOIPV6 - struct sockaddr_in6 sin; + struct sockaddr_in6 sin = {AF_INET6}; #else - struct sockaddr_in sin; + struct sockaddr_in sin = {AF_INET}; #endif int len; - param->req.sin_addr.s_addr = 0; param->service = S_SOCKS; if(!(buf = myalloc(BUFSIZE))) {RETURN(21);} @@ -86,21 +86,26 @@ void * sockschild(struct clientparam* param) { buf[0] = (unsigned char) res; if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[1] = (unsigned char) res; - param->sins.sin_port = param->req.sin_port = *(unsigned short*)buf; + port = *(unsigned short*)buf; c = 1; } + size = 4; switch(c) { + case 4: + size = 16; case 1: - for (i = 0; i<4; i++){ + for (i = 0; isins.sin_addr.s_addr = param->req.sin_addr.s_addr = *(unsigned long *)buf; - if(command==1 && !param->req.sin_addr.s_addr) { + *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = (c == 1)? AF_INET:AF_INET6; + memcpy(SAADDR(¶m->sinsr), buf, size); + memcpy(SAADDR(¶m->req), buf, size); + if(command==1 && !memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", size)) { RETURN(421); } - myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf, 64); + myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf, 64); break; case 3: if ((size = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} /* nmethods */ @@ -109,10 +114,8 @@ void * sockschild(struct clientparam* param) { buf[i] = (unsigned char)res; } buf[i] = 0; - param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr = getip(buf); - if(command==1 && !param->req.sin_addr.s_addr) { - RETURN(100); - } + if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->req)) RETURN(100); + memcpy(¶m->sinsr, ¶m->req, sizeof(¶m->req)); break; default: RETURN(997); @@ -124,39 +127,39 @@ void * sockschild(struct clientparam* param) { buf[0] = (unsigned char) res; if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} buf[1] = (unsigned char) res; - param->sins.sin_port = param->req.sin_port = *(unsigned short*)buf; + port = *(unsigned short*)buf; + } else { sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]); buf[127] = 0; if(!param->srv->nouser && *buf && !param->username)param->username = (unsigned char *)mystrdup((char *)buf); - if(param->sins.sin_addr.s_addr && ntohl(param->sins.sin_addr.s_addr)<256){ + if(!memcmp(SAADDR(¶m->req), "\0\0\0", 3)){ param->service = S_SOCKS45; sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]); buf[127] = 0; if(param->hostname)myfree(param->hostname); param->hostname = (unsigned char *)mystrdup((char *)buf); - param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr = getip(buf); + if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->req)) RETURN(100); + memcpy(¶m->sinsr, ¶m->req, sizeof(¶m->req)); } } - if(command == 1 && !param->req.sin_port) {RETURN(421);} - param->sins.sin_family = AF_INET; + + *SAPORT(¶m->sinsr) = *SAPORT(¶m->req) = port; + if(command == 1 && !*SAPORT(¶m->sinsr)) {RETURN(421);} switch(command) { case 1: param->operation = CONNECT; break; case 2: - param->sins.sin_addr.s_addr = param->extip; - param->sins.sin_port = param->extport?param->extport:param->req.sin_port; - if ((param->remsock=so._socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {RETURN (11);} - param->operation = BIND; - break; case 3: - param->sins.sin_port = param->extport?param->extport:param->req.sin_port; - param->sins.sin_addr.s_addr = param->extip; - if ((param->remsock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} - param->operation = UDPASSOC; + + memcpy(¶m->sinsl, *SAFAMILY(¶m->req)==AF_INET6? (struct sockaddr *)¶m->srv->extsa6:(struct sockaddr *)¶m->srv->extsa, SASIZE(¶m->req)); + if(!*SAPORT(¶m->sinsl))*SAPORT(¶m->sinsl) = port; + if ((param->remsock=so._socket(*SAFAMILY(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} + param->operation = command == 2?BIND:UDPASSOC; break; + default: RETURN(997); } @@ -166,25 +169,22 @@ void * sockschild(struct clientparam* param) { } if(command > 1) { - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) { - param->sins.sin_port = 0; - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins)))RETURN (12); + if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,SASIZE(¶m->sinsl))) { + *SAPORT(¶m->sinsl) = 0; + if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,SASIZE(¶m->sinsl)))RETURN (12); #if SOCKSTRACE > 0 -fprintf(stderr, "%s:%hu binded to communicate with server\n", - inet_ntoa(param->sins.sin_addr), - ntohs(param->sins.sin_port) - ); +fprintf(stderr, "%hu binded to communicate with server\n", *SAPORT(¶m->sins)); fflush(stderr); #endif } - sasize = sizeof(param->sins); - so._getsockname(param->remsock, (struct sockaddr *)¶m->sins, &sasize); + sasize = SASIZE(¶m->sinsl); + so._getsockname(param->remsock, (struct sockaddr *)¶m->sinsl, &sasize); if(command == 3) { param->ctrlsock = param->clisock; param->clisock = so._socket(SASOCK(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP); if(param->clisock == INVALID_SOCKET) {RETURN(11);} memcpy(&sin, ¶m->sincl, sizeof(&sin)); - *SAPORT(&sin) = htons(0); + *SAPORT(&sin) = 0; if(so._bind(param->clisock,(struct sockaddr *)&sin,sizeof(sin))) {RETURN (12);} #if SOCKSTRACE > 0 fprintf(stderr, "%hu binded to communicate with client\n", @@ -224,10 +224,10 @@ fflush(stderr); buf[0] = 5; buf[1] = repcode; buf[2] = 0; - buf[3] = 1; - memcpy(buf+4, SAADDR(&sin), 4); - memcpy(buf+8, SAPORT(&sin), 2); - socksend((command == 3)?param->ctrlsock:param->clisock, buf, 10, conf.timeouts[STRING_S]); + buf[3] = (*SAFAMILY(&sin) == AF_INET)?1:4; + memcpy(buf+4, SAADDR(&sin), SAADDRLEN(&sin)); + memcpy(buf+4+SAADDRLEN(&sin), SAPORT(&sin), 2); + socksend((command == 3)?param->ctrlsock:param->clisock, buf, 6+SAADDRLEN(&sin), conf.timeouts[STRING_S]); } else{ buf[0] = 0; @@ -252,48 +252,48 @@ fflush(stderr); fds[0].fd = param->remsock; fds[1].fd = param->clisock; fds[0].events = fds[1].events = POLLIN; - res = so._poll(fds, 2, conf.timeouts[(param->req.sin_addr.s_addr)?CONNECTION_S:CONNECTION_L] * 1000); + res = so._poll(fds, 2, conf.timeouts[CONNECTION_L] * 1000); if (res < 1 || fds[1].revents) { res = 460; break; } - sasize = sizeof(param->sins); - s = so._accept(param->remsock, (struct sockaddr *)¶m->sins, &sasize); + sasize = sizeof(param->sinsr); + s = so._accept(param->remsock, (struct sockaddr *)¶m->sinsr, &sasize); so._closesocket(param->remsock); param->remsock = s; if(s == INVALID_SOCKET) { param->res = 462; break; } - if(param->req.sin_addr.s_addr && param->req.sin_addr.s_addr != param->sins.sin_addr.s_addr) { + if(!memcmp(SAADDR(¶m->req),"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",SAADDRLEN(¶m->req)) && + memcmp(SAADDR(¶m->req),SAADDR(¶m->sinsr),SAADDRLEN(¶m->req))) { param->res = 470; break; } #if SOCKSTRACE > 0 -fprintf(stderr, "Sending incoming connection to client with code %d for %s with %s:%hu\n", +fprintf(stderr, "Sending incoming connection to client with code %d for %s with %hu\n", param->res, commands[command], - inet_ntoa(param->sins.sin_addr), - ntohs(param->sins.sin_port) + *SAPORT(param->sins); ); fflush(stderr); #endif if(ver == 5){ - memcpy (buf+4, ¶m->sins.sin_addr, 4); - memcpy (buf+8, ¶m->sins.sin_port, 2); - socksend(param->clisock, buf, 10, conf.timeouts[STRING_S]); + buf[3] = (*SAFAMILY(¶m->sinsr) == AF_INET)?1:4; + memcpy(buf+4, SAADDR(¶m->sinsr), SAADDRLEN(¶m->sinsr)); + memcpy(buf+4+SAADDRLEN(¶m->sinsr), SAPORT(¶m->sinsr), 2); + socksend(param->clisock, buf, 6+SAADDRLEN(¶m->sinsr), conf.timeouts[STRING_S]); } else { - memcpy (buf+2, ¶m->sins.sin_port, 2); - memcpy (buf+4, ¶m->sins.sin_addr, 4); + memcpy (buf+2, SAPORT(¶m->sinsr), 2); + memcpy (buf+4, SAADDR(¶m->sinsr), 4); socksend(param->clisock, buf, 8, conf.timeouts[STRING_S]); } param->res = sockmap(param, conf.timeouts[CONNECTION_S]); break; case 3: - param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr; - param->sins.sin_port = param->req.sin_port; + memcpy(¶m->sinsr, ¶m->req, sizeof(param->sinsr)); myfree(buf); if(!(buf = myalloc(LARGEBUFSIZE))) {RETURN(21);} @@ -326,10 +326,14 @@ fflush(stderr); param->res = 466; break; } + size = 4; switch(buf[3]) { + case 4: + size = 16; case 1: - i = 8; - memcpy(¶m->sins.sin_addr.s_addr, buf+4, 4); + i = 4+size; + memcpy(SAADDR(¶m->sinsr), buf+4, size); + *SAFAMILY(¶m->sinsr) = (size == 4)?AF_INET:AF_INET6; break; case 3: size = buf[4]; @@ -337,18 +341,18 @@ fflush(stderr); buf[i] = buf[i+1]; } buf[i++] = 0; - param->sins.sin_addr.s_addr = getip(buf+4); + if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->sinsr)) RETURN(100); break; default: RETURN(997); } - memcpy(¶m->sins.sin_port, buf+i, 2); + memcpy(SAPORT(¶m->sinsr), buf+i, 2); i+=2; - sasize = sizeof(param->sins); + sasize = sizeof(param->sinsr); if(len > (int)i){ - if(socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000) <= 0){ + if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000) <= 0){ param->res = 467; break; } @@ -371,27 +375,25 @@ fflush(stderr); } if (fds[0].revents) { - struct sockaddr_in tsin; - sasize = sizeof(tsin); + sasize = sizeof(param->sinsr); buf[0]=buf[1]=buf[2]=0; - buf[3]=1; - if((len = so._recvfrom(param->remsock, buf+10, 65535 - 10, 0, (struct sockaddr *)&tsin, &sasize)) <= 0) { + buf[3]=(*SAFAMILY(¶m->sinsl) == AF_INET)?1:4; + if((len = so._recvfrom(param->remsock, buf+6+SAADDRLEN(¶m->sinsl), 65535 - 10, 0, (struct sockaddr *)¶m->sinsr, &sasize)) <= 0) { param->res = 468; break; } param->statssrv64+=len; param->nreads++; - memcpy(buf+4, &tsin.sin_addr.s_addr, 4); - memcpy(buf+8, &tsin.sin_port, 2); - sasize = sizeof(param->sins); - if(socksendto(param->clisock, (struct sockaddr *)&sin, buf, len + 10, conf.timeouts[SINGLEBYTE_L]*1000) <=0){ + memcpy(buf+4, SAADDR(¶m->sinsr), SAADDRLEN(¶m->sinsr)); + memcpy(buf+4+SAADDRLEN(¶m->sinsr), SAPORT(¶m->sinsr), 2); + sasize = sizeof(sin); + if(socksendto(param->clisock, (struct sockaddr *)&sin, buf, len + 6 + SAADDRLEN(¶m->sinsr), conf.timeouts[SINGLEBYTE_L]*1000) <=0){ param->res = 469; break; } #if SOCKSTRACE > 1 -fprintf(stderr, "UDP packet relayed to client from %s:%hu size %d\n", - inet_ntoa(tsin.sin_addr), - ntohs(tsin.sin_port), +fprintf(stderr, "UDP packet relayed to client from %hu size %d\n", + ntohs(*SAPORT(¶m->sinsr)), len ); fflush(stderr); @@ -415,7 +417,7 @@ fflush(stderr); } else myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + strlen((char *)buf), 64); - sprintf((char *)buf+strlen((char *)buf), ":%hu", ntohs(param->req.sin_port)); + sprintf((char *)buf+strlen((char *)buf), ":%hu", ntohs(*SAPORT(¶m->req))); (*param->srv->logfunc)(param, buf); myfree(buf); } diff --git a/src/stringtable.c b/src/stringtable.c index 4a1a54f..be59b75 100644 --- a/src/stringtable.c +++ b/src/stringtable.c @@ -30,8 +30,9 @@ unsigned char * strings[] = { /* 16 */ (unsigned char *)"FTPPR", /* 17 */ (unsigned char *)"SMTPP", /* 18 */ (unsigned char *)"ICQPR", -/* 19 */ (unsigned char *)"MSNPR", -/* 20 */ (unsigned char *)"ZOMBIE", +/* 19 (unsigned char *)"MSNPR", */ +/* 19 */ (unsigned char *)"ZOMBIE", +/* 20 */ NULL, /* 21 */ NULL, /* 22 */ NULL, /* 23 */ NULL, diff --git a/src/structures.h b/src/structures.h index 5aa2ced..a6c6e9e 100644 --- a/src/structures.h +++ b/src/structures.h @@ -137,7 +137,9 @@ typedef enum { S_FTPPR, S_SMTPP, S_ICQPR, +/* S_MSNPR, +*/ S_ZOMBIE }PROXYSERVICE; @@ -352,6 +354,7 @@ struct srvparam { int silent; int transparent; int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv; + int family; unsigned bufsize; unsigned logdumpsrv, logdumpcli; #ifndef NOIPV6 @@ -438,26 +441,21 @@ struct clientparam { maxtrafin64, maxtrafout64; #ifndef NOIPV6 - struct sockaddr_in6 sincl, sincr; + struct sockaddr_in6 sincl, sincr, sinsl, sinsr, req; #else - struct sockaddr_in sincl, sincr; + struct sockaddr_in sincl, sincr, sinsl, sinsr, req; #endif - struct sockaddr_in sins, - req; uint64_t statscli64, statssrv64; unsigned long nreads, nwrites, - nconnects, - extip; + nconnects; struct bandlim *bandlims[MAXBANDLIMS], *bandlimsout[MAXBANDLIMS]; - unsigned short extport; - time_t time_start; }; @@ -485,10 +483,11 @@ struct extparam { #ifndef NOIPV6 struct sockaddr_in6 intsa; struct sockaddr_in6 extsa6; + struct sockaddr_in extsa; #else struct sockaddr_in intsa; -#endif struct sockaddr_in extsa; +#endif struct passwords *pwl; struct auth * authenticate; AUTHFUNC authfunc; diff --git a/src/udppm.c b/src/udppm.c index e746540..4a609fb 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -40,7 +40,7 @@ void * udppmchild(struct clientparam* param) { if(!param->hostname)parsehostname((char *)param->srv->target, param, ntohs(param->srv->targetport)); - if (!param->req.sin_addr.s_addr) { + if (!memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) { param->srv->fds.events = POLLIN; RETURN (100); } @@ -62,27 +62,25 @@ void * udppmchild(struct clientparam* param) { } if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; ioctlsocket(param->clisock, FIONBIO, &ul); - size = sizeof(param->sins); - if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sins, &size)) {RETURN(21);}; - if(so._bind(param->clisock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) { + size = sizeof(param->sinsl); + if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sinsl, &size)) {RETURN(21);}; + if(so._bind(param->clisock,(struct sockaddr *)¶m->sinsl,sizeof(struct sockaddr_in))) { RETURN(822); } #else param->clisock = param->srv->srvsock; #endif - param->sins.sin_family = AF_INET; - param->sins.sin_port = htons(0); - param->sins.sin_addr.s_addr = param->extip; - if ((param->remsock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) {RETURN (12);} + memcpy(¶m->sinsl, *SAFAMILY(¶m->req) == AF_INET? (struct sockaddr *)¶m->srv->extsa : (struct sockaddr *)¶m->srv->extsa6, SASIZE(¶m->req)); + *SAPORT(¶m->sinsl) = 0; + if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsl), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} + if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {RETURN (12);} #ifdef _WIN32 ioctlsocket(param->remsock, FIONBIO, &ul); #else fcntl(param->remsock,F_SETFL,O_NONBLOCK); #endif - param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr; - param->sins.sin_port = param->req.sin_port; + memcpy(¶m->sinsr, ¶m->req, sizeof(param->req)); param->operation = UDPASSOC; if((res = (*param->srv->authfunc)(param))) {RETURN(res);} diff --git a/src/version.h b/src/version.h index 15a8005..030dff4 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141019042604" +#define BUILDDATE "141019215116" From 10bc0db2a89b7b83e2ee4da168f8418772801073 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 19 Oct 2014 22:02:15 +0400 Subject: [PATCH 034/122] add IPv4/IPv6 selection for outgoing connections --- src/proxymain.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/proxymain.c b/src/proxymain.c index d12d8ee..eb3f91d 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -73,7 +73,11 @@ int MODULEMAINFUNC (int argc, char** argv){ " -bBUFSIZE size of network buffer (default 4096 for TCP, 16384 for UDP)\n" " -t be silent (do not log service start/stop)\n" " -iIP ip address or internal interface (clients are expected to connect)\n" - " -eIP ip address or external interface (outgoing connection will have this)\n"; + " -eIP ip address or external interface (outgoing connection will have this)\n" + " -4 Use IPv4 for outgoing connections\n" + " -6 Use IPv6 for outgoing connections\n" + " -46 Prefer IPv4 for outgoing connections, use both IPv4 and IPv6\n" + " -64 Prefer IPv6 for outgoing connections, use both IPv4 and IPv6\n"; #ifdef _WIN32 unsigned long ul = 1; @@ -189,6 +193,10 @@ int MODULEMAINFUNC (int argc, char** argv){ case 'p': *SAPORT(&srv.intsa) = htons(atoi(argv[i]+2)); break; + case '4': + case '6': + srv.family = atoi(argv[i]); + break; case 'b': srv.bufsize = atoi(argv[i]+2); break; From db5c4b1255b7f2885cf48fcca097ef722212c7ee Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 21 Oct 2014 06:00:56 +0400 Subject: [PATCH 035/122] more changes for IPv6 client support --- src/auth.c | 35 ++++++----- src/common.c | 76 +++++++++++------------ src/datatypes.c | 32 ++++------ src/dnspr.c | 23 +++---- src/ftp.c | 10 +-- src/plugins/TrafficPlugin/TrafficPlugin.c | 8 +-- src/proxymain.c | 4 +- src/version.h | 2 +- 8 files changed, 90 insertions(+), 100 deletions(-) diff --git a/src/auth.c b/src/auth.c index a3b2831..e0b3d5e 100644 --- a/src/auth.c +++ b/src/auth.c @@ -205,16 +205,12 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ int done = 0; struct chain * cur; struct chain * redir = NULL; - unsigned long targetip; - unsigned short targetport; int r2; if(param->remsock != INVALID_SOCKET) { return 0; } - targetip = param->req.sin_addr.s_addr; - targetport = param->req.sin_port; - if(!targetip || !targetport) return 100; + if(!memcmp(SAADDR(¶m->req),"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",SAADDRLEN(¶m->req)) || !*SAPORT(¶m->req)) return 100; r2 = (myrand(param, sizeof(struct clientparam))%1000); @@ -270,11 +266,16 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } return 0; } - else if(!cur->redirip && cur->redirport) param->extport = cur->redirport; - else if(!cur->redirport && cur->redirip) param->extip = cur->redirip; - else { - param->sins.sin_port = cur->redirport; - param->sins.sin_addr.s_addr = cur->redirip; + else if(!cur->redirport && cur->redirip) { + unsigned short port = *SAPORT(¶m->sinsl); + *SAFAMILY(¶m->sinsl) = AF_INET; + *(unsigned long *)SAADDR(¶m->sinsl) = cur->redirip; + *SAPORT(¶m->sinsl) = port; + } + else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsl) = cur->redirport; + else if(*SAFAMILY(¶m->req) == AF_INET){ + *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; + *SAPORT(¶m->sinsr) = cur->redirport; } if((res = alwaysauth(param))){ @@ -282,7 +283,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } } else { - res = redir?clientnegotiate(redir, param, cur->redirip, cur->redirport):0; + res = (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, cur->redirip, cur->redirport):0; if(res) return res; } redir = cur; @@ -305,7 +306,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } if(!connected) return 9; - return redir?clientnegotiate(redir, param, targetip, targetport):0; + return (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, *(unsigned long *)SAADDR(¶m->req), *SAPORT(¶m->req)):0; } int IPInentry(struct sockaddr *sa, struct iplist *ipentry){ @@ -339,7 +340,7 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){ } if(!ipentry) return 0; } - if((acentry->dst && param->req.sin_addr.s_addr) || (acentry->dstnames && param->hostname)) { + if((acentry->dst && memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) || (acentry->dstnames && param->hostname)) { for(ipentry = acentry->dst; ipentry; ipentry = ipentry->next) if(IPInentry((struct sockaddr *)¶m->req, ipentry)) { break; @@ -374,10 +375,10 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){ } if(!ipentry && !hstentry) return 0; } - if(acentry->ports && param->req.sin_port) { + if(acentry->ports && *SAPORT(¶m->req)) { for (portentry = acentry->ports; portentry; portentry = portentry->next) - if(ntohs(param->req.sin_port) >= portentry->startport && - ntohs(param->req.sin_port) <= portentry->endport) { + if(ntohs(*SAPORT(¶m->req)) >= portentry->startport && + ntohs(*SAPORT(¶m->req)) <= portentry->endport) { break; } if(!portentry) return 0; @@ -970,7 +971,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa struct sockaddr_in sin, *sinsp; memset(&sin, 0, sizeof(sin)); - sinsp = (param && !makeauth)? ¶m->sins : &sin; + sinsp = (param && !makeauth && *SAFAMILY(¶m->sinsr) == AF_INET)? (struct sockaddr_in *)¶m->sinsr : &sin; if((sock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break; diff --git a/src/common.c b/src/common.c index bf96d55..c8bd49e 100644 --- a/src/common.c +++ b/src/common.c @@ -214,22 +214,26 @@ int ceparseargs(const char *str){ #endif int parsehostname(char *hostname, struct clientparam *param, unsigned short port){ - char *sp; + char *sp,*se; if(!hostname || !*hostname)return 1; - if ( (sp = strchr(hostname, ':')) ) *sp = 0; + if(*hostname == '[') se=strchr(hostname, ']'); + if ( (sp = strchr(se?se:hostname, ':')) ) *sp = 0; + if(se){ + *se = 0; + } if(hostname != param->hostname){ if(param->hostname) myfree(param->hostname); - param->hostname = (unsigned char *)mystrdup(hostname); + param->hostname = (unsigned char *)mystrdup(hostname + (se!=0)); } if(sp){ port = atoi(sp+1); *sp = ':'; } - param->req.sin_port=htons(port); - param->req.sin_addr.s_addr = getip(param->hostname); - param->sins.sin_addr.s_addr = 0; - param->sins.sin_port = 0; + if(se) *se = ']'; + getip46(param->srv->family, param->hostname + (se!=0), (struct sockaddr *)¶m->req); + *SAPORT(¶m->req) = htons(port); + memset(¶m->sinsr, 0, sizeof(param->sinsr)); return 0; } @@ -318,7 +322,6 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char long timezone; unsigned delay; - struct in_addr tmpia; @@ -432,7 +435,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i++; } } - else i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64); + else i += myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf + i, 64); break; case 'N': @@ -461,14 +464,13 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char } break; case 'e': - tmpia.s_addr = param->extip; - i += myinet_ntop(AF_INET, &tmpia, (char *)buf + i, 64); + i += myinet_ntop(*SAFAMILY(¶m->sinsl), SAADDR(¶m->sinsl), (char *)buf + i, 64); break; case 'C': i += myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + i, 64); break; case 'R': - i += myinet_ntop(*SAFAMILY(¶m->sins), SAADDR(¶m->sins), (char *)buf + i, 64); + i += myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf + i, 64); break; case 'Q': i += myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + i, 64); @@ -482,11 +484,11 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += (int)strlen((char *)buf+i); break; case 'r': - sprintf((char *)buf+i, "%hu", ntohs(param->sins.sin_port)); + sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->sinsr))); i += (int)strlen((char *)buf+i); break; case 'q': - sprintf((char *)buf+i, "%hu", ntohs(param->req.sin_port)); + sprintf((char *)buf+i, "%hu", ntohs(*SAPORT(¶m->req))); i += (int)strlen((char *)buf+i); break; case 'I': @@ -595,58 +597,52 @@ void logsyslog(struct clientparam * param, const unsigned char *s) { #endif int doconnect(struct clientparam * param){ - SASIZETYPE size = sizeof(param->sins); - struct sockaddr_in bindsa; + SASIZETYPE size = sizeof(param->sinsr); - if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(param->req)) && + if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(¶m->req)) && *SAPORT(¶m->sincr) == *SAPORT(¶m->req)) return 519; if (param->operation == ADMIN || param->operation == DNSRESOLVE || param->operation == BIND || param->operation == UDPASSOC) return 0; if (param->remsock != INVALID_SOCKET){ - if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sins, &size)==-1) {return (15);} + if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &size)==-1) {return (15);} } else { struct linger lg; - if(!param->sins.sin_addr.s_addr) - if(!(param->sins.sin_addr.s_addr = param->req.sin_addr.s_addr)) return 100; - if(!param->sins.sin_port)param->sins.sin_port = param->req.sin_port; - if ((param->remsock=so._socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} + if(!memcmp(SAADDR(¶m->sinsr), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->sinsr))){ + if(!memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) return 100; + *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req); + memcpy(SAADDR(¶m->sinsr), SAADDR(¶m->req), SAADDRLEN(¶m->req)); + } + if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req); + if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); - memset(&bindsa, 0, sizeof(bindsa)); - bindsa.sin_family = AF_INET; - bindsa.sin_port = param->extport; - bindsa.sin_addr.s_addr = param->extip; - if (param->srv->targetport && !bindsa.sin_port && ntohs(*SAPORT(¶m->sincr)) > 1023) bindsa.sin_port = *SAPORT(¶m->sincr); - if(so._bind(param->remsock, (struct sockaddr*)&bindsa, sizeof(bindsa))==-1) { - memset(&bindsa, 0, sizeof(bindsa)); - bindsa.sin_family = AF_INET; - bindsa.sin_addr.s_addr = param->extip; - bindsa.sin_port = 0; - if(so._bind(param->remsock, (struct sockaddr*)&bindsa, sizeof(bindsa))==-1) { + if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); + else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); + if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { + if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); + else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { return 12; } } - param->sins.sin_family = AF_INET; if(param->operation >= 256 || (param->operation & CONNECT)){ #ifdef _WIN32 unsigned long ul = 1; #endif - if(so._connect(param->remsock,(struct sockaddr *)¶m->sins,sizeof(param->sins))) {return (13);} + if(so._connect(param->remsock,(struct sockaddr *)¶m->sinsr,sizeof(param->sinsr))) {return (13);} param->nconnects++; #ifdef _WIN32 ioctlsocket(param->remsock, FIONBIO, &ul); #else fcntl(param->remsock,F_SETFL,O_NONBLOCK); #endif - if(so._getsockname(param->remsock, (struct sockaddr *)&bindsa, &size)==-1) {return (15);} - param->extip = bindsa.sin_addr.s_addr; - } - else { - if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sins, &size)==-1) {return (15);} + size = sizeof(param->sinsl); } + if(so._getsockname(param->remsock, (struct sockaddr *)¶m->sinsl, &size)==-1) {return (15);} } return 0; } diff --git a/src/datatypes.c b/src/datatypes.c index 40b5649..75c6279 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -633,20 +633,12 @@ static void * ef_client_clisa(struct node * node){ return &((struct clientparam *)node->value) -> sincr; } -static void * ef_client_srvip(struct node * node){ - return &((struct clientparam *)node->value) -> sins.sin_addr.s_addr; +static void * ef_client_srvsa(struct node * node){ + return &((struct clientparam *)node->value) -> sinsr; } -static void * ef_client_reqip(struct node * node){ - return &((struct clientparam *)node->value) -> req.sin_addr.s_addr; -} - -static void * ef_client_reqport(struct node * node){ - return &((struct clientparam *)node->value) -> req.sin_port; -} - -static void * ef_client_srvport(struct node * node){ - return &((struct clientparam *)node->value) -> sins.sin_port; +static void * ef_client_reqsa(struct node * node){ + return &((struct clientparam *)node->value) -> req; } static void * ef_client_pwtype(struct node * node){ @@ -784,15 +776,13 @@ static struct property prop_client[] = { {prop_client + 10, "username", ef_client_username, TYPE_STRING, "client username"}, {prop_client + 11, "password", ef_client_password, TYPE_STRING, "client password"}, {prop_client + 12, "clisa", ef_client_clisa, TYPE_SA, "client sa"}, - {prop_client + 13, "srvip", ef_client_srvip, TYPE_IP, "target server ip"}, - {prop_client + 14, "srvport", ef_client_srvport, TYPE_PORT, "target server port"}, - {prop_client + 15, "reqip", ef_client_reqip, TYPE_IP, "requested server ip"}, - {prop_client + 16, "reqport", ef_client_reqport, TYPE_PORT, "requested server port"}, - {prop_client + 17, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, - {prop_client + 18, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, - {prop_client + 19, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, - {prop_client + 20, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, - {prop_client + 21, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, + {prop_client + 13, "srvsa", ef_client_srvsa, TYPE_IP, "target server sa"}, + {prop_client + 14, "reqsa", ef_client_reqsa, TYPE_IP, "requested server sa"}, + {prop_client + 15, "bytesin", ef_client_bytesin64, TYPE_UNSIGNED64, "bytes from server to client"}, + {prop_client + 16, "bytesout", ef_client_bytesout64, TYPE_UNSIGNED64, "bytes from client to server"}, + {prop_client + 17, "maxtrafin", ef_client_maxtrafin64, TYPE_UNSIGNED64, "maximum traffic allowed for download"}, + {prop_client + 18, "maxtrafout", ef_client_maxtrafout64, TYPE_UNSIGNED64, "maximum traffic allowed for upload"}, + {prop_client + 19, "pwtype", ef_client_pwtype, TYPE_INTEGER, "type of client password"}, {NULL, "next", ef_client_next, TYPE_CLIENT, "next"} diff --git a/src/dnspr.c b/src/dnspr.c index 945edcc..56e9d5b 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -43,10 +43,10 @@ void * dnsprchild(struct clientparam* param) { RETURN(818); } ioctlsocket(param->clisock, FIONBIO, &ul); - size = sizeof(struct sockaddr_in); - if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sins, &size)) {RETURN(21);}; + size = sizeof(param->sinsl); + if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sinsl, &size)) {RETURN(21);}; if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; - if(so._bind(param->clisock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) { + if(so._bind(param->clisock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) { RETURN(822); } @@ -136,20 +136,21 @@ void * dnsprchild(struct clientparam* param) { #else fcntl(param->remsock,F_SETFL,O_NONBLOCK); #endif - param->sins.sin_family = AF_INET; - param->sins.sin_port = htons(0); - param->sins.sin_addr.s_addr = htonl(0); - if(so._bind(param->remsock,(struct sockaddr *)¶m->sins,sizeof(struct sockaddr_in))) { + *SAFAMILY(¶m->sinsl) = AF_INET; + *SAPORT(¶m->sinsl) = htons(0); + *(unsigned long*)SAADDR(¶m->sinsl) = htonl(0); + if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) { RETURN(819); } - param->sins.sin_addr.s_addr = nservers[0]; - param->sins.sin_port = htons(53); - if(socksendto(param->remsock, (struct sockaddr *)¶m->sins, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ + *SAFAMILY(¶m->sinsr) = AF_INET; + *(unsigned long*)SAADDR(¶m->sinsr) = nservers[0]; + *SAPORT(¶m->sinsr) = htons(53); + if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ RETURN(820); } param->statscli64 += i; param->nwrites++; - len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sins, buf, BUFSIZE, 15000); + len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, buf, BUFSIZE, 15000); if(len <= 13) { RETURN(821); } diff --git a/src/ftp.c b/src/ftp.c index d6708f2..4f763bc 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -190,12 +190,14 @@ SOCKET ftpdata(struct clientparam *param){ if(sscanf(sb+1, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) return INVALID_SOCKET; rem = param->remsock; param->remsock = INVALID_SOCKET; - param->req.sin_family = AF_INET; - param->req.sin_port = param->sins.sin_port = htons((unsigned short)((b5<<8)^b6)); - param->req.sin_addr.s_addr = param->sins.sin_addr.s_addr = htonl((b1<<24)^(b2<<16)^(b3<<8)^b4); + memcpy(¶m->req,¶m->sinsr,sizeof(param->req)); + *SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((unsigned short)((b5<<8)^b6)); i = param->operation; param->operation = FTP_DATA; - if((param->res = (*param->srv->authfunc)(param))) return INVALID_SOCKET; + if((param->res = (*param->srv->authfunc)(param))) { + param->remsock = rem; + return INVALID_SOCKET; + } param->operation = i; s = param->remsock; param->remsock = rem; diff --git a/src/plugins/TrafficPlugin/TrafficPlugin.c b/src/plugins/TrafficPlugin/TrafficPlugin.c index d4da35d..09009a0 100644 --- a/src/plugins/TrafficPlugin/TrafficPlugin.c +++ b/src/plugins/TrafficPlugin/TrafficPlugin.c @@ -189,7 +189,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { port = starttrafcorrect->port; g_s = starttrafcorrect->p_service; if (starttrafcorrect->p_service == S_NOSERVICE) g_s = param->service; - if (starttrafcorrect->port <= 0) port = myhtons(param->sins.sin_port); + if (starttrafcorrect->port <= 0) port = myhtons(*SAPORT(¶m->sinsr)); #ifndef NOPSTDINT statssrv_before = param->statssrv64; @@ -199,7 +199,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { statscli_before = param->statscli; #endif rule++; - if (((g_s == param->service) && (port == myhtons(param->sins.sin_port))) || + if (((g_s == param->service) && (port == myhtons(*SAPORT(¶m->sinsr)))) || ( ((starttrafcorrect->type == UDP) && ((param->operation == UDPASSOC)|| (param->operation == DNSRESOLVE)|| @@ -240,7 +240,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { } if (DBGLEVEL == 1) { #ifndef NOPSTDINT - fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule); + fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(*SAPORT(¶m->sinsr)), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule); #else fprintf(stdout, "Port=%hd; Before: srv=%lu, cli=%lu; After: srv=%lu, cli=%lu; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule); #endif @@ -250,7 +250,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { } } if ((!ok) && (DBGLEVEL == 1)) { - fprintf(stdout, "No rules specifed: service=%d, port=%d, operation=%d", param->service, param->sins.sin_port,param->operation); + fprintf(stdout, "No rules specifed: service=%d, port=%d, operation=%d", param->service, *SAPORT(¶m->sinsr),param->operation); } origlogfunc(param, pz); } diff --git a/src/proxymain.c b/src/proxymain.c index eb3f91d..b903654 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -195,7 +195,7 @@ int MODULEMAINFUNC (int argc, char** argv){ break; case '4': case '6': - srv.family = atoi(argv[i]); + srv.family = atoi(argv[i]+1); break; case 'b': srv.bufsize = atoi(argv[i]+2); @@ -579,7 +579,7 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); - memcpy(¶m->sinsl, &srv->extsa, sizeof(param->sinsl)); + memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl)); } void srvfree(struct srvparam * srv){ diff --git a/src/version.h b/src/version.h index 030dff4..26dcb17 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141019215116" +#define BUILDDATE "141021055913" From f70e4adf47f7f41e1a99d4ffa296dab899a0d8db Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 3 Nov 2014 21:25:06 +0300 Subject: [PATCH 036/122] IPv6 bugfixes --- src/auth.c | 1 + src/common.c | 2 +- src/proxy.c | 4 ++-- src/proxy.h | 2 +- src/smtpp.c | 2 +- src/version.h | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/auth.c b/src/auth.c index e0b3d5e..cfbf500 100644 --- a/src/auth.c +++ b/src/auth.c @@ -268,6 +268,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } else if(!cur->redirport && cur->redirip) { unsigned short port = *SAPORT(¶m->sinsl); + memset(¶m->sinsl, 0, sizeof(param->sinsl)); *SAFAMILY(¶m->sinsl) = AF_INET; *(unsigned long *)SAADDR(¶m->sinsl) = cur->redirip; *SAPORT(¶m->sinsl) = port; diff --git a/src/common.c b/src/common.c index c8bd49e..a19ae56 100644 --- a/src/common.c +++ b/src/common.c @@ -599,7 +599,7 @@ void logsyslog(struct clientparam * param, const unsigned char *s) { int doconnect(struct clientparam * param){ SASIZETYPE size = sizeof(param->sinsr); - if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SASIZE(¶m->req)) && + if (*SAFAMILY(¶m->sincr) == *SAFAMILY(¶m->req) && !memcmp(SAADDR(¶m->sincr), SAADDR(¶m->req), SAADDRLEN(¶m->req)) && *SAPORT(¶m->sincr) == *SAPORT(¶m->req)) return 519; if (param->operation == ADMIN || param->operation == DNSRESOLVE || param->operation == BIND || param->operation == UDPASSOC) diff --git a/src/proxy.c b/src/proxy.c index 827ef85..1c073b8 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -132,8 +132,8 @@ char * proxy_stringtable[] = { NULL }; -#define BUFSIZE 4096 -#define LINESIZE 2048 +#define BUFSIZE 8192 +#define LINESIZE 4096 static void logurl(struct clientparam * param, char * buf, char * req, int ftp){ char *sb; diff --git a/src/proxy.h b/src/proxy.h index 3c689d3..66b6c4b 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -42,7 +42,7 @@ #define NOCOUNTOUT 8 #define UDPBUFSIZE 16384 -#define TCPBUFSIZE 4096 +#define TCPBUFSIZE 8192 #ifdef _WIN32 diff --git a/src/smtpp.c b/src/smtpp.c index 167b4e0..96b7a8c 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -292,7 +292,7 @@ void * smtppchild(struct clientparam* param) { CLEANRET: if(param->hostname&¶m->extusername) { - sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(*SAPORT(¶m->sinsr))==25)?0:':', *SAPORT(¶m->sinsr)); + sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, *SAPORT(¶m->sinsr)==25?0:':',ntohs(*SAPORT(¶m->sinsr))); (*param->srv->logfunc)(param, buf); } else (*param->srv->logfunc)(param, NULL); diff --git a/src/version.h b/src/version.h index 26dcb17..57d7b74 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141021055913" +#define BUILDDATE "141103212413" From 7acf3cc4ed61f86bcbb2ead707ac41e8220be64c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 3 Nov 2014 22:17:22 +0300 Subject: [PATCH 037/122] name resolution bugfixes --- Makefile.msvc | 14 +++++++------- Makefile.msvc64 | 14 +++++++------- src/common.c | 6 +++--- src/version.h | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Makefile.msvc b/Makefile.msvc index db8d4db..263c4af 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -28,16 +28,16 @@ TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin -VERFILE = 3proxyres.obj $(VERFILE) +VERFILE = $(VERFILE) + +#../3proxy.res: +# rc /fo../3proxy.res ../3proxy.rc + +#3proxyres.obj: ../3proxy.res +# cvtres /out:3proxyres.obj /MACHINE:I386 ../3proxy.res include Makefile.inc -../3proxy.res: - rc /fo../3proxy.res ../3proxy.rc - -3proxyres.obj: ../3proxy.res - cvtres /out:3proxyres.obj /MACHINE:X86 ../3proxy.res - allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) \ No newline at end of file diff --git a/Makefile.msvc64 b/Makefile.msvc64 index f4d5d3c..59d64a3 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -28,16 +28,16 @@ TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc64 PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin -VERFILE = 3proxyres.obj $(VERFILE) +VERFILE = $(VERFILE) + +#../3proxy.res: +# rc /fo../3proxy.res ../3proxy.rc + +#3proxyres.obj: ../3proxy.res +# cvtres /out:3proxyres.obj /MACHINE:X64 ../3proxy.res include Makefile.inc -../3proxy.res: - rc /fo../3proxy.res ../3proxy.rc - -3proxyres.obj: ../3proxy.res - cvtres /out:3proxyres.obj /MACHINE:X64 ../3proxy.res - allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) diff --git a/src/common.c b/src/common.c index a19ae56..fbd14fc 100644 --- a/src/common.c +++ b/src/common.c @@ -214,7 +214,7 @@ int ceparseargs(const char *str){ #endif int parsehostname(char *hostname, struct clientparam *param, unsigned short port){ - char *sp,*se; + char *sp=NULL,*se=NULL; if(!hostname || !*hostname)return 1; if(*hostname == '[') se=strchr(hostname, ']'); @@ -228,10 +228,10 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port } if(sp){ port = atoi(sp+1); - *sp = ':'; } - if(se) *se = ']'; getip46(param->srv->family, param->hostname + (se!=0), (struct sockaddr *)¶m->req); + if(se) *se = ']'; + if(sp) *sp = ':'; *SAPORT(¶m->req) = htons(port); memset(¶m->sinsr, 0, sizeof(param->sinsr)); return 0; diff --git a/src/version.h b/src/version.h index 57d7b74..de844fb 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141103212413" +#define BUILDDATE "141103221444" From 278955deef0321756911ca16ee79371a40a04045 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 9 Nov 2014 20:56:26 +0300 Subject: [PATCH 038/122] getip46 corrected --- src/common.c | 37 ++++++++++++++++++------------------- src/structures.h | 2 +- src/version.h | 2 +- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/common.c b/src/common.c index fbd14fc..70dfc38 100644 --- a/src/common.c +++ b/src/common.c @@ -734,8 +734,7 @@ unsigned long getip(unsigned char *name){ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ #ifndef NOIPV6 int ndots=0, ncols=0, nhex=0; - struct addrinfo *ai, *iter; - struct sockaddr *sa4=NULL, *sa6=NULL; + struct addrinfo *ai, hint; int i; if(!sa) return 0; @@ -766,31 +765,31 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ if(!name[i]){ if(ndots == 3 && ncols == 0 && nhex == 0){ *SAFAMILY(sa)=AF_INET; - return inet_pton(AF_INET, name, SAADDR(sa))? AF_INET : 0; + return inet_pton(AF_INET, name, SAADDR(sa))? (family==6? 0:AF_INET) : 0; } if(ncols >= 2) { *SAFAMILY(sa)=AF_INET6; - return inet_pton(AF_INET6, name, SAADDR(sa))? AF_INET6 : 0; + return inet_pton(AF_INET6, name, SAADDR(sa))?(family==4? 0:AF_INET6) : 0; } } - if (getaddrinfo(name, NULL, NULL, &ai)) return 0; - for(iter = ai; iter; iter = iter->ai_next){ - if(!sa4 && iter->ai_addr->sa_family == AF_INET) sa4 = iter->ai_addr; - if(!sa6 && iter->ai_addr->sa_family == AF_INET6) sa6 = iter->ai_addr; + memset(&hint, 0, sizeof(hint)); + hint.ai_family = (family == 6 || family == 64)?AF_INET6:AF_INET; + if (getaddrinfo(name, NULL, &hint, &ai)) { + if(family == 64 || family == 46){ + hint.ai_family = (family == 64)?AF_INET:AF_INET6; + if (getaddrinfo(name, NULL, &hint, &ai)) return 0; + } + else return 0; } - if(sa6 && ((family == 6) || (family == 64) || (family == 46 && !sa4))){ - *SAFAMILY(sa)=AF_INET6; - memcpy(SAADDR(sa), SAADDR(sa6), SAADDRLEN(sa)); + if(ai){ + if(ai->ai_addr->sa_family == AF_INET || ai->ai_addr->sa_family == AF_INET6){ + *SAFAMILY(sa)=ai->ai_addr->sa_family; + memcpy(SAADDR(sa), SAADDR(ai->ai_addr), SAADDRLEN(ai->ai_addr)); + freeaddrinfo(ai); + return *SAFAMILY(sa); + } freeaddrinfo(ai); - return AF_INET6; } - else if(sa4 && family != 6){ - *SAFAMILY(sa)=AF_INET; - memcpy(SAADDR(sa), SAADDR(sa4), SAADDRLEN(sa)); - freeaddrinfo(ai); - return AF_INET; - } - freeaddrinfo(ai); return 0; #endif } diff --git a/src/structures.h b/src/structures.h index a6c6e9e..06e8cdd 100644 --- a/src/structures.h +++ b/src/structures.h @@ -104,7 +104,7 @@ int #ifndef NOIPV6 #define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port) -#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) +#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.u.Byte : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) #define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4) #define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET) #define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) diff --git a/src/version.h b/src/version.h index de844fb..0bc5479 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141103221444" +#define BUILDDATE "141109205515" From b5bcb44e27f0889a9aee1eac011f987315165fda Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 9 Nov 2014 21:59:58 +0300 Subject: [PATCH 039/122] Fixes for NOIPV6 Fixes to compile without IPv6 support --- src/common.c | 14 ++++++++++++-- src/datatypes.c | 26 +++++++++++++++----------- src/proxymain.c | 4 ++++ src/socks.c | 6 +++++- src/udppm.c | 4 ++++ src/version.h | 2 +- 6 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/common.c b/src/common.c index 70dfc38..fdf586a 100644 --- a/src/common.c +++ b/src/common.c @@ -618,12 +618,22 @@ int doconnect(struct clientparam * param){ if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req); if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); - if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 + if(*SAFAMILY(¶m->sinsr) == AF_INET) +#endif + memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); +#endif if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { - if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 + if(*SAFAMILY(¶m->sinsr) == AF_INET) +#endif + memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); +#endif if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { return 12; } diff --git a/src/datatypes.c b/src/datatypes.c index 75c6279..19364c5 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -568,9 +568,11 @@ static void * ef_server_extsa(struct node * node){ return &((struct srvparam *)node->value) -> extsa; } +#ifndef NOIPV6 static void * ef_server_extsa6(struct node * node){ return &((struct srvparam *)node->value) -> extsa6; } +#endif static void * ef_server_acl(struct node * node){ return ((struct srvparam *)node->value) -> acl; @@ -747,18 +749,20 @@ static struct property prop_server[] = { {prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"}, {prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"}, {prop_server + 6, "extsa", ef_server_extsa, TYPE_SA, "ip address of external interface"}, + {prop_server + 7, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, + {prop_server + 8, "acl", ef_server_acl, TYPE_ACE, "access control list"}, + {prop_server + 9, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, + {prop_server + 10, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, + {prop_server + 11, "log", ef_server_log, TYPE_STRING, "type of logging"}, + {prop_server + 12, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, + {prop_server + 13, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, + {prop_server + 14, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, + {prop_server + 15, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, + {prop_server + 16, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, + {prop_server + 17, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, +#ifndef NOIPV6 {prop_server + 7, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"}, - {prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, - {prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"}, - {prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, - {prop_server + 11, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, - {prop_server + 12, "log", ef_server_log, TYPE_STRING, "type of logging"}, - {prop_server + 13, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, - {prop_server + 14, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, - {prop_server + 15, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, - {prop_server + 16, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, - {prop_server + 17, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, - {prop_server + 18, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, +#endif {NULL, "next", ef_server_next, TYPE_SERVER, "next"} }; diff --git a/src/proxymain.c b/src/proxymain.c index b903654..fb87e6f 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -579,7 +579,11 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); +#ifndef NOIPV6 memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl)); +#else + memcpy(¶m->sinsr, &srv->extsa, sizeof(param->sinsl)); +#endif } void srvfree(struct srvparam * srv){ diff --git a/src/socks.c b/src/socks.c index e8aa81e..928f494 100644 --- a/src/socks.c +++ b/src/socks.c @@ -153,8 +153,12 @@ void * sockschild(struct clientparam* param) { break; case 2: case 3: - + +#ifndef NOIPV6 memcpy(¶m->sinsl, *SAFAMILY(¶m->req)==AF_INET6? (struct sockaddr *)¶m->srv->extsa6:(struct sockaddr *)¶m->srv->extsa, SASIZE(¶m->req)); +#else + memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); +#endif if(!*SAPORT(¶m->sinsl))*SAPORT(¶m->sinsl) = port; if ((param->remsock=so._socket(*SAFAMILY(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} param->operation = command == 2?BIND:UDPASSOC; diff --git a/src/udppm.c b/src/udppm.c index 4a609fb..0d3ef9b 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -71,7 +71,11 @@ void * udppmchild(struct clientparam* param) { param->clisock = param->srv->srvsock; #endif +#ifndef NOIPV6 memcpy(¶m->sinsl, *SAFAMILY(¶m->req) == AF_INET? (struct sockaddr *)¶m->srv->extsa : (struct sockaddr *)¶m->srv->extsa6, SASIZE(¶m->req)); +#else + memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); +#endif *SAPORT(¶m->sinsl) = 0; if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsl), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {RETURN (12);} diff --git a/src/version.h b/src/version.h index 0bc5479..17afac9 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141109205515" +#define BUILDDATE "141109215219" From f82d1e296b09fc109e546e6f37ec14a50279d8ad Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 26 Nov 2014 01:50:14 +0300 Subject: [PATCH 040/122] Redirection fixes --- src/auth.c | 14 ++++++++------ src/common.c | 6 ++---- src/version.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/auth.c b/src/auth.c index cfbf500..912260c 100644 --- a/src/auth.c +++ b/src/auth.c @@ -267,14 +267,16 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ return 0; } else if(!cur->redirport && cur->redirip) { - unsigned short port = *SAPORT(¶m->sinsl); - memset(¶m->sinsl, 0, sizeof(param->sinsl)); - *SAFAMILY(¶m->sinsl) = AF_INET; - *(unsigned long *)SAADDR(¶m->sinsl) = cur->redirip; - *SAPORT(¶m->sinsl) = port; + unsigned short port = *SAPORT(¶m->sinsr); + memset(¶m->sinsl, 0, sizeof(param->sinsr)); + *SAFAMILY(¶m->sinsr) = AF_INET; + *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; + *SAPORT(¶m->sinsr) = port; } - else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsl) = cur->redirport; + else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsr) = cur->redirport; else if(*SAFAMILY(¶m->req) == AF_INET){ + memset(¶m->sinsr, 0, sizeof(param->sinsr)); + *SAFAMILY(¶m->sinsr) = AF_INET; *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; *SAPORT(¶m->sinsr) = cur->redirport; } diff --git a/src/common.c b/src/common.c index fdf586a..bfe1146 100644 --- a/src/common.c +++ b/src/common.c @@ -619,12 +619,10 @@ int doconnect(struct clientparam * param){ if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); #ifndef NOIPV6 - if(*SAFAMILY(¶m->sinsr) == AF_INET) + if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + else #endif memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); -#ifndef NOIPV6 - else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); -#endif if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { #ifndef NOIPV6 diff --git a/src/version.h b/src/version.h index 17afac9..07ee2a2 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141109215219" +#define BUILDDATE "141126014759" From e3645ee9711770cf744c84d954648eaa4f9be107 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 10 Dec 2014 19:00:35 +0300 Subject: [PATCH 041/122] ftppr and -h option handling fixed --- src/common.c | 1 + src/ftppr.c | 8 ++++---- src/version.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/common.c b/src/common.c index bfe1146..8052203 100644 --- a/src/common.c +++ b/src/common.c @@ -276,6 +276,7 @@ int parseconnusername(char *username, struct clientparam *param, int extpasswd, if(!username || !*username) return 1; if ((sb=strchr(username, conf.delimchar)) == NULL){ if(!param->hostname && param->remsock == INVALID_SOCKET) return 2; + if(param->hostname)parsehostname(param->hostname, param, port); return parseusername(username, param, extpasswd); } while ((se=strchr(sb+1, conf.delimchar)))sb=se; diff --git a/src/ftppr.c b/src/ftppr.c index fe1fb47..597b458 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -132,12 +132,12 @@ void * ftpprchild(struct clientparam* param) { (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[1]), (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[2]), (unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[3]), - (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]), - (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]) + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]), + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1]) ); else sprintf((char *)buf, "227 OK (127,0,0,1,%u,%u)\r\n", - (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]), - (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[3]) + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]), + (unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1]) ); } else { diff --git a/src/version.h b/src/version.h index 07ee2a2..9971bab 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141126014759" +#define BUILDDATE "141210181747" From 15f9f24f04ccbdc35a56d4b609329d4b0989f4f7 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 11 Dec 2014 03:06:34 +0300 Subject: [PATCH 042/122] Name resolution via TCP support Supports _real_ name resolution via parent proxy over TCP in nserver / dnspr. Can be used to create UDP->TCP name proxy, e.g. nserver 127.0.0.1/tcp nscache 65535 auth none dnspr auth iponly tcppm 53 77.88.8.8 53 now, all names are resolved via TCP connection to 77.88.8.8 (dns.yandex.ru). --- src/3proxy.c | 11 +++++++-- src/auth.c | 58 +++++++++++++++++++++++++++++++++++++----------- src/common.c | 2 +- src/dnspr.c | 45 ++++++++++++++++++++++++------------- src/proxy.h | 2 +- src/socks.c | 2 +- src/structures.h | 7 +++++- src/udppm.c | 4 ++-- src/version.h | 2 +- 9 files changed, 96 insertions(+), 37 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index a25b882..426e027 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1003,10 +1003,17 @@ static int h_flushusers(int argc, unsigned char **argv){ static int h_nserver(int argc, unsigned char **argv){ int res; + char *str; - for(res = 0; nservers[res] && res < MAXNSERVERS; res++); + for(res = 0; nservers[res].ip && res < MAXNSERVERS; res++); if(res < MAXNSERVERS) { - nservers[res] = getip(argv[1]); + if((str = strchr((char *)argv[1], '/'))) + *str = 0; + nservers[res].ip = getip(argv[1]); + if(str) { + nservers[res].usetcp = strstr(str + 1, "tcp")? 1:0; + *str = '/'; + } } resolvfunc = myresolver; return 0; diff --git a/src/auth.c b/src/auth.c index 912260c..4ad77ba 100644 --- a/src/auth.c +++ b/src/auth.c @@ -950,7 +950,8 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign return 0; } -unsigned long nservers[MAXNSERVERS] = {0, 0, 0, 0, 0}; +struct nserver nservers[MAXNSERVERS] = {{0,0}, {0,0}, {0,0}, {0,0}, {0,0}}; +int tcpresolve = 0; unsigned long authnserver; @@ -964,34 +965,53 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa return retval; } - for(i=0; (i<(makeauth && authnserver)? 1 : MAXNSERVERS) && ((makeauth && authnserver) || nservers[i]); i++){ + for(i=0; (i<(makeauth && authnserver)? 1 : MAXNSERVERS) && ((makeauth && authnserver) || nservers[i].ip); i++){ unsigned short nquery, nq, na; - unsigned char buf[4096], *s1, *s2; + unsigned char b[4098], *buf, *s1, *s2; int j, k, len, flen; SOCKET sock; unsigned ttl; time_t t; struct sockaddr_in sin, *sinsp; + int usetcp = 0; - memset(&sin, 0, sizeof(sin)); - sinsp = (param && !makeauth && *SAFAMILY(¶m->sinsr) == AF_INET)? (struct sockaddr_in *)¶m->sinsr : &sin; + buf = b+2; + + sinsp = (param && !makeauth)? (struct sockaddr_in *)¶m->sinsr : &sin; + memset(sinsp, 0, sizeof(struct sockaddr_in)); - if((sock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break; + if(makeauth && authnserver){ + if((sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break; + } + else { + usetcp = nservers[i].usetcp; + if((sock=so._socket(PF_INET, usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break; + } sinsp->sin_family = AF_INET; sinsp->sin_port = htons(0); sinsp->sin_addr.s_addr = htonl(0); - if(so._bind(sock,(struct sockaddr *)sinsp,sizeof(struct sockaddr_in))) { + if(so._bind(sock,(struct sockaddr *)sinsp,sizeof(struct sockaddr_in))){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); break; } - sinsp->sin_addr.s_addr = (makeauth && authnserver)?authnserver : nservers[i]; + if(makeauth && authnserver){ + sinsp->sin_addr.s_addr = authnserver; + } + else { + sinsp->sin_addr.s_addr = nservers[i].ip; + } sinsp->sin_port = htons(53); - + if(usetcp){ + if(so._connect(sock,(struct sockaddr *)sinsp,sizeof(struct sockaddr_in))) { + so._shutdown(sock, SHUT_RDWR); + so._closesocket(sock); + break; + } + } len = (int)strlen((char *)name); - nquery = myrand(name, len); - *(unsigned short*)buf = nquery; /* query id */ + *(unsigned short*)buf = htons(i+1); /* query id */ buf[2] = 1; /* recursive */ buf[3] = 0; buf[4] = 0; @@ -1012,6 +1032,12 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa buf[len++] = (makeauth == 1)? 0x0c : 0x01; /* PTR:host address */ buf[len++] = 0; buf[len++] = 1; /* INET */ + if(usetcp){ + buf-=2; + *(unsigned short*)buf = htons(len); + len+=2; + } + if(socksendto(sock, (struct sockaddr *)sinsp, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); @@ -1021,9 +1047,15 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa len = sockrecvfrom(sock, (struct sockaddr *) sinsp, buf, 4096, 15000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); - if(len <= 13) continue; + if(len <= 13) { + continue; + } if(param) param->statssrv64 += len; - if(*(unsigned short *)buf != nquery)continue; + if(usetcp){ + buf+=2; + len-=2; + } + if(*(unsigned short *)buf != htons(i+1))continue; if((na = buf[7] + (((unsigned short)buf[6])<<8)) < 1) { return 0; } diff --git a/src/common.c b/src/common.c index 8052203..753119f 100644 --- a/src/common.c +++ b/src/common.c @@ -617,7 +617,7 @@ int doconnect(struct clientparam * param){ memcpy(SAADDR(¶m->sinsr), SAADDR(¶m->req), SAADDRLEN(¶m->req)); } if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req); - if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} + if ((param->remsock=so._socket(SASOCK(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); #ifndef NOIPV6 if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); diff --git a/src/dnspr.c b/src/dnspr.c index 56e9d5b..55d1eee 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -14,11 +14,12 @@ #endif #define RETURN(xxx) { param->res = xxx; goto CLEANRET; } -#define BUFSIZE 4096 +#define BUFSIZE 16384 void * dnsprchild(struct clientparam* param) { unsigned long ip = 0; + unsigned char *bbuf; unsigned char *buf, *s1, *s2; char * host = NULL; unsigned char c; @@ -32,10 +33,11 @@ void * dnsprchild(struct clientparam* param) { #endif - if(!(buf = myalloc(BUFSIZE))){ + if(!(bbuf = myalloc(BUFSIZE+2))){ param->srv->fds.events = POLLIN; RETURN (21); } + buf = bbuf+2; size = sizeof(param->sincr); i = so._recvfrom(param->srv->srvsock, buf, BUFSIZE, 0, (struct sockaddr *)¶m->sincr, &size); #ifdef _WIN32 @@ -44,9 +46,9 @@ void * dnsprchild(struct clientparam* param) { } ioctlsocket(param->clisock, FIONBIO, &ul); size = sizeof(param->sinsl); - if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sinsl, &size)) {RETURN(21);}; + if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sincl, &size)) {RETURN(21);}; if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; - if(so._bind(param->clisock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) { + if(so._bind(param->clisock,(struct sockaddr *)¶m->sincl,sizeof(param->sincl))) { RETURN(822); } @@ -103,7 +105,7 @@ void * dnsprchild(struct clientparam* param) { memcpy(buf+len+12,(void *)&ip,4); len+=16; } - if(type == 0x0c) { + else if(type == 0x0c) { unsigned a, b, c, d; sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d); ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a); @@ -127,15 +129,10 @@ void * dnsprchild(struct clientparam* param) { } else ip = 0; } - if(!ip && nservers[0] && type!=1){ - if((param->remsock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { + if(!ip && nservers[0].ip && type!=1){ + if((param->remsock=so._socket(PF_INET, nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } -#ifdef _WIN32 - ioctlsocket(param->remsock, FIONBIO, &ul); -#else - fcntl(param->remsock,F_SETFL,O_NONBLOCK); -#endif *SAFAMILY(¶m->sinsl) = AF_INET; *SAPORT(¶m->sinsl) = htons(0); *(unsigned long*)SAADDR(¶m->sinsl) = htonl(0); @@ -143,8 +140,22 @@ void * dnsprchild(struct clientparam* param) { RETURN(819); } *SAFAMILY(¶m->sinsr) = AF_INET; - *(unsigned long*)SAADDR(¶m->sinsr) = nservers[0]; + *(unsigned long*)SAADDR(¶m->sinsr) = nservers[0].ip; *SAPORT(¶m->sinsr) = htons(53); + if(nservers[0].usetcp) { + if(so._connect(param->remsock,(struct sockaddr *)¶m->sinsr,sizeof(param->sinsr))) RETURN(830); + buf-=2; + *(unsigned short*)buf = htons(i); + i+=2; + } + else { +#ifdef _WIN32 +/* ioctlsocket(param->remsock, FIONBIO, &ul); */ +#else +/* fcntl(param->remsock,F_SETFL,O_NONBLOCK); */ +#endif + } + if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){ RETURN(820); } @@ -156,6 +167,10 @@ void * dnsprchild(struct clientparam* param) { } param->statssrv64 += len; param->nreads++; + if(nservers[0].usetcp) { + buf += 2; + len -= 2; + } if(buf[6] || buf[7]){ if(socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ RETURN(822); @@ -168,7 +183,7 @@ void * dnsprchild(struct clientparam* param) { buf[2] = 0x85; buf[3] = 0x83; } - usleep(SLEEPTIME); + /* usleep(SLEEPTIME); */ res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000); if(res != len){RETURN(819);} if(!ip) {RETURN(888);} @@ -186,7 +201,7 @@ CLEANRET: ); (*param->srv->logfunc)(param, buf); } - if(buf)myfree(buf); + if(bbuf)myfree(bbuf); if(host)myfree(host); #ifndef _WIN32 param->clisock = INVALID_SOCKET; diff --git a/src/proxy.h b/src/proxy.h index 66b6c4b..b5898d1 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -184,7 +184,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask); int myinet_ntop(int af, void *src, char *dst, socklen_t size); -extern unsigned long nservers[MAXNSERVERS]; +extern struct nserver nservers[MAXNSERVERS]; extern unsigned long authnserver; unsigned long getip(unsigned char *name); unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa); diff --git a/src/socks.c b/src/socks.c index 928f494..a813604 100644 --- a/src/socks.c +++ b/src/socks.c @@ -160,7 +160,7 @@ void * sockschild(struct clientparam* param) { memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); #endif if(!*SAPORT(¶m->sinsl))*SAPORT(¶m->sinsl) = port; - if ((param->remsock=so._socket(*SAFAMILY(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} + if ((param->remsock=so._socket(SASOCK(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} param->operation = command == 2?BIND:UDPASSOC; break; diff --git a/src/structures.h b/src/structures.h index 06e8cdd..00a5cd0 100644 --- a/src/structures.h +++ b/src/structures.h @@ -297,6 +297,11 @@ struct trafcount { time_t updated; }; +struct nserver { + unsigned long ip; + int usetcp; +}; + typedef void * (* PROXYFUNC)(struct clientparam *); typedef enum { @@ -623,7 +628,7 @@ extern struct sockfuncs so; struct pluginlink { struct symbol symbols; struct extparam *conf; - unsigned long *nservers; + struct nserver *nservers; int * linenum; struct auth *authfuncs; struct commands * commandhandlers; diff --git a/src/udppm.c b/src/udppm.c index 0d3ef9b..dc3d84f 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -57,7 +57,7 @@ void * udppmchild(struct clientparam* param) { param->cliinbuf = i; #ifdef _WIN32 - if((param->clisock=so._socket(*SAFAMILY(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { + if((param->clisock=so._socket(SASOCK(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; @@ -77,7 +77,7 @@ void * udppmchild(struct clientparam* param) { memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); #endif *SAPORT(¶m->sinsl) = 0; - if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsl), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} + if ((param->remsock=so._socket(SASOCK(¶m->sinsl), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {RETURN (12);} #ifdef _WIN32 ioctlsocket(param->remsock, FIONBIO, &ul); diff --git a/src/version.h b/src/version.h index 9971bab..dc2257c 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141210181747" +#define BUILDDATE "141211025611" From 8c95f4efcf3783d3a216b31da2ec080c3ead8992 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 11 Dec 2014 03:13:16 +0300 Subject: [PATCH 043/122] unused variables removed --- src/auth.c | 3 +-- src/version.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/auth.c b/src/auth.c index 4ad77ba..c149e1a 100644 --- a/src/auth.c +++ b/src/auth.c @@ -951,7 +951,6 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign } struct nserver nservers[MAXNSERVERS] = {{0,0}, {0,0}, {0,0}, {0,0}, {0,0}}; -int tcpresolve = 0; unsigned long authnserver; @@ -966,7 +965,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa } for(i=0; (i<(makeauth && authnserver)? 1 : MAXNSERVERS) && ((makeauth && authnserver) || nservers[i].ip); i++){ - unsigned short nquery, nq, na; + unsigned short nq, na; unsigned char b[4098], *buf, *s1, *s2; int j, k, len, flen; SOCKET sock; diff --git a/src/version.h b/src/version.h index dc2257c..c2572d8 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141211025611" +#define BUILDDATE "141211031205" From efdbaee29ffb5be4dda9ce6753b9223d702b239d Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 11 Dec 2014 03:49:26 +0300 Subject: [PATCH 044/122] return more random serial generation --- src/auth.c | 7 +++++-- src/version.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/auth.c b/src/auth.c index c149e1a..0525f95 100644 --- a/src/auth.c +++ b/src/auth.c @@ -973,6 +973,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa time_t t; struct sockaddr_in sin, *sinsp; int usetcp = 0; + unsigned short serial = 1; buf = b+2; @@ -1010,7 +1011,9 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa } } len = (int)strlen((char *)name); - *(unsigned short*)buf = htons(i+1); /* query id */ + + serial = myrand(name,len); + *(unsigned short*)buf = serial; /* query id */ buf[2] = 1; /* recursive */ buf[3] = 0; buf[4] = 0; @@ -1054,7 +1057,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa buf+=2; len-=2; } - if(*(unsigned short *)buf != htons(i+1))continue; + if(*(unsigned short *)buf != serial)continue; if((na = buf[7] + (((unsigned short)buf[6])<<8)) < 1) { return 0; } diff --git a/src/version.h b/src/version.h index c2572d8..b96ed57 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141211031205" +#define BUILDDATE "141211034918" From a4cb2f36b52bf66530433e837104b183347ec9ac Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 12 Dec 2014 23:51:47 +0300 Subject: [PATCH 045/122] -s switch support for dnspr dnspr -s switch to act as a simple DNS proxy and do not use 3proxy's resolver and DNS cache. --- src/3proxy.c | 1 + src/dnspr.c | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 426e027..63a95d5 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -721,6 +721,7 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.port = 53; childdef.isudp = 1; childdef.service = S_DNSPR; + childdef.helpmessage = " -s - simple DNS forwarding - do not use 3proxy resolver / name cache\n"; if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize) || resolvfunc == fakeresolver){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, dnspr will not work as expected\n", linenum); } diff --git a/src/dnspr.c b/src/dnspr.c index 55d1eee..f264fb7 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -82,7 +82,7 @@ void * dnsprchild(struct clientparam* param) { *s2 = (len - (int)(s2 - buf)) - 1; type = ((unsigned)buf[len+1])*256 + (unsigned)buf[len+2]; - if(type==1){ + if(type==1 && !param->srv->singlepacket){ ip = udpresolve((unsigned char *)host, &ttl, param, 0); } @@ -129,7 +129,7 @@ void * dnsprchild(struct clientparam* param) { } else ip = 0; } - if(!ip && nservers[0].ip && type!=1){ + if(!ip && nservers[0].ip){ if((param->remsock=so._socket(PF_INET, nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } diff --git a/src/version.h b/src/version.h index b96ed57..c993aa2 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141211034918" +#define BUILDDATE "141212231810" From 042fc2afde7f364bd395ef442609ecfcb8dc6d8e Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 03:56:01 +0300 Subject: [PATCH 046/122] nserver address may be given as IPv6 --- src/3proxy.c | 11 +++++----- src/auth.c | 52 +++++++++++++++++++++++++++++------------------- src/common.c | 2 ++ src/dnspr.c | 25 ++++++++++++----------- src/proxymain.c | 5 ++++- src/structures.h | 7 ++++++- src/version.h | 2 +- 7 files changed, 64 insertions(+), 40 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 63a95d5..fb99fb9 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1003,18 +1003,19 @@ static int h_flushusers(int argc, unsigned char **argv){ */ static int h_nserver(int argc, unsigned char **argv){ - int res; char *str; - for(res = 0; nservers[res].ip && res < MAXNSERVERS; res++); - if(res < MAXNSERVERS) { + if(numservers < MAXNSERVERS) { if((str = strchr((char *)argv[1], '/'))) *str = 0; - nservers[res].ip = getip(argv[1]); + if(!getip46(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1; + *SAPORT(&nservers[numservers].addr) = htons(53); if(str) { - nservers[res].usetcp = strstr(str + 1, "tcp")? 1:0; + nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0; *str = '/'; } + numservers++; + } resolvfunc = myresolver; return 0; diff --git a/src/auth.c b/src/auth.c index 0525f95..2204e04 100644 --- a/src/auth.c +++ b/src/auth.c @@ -950,61 +950,68 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign return 0; } -struct nserver nservers[MAXNSERVERS] = {{0,0}, {0,0}, {0,0}, {0,0}, {0,0}}; - +struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0},0}}; unsigned long authnserver; unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientparam* param, int makeauth){ - int i; + int i,n; unsigned long retval; if((retval = hashresolv(&dns_table, name, retttl))) { return retval; } - - for(i=0; (i<(makeauth && authnserver)? 1 : MAXNSERVERS) && ((makeauth && authnserver) || nservers[i].ip); i++){ + n = (makeauth && authnserver)? 1 : numservers; + for(i=0; isinsr : &sin; - memset(sinsp, 0, sizeof(struct sockaddr_in)); + sinsl = (param && !makeauth)? (struct sockaddr *)¶m->sinsl : (struct sockaddr *)&addr; + sinsr = (param && !makeauth)? (struct sockaddr *)¶m->sinsr : (struct sockaddr *)&addr; + memset(sinsl, 0, sizeof(addr)); + memset(sinsr, 0, sizeof(addr)); if(makeauth && authnserver){ if((sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) break; + *SAFAMILY(sinsl) = AF_INET; + *SAFAMILY(sinsr) = AF_INET; } else { usetcp = nservers[i].usetcp; - if((sock=so._socket(PF_INET, usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break; + if((sock=so._socket(SASOCK(&nservers[i].addr), usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break; + *SAFAMILY(sinsl) = *SAFAMILY(&nservers[i].addr); + } - sinsp->sin_family = AF_INET; - sinsp->sin_port = htons(0); - sinsp->sin_addr.s_addr = htonl(0); - if(so._bind(sock,(struct sockaddr *)sinsp,sizeof(struct sockaddr_in))){ + if(so._bind(sock,sinsl,sizeof(addr))){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); break; } if(makeauth && authnserver){ - sinsp->sin_addr.s_addr = authnserver; + ((struct sockaddr_in *)sinsr)->sin_addr.s_addr = authnserver; + ((struct sockaddr_in *)sinsr)->sin_port = htons(53); } else { - sinsp->sin_addr.s_addr = nservers[i].ip; + memcpy(sinsr, &nservers[i].addr, sizeof(addr)); } - sinsp->sin_port = htons(53); if(usetcp){ - if(so._connect(sock,(struct sockaddr *)sinsp,sizeof(struct sockaddr_in))) { + if(so._connect(sock,sinsr,sizeof(addr))) { so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); break; @@ -1040,13 +1047,13 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa len+=2; } - if(socksendto(sock, (struct sockaddr *)sinsp, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ + if(socksendto(sock, sinsr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); continue; } if(param) param->statscli64 += len; - len = sockrecvfrom(sock, (struct sockaddr *) sinsp, buf, 4096, 15000); + len = sockrecvfrom(sock, sinsr, buf, 4096, 15000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); if(len <= 13) { @@ -1054,8 +1061,13 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa } if(param) param->statssrv64 += len; if(usetcp){ - buf+=2; + unsigned short us; + us = ntohs(*(unsigned short*)buf); len-=2; + buf+=2; + if(us > 4096 || us < len || (us > len && sockrecvfrom(sock, sinsr, buf+len, us-len, 15000) != us-len)) { + continue; + } } if(*(unsigned short *)buf != serial)continue; if((na = buf[7] + (((unsigned short)buf[6])<<8)) < 1) { diff --git a/src/common.c b/src/common.c index 753119f..5ae3cac 100644 --- a/src/common.c +++ b/src/common.c @@ -88,6 +88,8 @@ struct extparam conf = { '@' }; +int numservers=0; + int myrand(void * entropy, int len){ int i; unsigned short init; diff --git a/src/dnspr.c b/src/dnspr.c index f264fb7..db7e9f1 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -40,13 +40,13 @@ void * dnsprchild(struct clientparam* param) { buf = bbuf+2; size = sizeof(param->sincr); i = so._recvfrom(param->srv->srvsock, buf, BUFSIZE, 0, (struct sockaddr *)¶m->sincr, &size); + size = sizeof(param->sinsl); + getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sincl, &size); #ifdef _WIN32 if((param->clisock=so._socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } ioctlsocket(param->clisock, FIONBIO, &ul); - size = sizeof(param->sinsl); - if(so._getsockname(param->srv->srvsock, (struct sockaddr *)¶m->sincl, &size)) {RETURN(21);}; if(so._setsockopt(param->clisock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&ul, sizeof(int))) {RETURN(820);}; if(so._bind(param->clisock,(struct sockaddr *)¶m->sincl,sizeof(param->sincl))) { RETURN(822); @@ -109,7 +109,7 @@ void * dnsprchild(struct clientparam* param) { unsigned a, b, c, d; sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d); ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a); - if(*SAFAMILY(¶m->srv->intsa) == AF_INET && ip == *(unsigned long*)SAADDR(¶m->srv->intsa)){ + if(*SAFAMILY(¶m->sincl) == AF_INET && ip == *(unsigned long*)SAADDR(¶m->sincl)){ buf[2] = 0x85; buf[3] = 0x80; buf[6] = 0; @@ -129,19 +129,16 @@ void * dnsprchild(struct clientparam* param) { } else ip = 0; } - if(!ip && nservers[0].ip){ - if((param->remsock=so._socket(PF_INET, nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { + if(!ip && numservers){ + if((param->remsock=so._socket(SASOCK(&nservers[0].addr), nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } - *SAFAMILY(¶m->sinsl) = AF_INET; - *SAPORT(¶m->sinsl) = htons(0); - *(unsigned long*)SAADDR(¶m->sinsl) = htonl(0); + memset(¶m->sinsl, 0, sizeof(param->sinsl)); + *SAFAMILY(¶m->sinsl) = *SAFAMILY(&nservers[0].addr); if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) { RETURN(819); } - *SAFAMILY(¶m->sinsr) = AF_INET; - *(unsigned long*)SAADDR(¶m->sinsr) = nservers[0].ip; - *SAPORT(¶m->sinsr) = htons(53); + memcpy(¶m->sinsr, &nservers[0].addr, sizeof(param->sinsr)); if(nservers[0].usetcp) { if(so._connect(param->remsock,(struct sockaddr *)¶m->sinsr,sizeof(param->sinsr))) RETURN(830); buf-=2; @@ -168,8 +165,13 @@ void * dnsprchild(struct clientparam* param) { param->statssrv64 += len; param->nreads++; if(nservers[0].usetcp) { + unsigned short us; + us = ntohs(*(unsigned short *)buf); + if(us > 4096) RETURN(833); buf += 2; len -= 2; + if(len < us) len += sockgetlinebuf(param, SERVER, buf+len, us - len, 0, conf.timeouts[SINGLEBYTE_L]); + if(len != us) RETURN(832); } if(buf[6] || buf[7]){ if(socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ @@ -183,7 +185,6 @@ void * dnsprchild(struct clientparam* param) { buf[2] = 0x85; buf[3] = 0x83; } - /* usleep(SLEEPTIME); */ res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000); if(res != len){RETURN(819);} if(!ip) {RETURN(888);} diff --git a/src/proxymain.c b/src/proxymain.c index fb87e6f..231d946 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -460,8 +460,9 @@ int MODULEMAINFUNC (int argc, char** argv){ so._setsockopt(new_sock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); so._setsockopt(new_sock, SOL_SOCKET, SO_OOBINLINE, (unsigned char *)&opt, sizeof(int)); } - else + else { srv.fds.events = 0; + } if(! (newparam = myalloc (sizeof(defparam)))){ if(!isudp) so._closesocket(new_sock); defparam.res = 21; @@ -896,6 +897,7 @@ void freeconf(struct extparam *confp){ confp->singlepacket = 0; confp->maxchild = 100; resolvfunc = NULL; + numservers = 0; acl = confp->acl; confp->acl = NULL; confp->logtime = confp->time = 0; @@ -927,6 +929,7 @@ void freeconf(struct extparam *confp){ for(i = 0; i < archiverc; i++) myfree(archiver[i]); myfree(archiver); } + } FILTER_ACTION handlereqfilters(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){ diff --git a/src/structures.h b/src/structures.h index 00a5cd0..b195213 100644 --- a/src/structures.h +++ b/src/structures.h @@ -298,9 +298,14 @@ struct trafcount { }; struct nserver { - unsigned long ip; +#ifndef NOIPV6 + struct sockaddr_in6 addr; +#else + struct sockaddr_in addr; +#endif int usetcp; }; +extern int numservers; typedef void * (* PROXYFUNC)(struct clientparam *); diff --git a/src/version.h b/src/version.h index c993aa2..1ae6423 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141212231810" +#define BUILDDATE "141213035229" From e39f4638cf2aa3ae44cb481f16771bd7ee9c6277 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 19:48:41 +0300 Subject: [PATCH 047/122] Corrected ACLs handling + network ranges in ACLS ACL handling corrected (affected all ACL-based operations like allow/deny/banlimin/etc). Network ranges like 10.0.0.0-10.0.0.1.64 are winally supported in ACLS. --- src/3proxy.c | 21 +++++++++++---------- src/auth.c | 8 ++++++-- src/common.c | 2 +- src/version.h | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index fb99fb9..76700b1 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1186,27 +1186,28 @@ int scanipl(unsigned char *arg, struct iplist *dst){ if(dash){ if(!getip46(46, dash+1, (struct sockaddr *)&sa)) return 2; memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa)); + if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3; return 0; } + memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)); if(slash){ addrlen = SAADDRLEN(&sa); masklen = atoi(slash+1); - if(masklen >= 0 && masklen<(addrlen*8)){ - int i, nbytes = masklen / 8, nbits = masklen % 8; - - for(i = addrlen; i; i--){ + if(masklen < 0 || masklen > (addrlen*8)) return 4; + else { + int i, nbytes = masklen / 8, nbits = (8 - (masklen % 8)) % 8; + + for(i = addrlen; i>(nbytes + (nbits > 0)); i--){ ((unsigned char *)&dst->ip_from)[i-1] = 0x00; ((unsigned char *)&dst->ip_to)[i-1] = 0xff; } - memcpy(&dst->ip_to, &dst->ip_from, addrlen - i); for(;nbits;nbits--){ - ((unsigned char *)&dst->ip_from)[i-1] &= (0x01<<(nbits-1)); - ((unsigned char *)&dst->ip_to)[i-1] |= (0x01<<(nbits-1)); + ((unsigned char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1)); + ((unsigned char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1)); } return 0; } } - memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)); return 0; } @@ -1257,7 +1258,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } memset(ipl, 0, sizeof(struct iplist)); if (scanipl(arg, ipl)) { - fprintf(stderr, "Invalid IP or CIDR, line %d\n", linenum); + fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); return(NULL); } } while((arg = (unsigned char *)strtok((char *)NULL, ","))); @@ -1315,7 +1316,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } memset(ipl, 0, sizeof(struct iplist)); if (scanipl(arg, ipl)) { - fprintf(stderr, "Invalid IP or CIDR, line %d\n", linenum); + fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); return(NULL); } } diff --git a/src/auth.c b/src/auth.c index 2204e04..113f4ce 100644 --- a/src/auth.c +++ b/src/auth.c @@ -313,14 +313,18 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } int IPInentry(struct sockaddr *sa, struct iplist *ipentry){ - int i, addrlen; + int addrlen; unsigned char *ip, *ipf, *ipt; + + ip = (unsigned char *)SAADDR(sa); ipf = (unsigned char *)&ipentry->ip_from; ipt = (unsigned char *)&ipentry->ip_to; + if(!sa || ! ipentry || *SAFAMILY(sa) != ipentry->family) return 0; addrlen = SAADDRLEN(sa); - for(i=0; iipt[i]) return 0; + + if(memcmp(ip,ipf,addrlen) < 0 || memcmp(ip,ipt,addrlen) > 0) return 0; return 1; } diff --git a/src/common.c b/src/common.c index 5ae3cac..69d1e5f 100644 --- a/src/common.c +++ b/src/common.c @@ -224,7 +224,7 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port if(se){ *se = 0; } - if(hostname != param->hostname){ + if(hostname != (char *)param->hostname){ if(param->hostname) myfree(param->hostname); param->hostname = (unsigned char *)mystrdup(hostname + (se!=0)); } diff --git a/src/version.h b/src/version.h index 1ae6423..e426bdc 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141213035229" +#define BUILDDATE "141213192542" From d2437975b7cacde0abf46056c0be1fb9748322fd Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 20:30:20 +0300 Subject: [PATCH 048/122] Fail IPv6 client in dnsauth before IPv6 for dnsauth is implemented --- src/auth.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/auth.c b/src/auth.c index 113f4ce..b544e1d 100644 --- a/src/auth.c +++ b/src/auth.c @@ -736,8 +736,12 @@ int userauth(struct clientparam * param){ int dnsauth(struct clientparam * param){ char buf[32]; + /* FIX IT */ - unsigned u = ntohl(*(unsigned long *)SAADDR(¶m->sincr)); + unsigned u ; + + if(*SAFAMILY(¶m->sincr)!=AF_INET) return 6; + u = ntohl(*(unsigned long *)SAADDR(¶m->sincr)); sprintf(buf, "%u.%u.%u.%u.in-addr.arpa", From 8a6632f0d1e578547679a4c8b45b49ad84c03d92 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 22:38:03 +0300 Subject: [PATCH 049/122] Support IPv6 for parent proxy Parent proxy can be on IPv6 network (except SOCKS4). --- src/3proxy.c | 9 ++++---- src/auth.c | 58 +++++++++++++++++++++++------------------------- src/common.c | 10 ++++++--- src/datatypes.c | 19 ++++++---------- src/socks.c | 4 ++-- src/structures.h | 10 +++++++-- src/udppm.c | 2 +- 7 files changed, 58 insertions(+), 54 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 76700b1..6fb239b 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1147,8 +1147,8 @@ static int h_parent(int argc, unsigned char **argv){ fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]); return(4); } - chains->redirip = getip(argv[3]); - chains->redirport = htons((unsigned short)atoi((char *)argv[4])); + if(!getip46(46, argv[3], (struct sockaddr *)&chains->addr)) return 5; + *SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4])); if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]); if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]); return 0; @@ -1523,13 +1523,14 @@ static int h_ace(int argc, unsigned char **argv){ switch(acl->action){ case REDIRECT: acl->chains = myalloc(sizeof(struct chain)); + memset(acl->chains, 0, sizeof(struct chain)); if(!acl->chains) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); return(2); } acl->chains->type = R_HTTP; - acl->chains->redirip = getip(argv[1]); - acl->chains->redirport = htons((unsigned short)atoi((char *)argv[2])); + if(!getip46(46, argv[1], (struct sockaddr *)&acl->chains->addr)) return 5; + *SAPORT(&acl->chains->addr) = htons((unsigned short)atoi((char *)argv[2])); acl->chains->weight = 1000; acl->chains->extuser = NULL; acl->chains->extpass = NULL; diff --git a/src/auth.c b/src/auth.c index b544e1d..ef1dbda 100644 --- a/src/auth.c +++ b/src/auth.c @@ -13,16 +13,13 @@ #define RECORDSIZE 18 -int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned long ip, unsigned short port){ +int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr){ unsigned char buf[1024]; - struct in_addr ina; int res; int len=0; unsigned char * user, *pass; - ina.s_addr = ip; - user = redir->extuser; pass = redir->extpass; if(user) { @@ -39,15 +36,17 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l case R_CONNECT: case R_CONNECTP: { - sprintf((char *)buf, "CONNECT "); + len = sprintf((char *)buf, "CONNECT "); if(redir->type == R_CONNECTP && param->hostname) { - len = 8 + sprintf((char *)buf + 8, "%.256s", param->hostname); + len =+ sprintf((char *)buf + len, "%.256s", param->hostname); } else { - len = 8 + myinet_ntop(AF_INET, &ina, (char *)buf+8, 256); + if(*SAFAMILY(addr) == AF_INET6) buf[len++] = '['; + len += myinet_ntop(AF_INET, SAADDR(addr), (char *)buf+8, 256); + if(*SAFAMILY(addr) == AF_INET6) buf[len++] = ']'; } len += sprintf((char *)buf + len, - ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(port)); + ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", *SAPORT(addr)); if(user){ unsigned char username[256]; len += sprintf((char *)buf + len, "Proxy-authorization: basic "); @@ -73,14 +72,15 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l case R_SOCKS4B: { + if(*SAFAMILY(addr) != AF_INET) return 44; buf[0] = 4; buf[1] = 1; - memcpy(buf+2, &port, 2); + memcpy(buf+2, SAPORT(addr), 2); if(redir->type == R_SOCKS4P && param->hostname) { buf[4] = buf[5] = buf[6] = 0; buf[7] = 3; } - else memcpy(buf+4, &ip, 4); + else memcpy(buf+4, SAADDR(addr), 4); if(!user)user = (unsigned char *)"anonymous"; len = (int)strlen((char *)user) + 1; memcpy(buf+8, user, len); @@ -162,11 +162,12 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, unsigned l len += 5; } else { - buf[3] = 1; - memcpy(buf+4, &ip, 4); - len = 8; + len = 3; + buf[len++] = (*SAFAMILY(addr) == AF_INET)? 1 : 4; + memcpy(buf+len, SAADDR(addr), SAADDRLEN(addr)); + len += SAADDRLEN(addr); } - memcpy(buf+len, &port, 2); + memcpy(buf+len, SAPORT(addr), 2); len += 2; if(socksend(param->remsock, buf, len, conf.timeouts[CHAIN_TO]) != len){ return 51; @@ -210,7 +211,9 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ if(param->remsock != INVALID_SOCKET) { return 0; } - if(!memcmp(SAADDR(¶m->req),"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",SAADDRLEN(¶m->req)) || !*SAPORT(¶m->req)) return 100; + if(SAISNULL(¶m->req) || !*SAPORT(¶m->req)) { + return 100; + } r2 = (myrand(param, sizeof(struct clientparam))%1000); @@ -231,7 +234,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ r2 = (myrand(param, sizeof(struct clientparam))%1000); } if(!connected){ - if(!cur->redirip && !cur->redirport){ + if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){ if(cur->extuser){ if(param->extusername) myfree(param->extusername); @@ -266,19 +269,14 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } return 0; } - else if(!cur->redirport && cur->redirip) { + else if(!*SAPORT(&cur->addr) && !SAISNULL(&cur->addr)) { unsigned short port = *SAPORT(¶m->sinsr); - memset(¶m->sinsl, 0, sizeof(param->sinsr)); - *SAFAMILY(¶m->sinsr) = AF_INET; - *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; + memcpy(¶m->sinsr, &cur->addr, SASIZE(&cur->addr)); *SAPORT(¶m->sinsr) = port; } - else if(!cur->redirip && cur->redirport) *SAPORT(¶m->sinsr) = cur->redirport; - else if(*SAFAMILY(¶m->req) == AF_INET){ - memset(¶m->sinsr, 0, sizeof(param->sinsr)); - *SAFAMILY(¶m->sinsr) = AF_INET; - *(unsigned long *)SAADDR(¶m->sinsr) = cur->redirip; - *SAPORT(¶m->sinsr) = cur->redirport; + else if(SAISNULL(&cur->addr) && *SAPORT(&cur->addr)) *SAPORT(¶m->sinsr) = *SAPORT(&cur->addr); + else { + memcpy(¶m->sinsr, &cur->addr, SASIZE(&cur->addr)); } if((res = alwaysauth(param))){ @@ -286,7 +284,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } } else { - res = (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, cur->redirip, cur->redirport):0; + res = (redir)?clientnegotiate(redir, param, (struct sockaddr *)&cur->addr):0; if(res) return res; } redir = cur; @@ -309,7 +307,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } if(!connected) return 9; - return (redir && *SAFAMILY(¶m->req) == AF_INET)?clientnegotiate(redir, param, *(unsigned long *)SAADDR(¶m->req), *SAPORT(¶m->req)):0; + return (redir)?clientnegotiate(redir, param, (struct sockaddr *)¶m->req):0; } int IPInentry(struct sockaddr *sa, struct iplist *ipentry){ @@ -347,7 +345,7 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){ } if(!ipentry) return 0; } - if((acentry->dst && memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) || (acentry->dstnames && param->hostname)) { + if((acentry->dst && SAISNULL(¶m->req)) || (acentry->dstnames && param->hostname)) { for(ipentry = acentry->dst; ipentry; ipentry = ipentry->next) if(IPInentry((struct sockaddr *)¶m->req, ipentry)) { break; @@ -596,7 +594,7 @@ int checkACL(struct clientparam * param){ if(param->operation < 256 && !(param->operation & CONNECT)){ continue; } - if(param->redirected && acentry->chains && !acentry->chains->redirip && !acentry->chains->redirport) { + if(param->redirected && acentry->chains && SAISNULL(&acentry->chains->addr) && !*SAPORT(&acentry->chains->addr)) { continue; } memcpy(&dup, acentry, sizeof(struct ace)); diff --git a/src/common.c b/src/common.c index 69d1e5f..1a0006f 100644 --- a/src/common.c +++ b/src/common.c @@ -36,7 +36,7 @@ int myinet_ntop(int af, void *src, char *dst, socklen_t size){ } *dst = 0; inet_ntop(af, src, dst, size); - return strlen(dst); + return (int)strlen(dst); #endif } @@ -90,6 +90,8 @@ struct extparam conf = { int numservers=0; +char* NULLADDR="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + int myrand(void * entropy, int len){ int i; unsigned short init; @@ -613,8 +615,10 @@ int doconnect(struct clientparam * param){ else { struct linger lg; - if(!memcmp(SAADDR(¶m->sinsr), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->sinsr))){ - if(!memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) return 100; + if(SAISNULL(¶m->sinsr)){ + if(SAISNULL(¶m->req)) { + return 100; + } *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req); memcpy(SAADDR(¶m->sinsr), SAADDR(¶m->req), SAADDRLEN(¶m->req)); } diff --git a/src/datatypes.c b/src/datatypes.c index 19364c5..4c51ed9 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -344,12 +344,8 @@ static void * ef_chain_type(struct node * node){ } } -static void * ef_chain_ip(struct node * node){ - return &((struct chain *)node->value) -> redirip; -} - -static void * ef_chain_port(struct node * node){ - return &((struct chain *)node->value) -> redirport; +static void * ef_chain_addr(struct node * node){ + return &((struct chain *)node->value) -> addr; } static void * ef_chain_weight(struct node * node){ @@ -690,12 +686,11 @@ static struct property prop_pwlist[] = { }; static struct property prop_chain[] = { - {prop_chain + 1, "ip", ef_chain_ip, TYPE_IP, "parent ip address"}, - {prop_chain + 2, "port", ef_chain_port, TYPE_PORT, "parent port"}, - {prop_chain + 3, "type", ef_chain_type, TYPE_STRING, "parent type"}, - {prop_chain + 4, "weight", ef_chain_weight, TYPE_SHORT, "parent weight 0-1000"}, - {prop_chain + 5, "user", ef_chain_user, TYPE_STRING, "parent login"}, - {prop_chain + 6, "password", ef_chain_password, TYPE_STRING, "parent password"}, + {prop_chain + 1, "addr", ef_chain_addr, TYPE_SA, "parent address"}, + {prop_chain + 2, "type", ef_chain_type, TYPE_STRING, "parent type"}, + {prop_chain + 3, "weight", ef_chain_weight, TYPE_SHORT, "parent weight 0-1000"}, + {prop_chain + 4, "user", ef_chain_user, TYPE_STRING, "parent login"}, + {prop_chain + 5, "password", ef_chain_password, TYPE_STRING, "parent password"}, {NULL, "next", ef_chain_next, TYPE_CHAIN, "next"} }; diff --git a/src/socks.c b/src/socks.c index a813604..6b68557 100644 --- a/src/socks.c +++ b/src/socks.c @@ -102,7 +102,7 @@ void * sockschild(struct clientparam* param) { *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = (c == 1)? AF_INET:AF_INET6; memcpy(SAADDR(¶m->sinsr), buf, size); memcpy(SAADDR(¶m->req), buf, size); - if(command==1 && !memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", size)) { + if(command==1 && SAISNULL(¶m->req)) { RETURN(421); } myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf, 64); @@ -269,7 +269,7 @@ fflush(stderr); param->res = 462; break; } - if(!memcmp(SAADDR(¶m->req),"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",SAADDRLEN(¶m->req)) && + if(SAISNULL(¶m->req) && memcmp(SAADDR(¶m->req),SAADDR(¶m->sinsr),SAADDRLEN(¶m->req))) { param->res = 470; break; diff --git a/src/structures.h b/src/structures.h index b195213..4b7567c 100644 --- a/src/structures.h +++ b/src/structures.h @@ -108,14 +108,17 @@ int #define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4) #define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET) #define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) +#define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.u.Byte : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4))) #else #define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port) #define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) #define SAADDRLEN(sa) (4) #define SASOCK(sa) (PF_INET) #define SASIZE(sa) (sizeof(struct sockaddr_in)) +#define SAISNULL(sa) (((struct sockaddr_in *)sa)->sin_addr.s_addr == 0) #endif +extern char* NULLADDR; typedef enum { CLIENT, SERVER @@ -228,8 +231,11 @@ typedef enum { struct chain { struct chain * next; int type; - unsigned long redirip; - unsigned short redirport; +#ifndef NOIPV6 + struct sockaddr_in6 addr; +#else + struct sockaddr_in addr; +#endif unsigned short weight; unsigned char * extuser; unsigned char * extpass; diff --git a/src/udppm.c b/src/udppm.c index dc3d84f..9be913a 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -40,7 +40,7 @@ void * udppmchild(struct clientparam* param) { if(!param->hostname)parsehostname((char *)param->srv->target, param, ntohs(param->srv->targetport)); - if (!memcmp(SAADDR(¶m->req), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", SAADDRLEN(¶m->req))) { + if (SAISNULL(¶m->req)) { param->srv->fds.events = POLLIN; RETURN (100); } From 50db0015d3582ebb32761cf7f2208ce79a195afe Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 22:56:31 +0300 Subject: [PATCH 050/122] IPv6 support for authnserver --- src/3proxy.c | 10 +++++++++- src/auth.c | 35 +++++++++-------------------------- src/plugins.c | 2 ++ src/proxy.h | 2 +- src/structures.h | 1 + src/version.h | 2 +- 6 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 6fb239b..5909b2a 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1022,8 +1022,16 @@ static int h_nserver(int argc, unsigned char **argv){ } static int h_authnserver(int argc, unsigned char **argv){ + char *str; - authnserver = getip(argv[1]); + if((str = strchr((char *)argv[1], '/'))) + *str = 0; + if(!getip46(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1; + *SAPORT(&authnserver.addr) = htons(53); + if(str) { + authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; + *str = '/'; + } return 0; } diff --git a/src/auth.c b/src/auth.c index ef1dbda..2c2e5eb 100644 --- a/src/auth.c +++ b/src/auth.c @@ -957,7 +957,7 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign } struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0},0}}; -unsigned long authnserver; +struct nserver authnserver; unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientparam* param, int makeauth){ @@ -968,7 +968,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa if((retval = hashresolv(&dns_table, name, retttl))) { return retval; } - n = (makeauth && authnserver)? 1 : numservers; + n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers; for(i=0; isin_addr.s_addr = authnserver; - ((struct sockaddr_in *)sinsr)->sin_port = htons(53); + if(makeauth && !SAISNULL(&authnserver.addr)){ + memcpy(sinsr, &authnserver.addr, sizeof(addr)); } else { memcpy(sinsr, &nservers[i].addr, sizeof(addr)); @@ -1292,18 +1289,4 @@ void logsql(struct clientparam * param, const unsigned char *s) { } #endif - -#ifdef WITHMAIN -int main(int argc, unsigned char * argv[]) { - unsigned ip = 0; - WSADATA wd; - WSAStartup(MAKEWORD( 1, 1 ), &wd); - if(argc == 2)ip=getip(argv[1]); - if(!hp) { - printf("Not found"); - return 0; - } - printf("Name: '%s'\n", getnamebyip(ip); - return 0; -} -#endif + \ No newline at end of file diff --git a/src/plugins.c b/src/plugins.c index 7820822..098aab7 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -79,6 +79,7 @@ struct symbol symbols[] = { {symbols+48, "parsestr", (void *) parsestr}, {symbols+49, "make_ace", (void *) make_ace}, {symbols+50, "freeacl", (void *) freeacl}, + {symbols+51, "getip46", (void *) getip46}, {NULL, "", NULL} }; @@ -109,6 +110,7 @@ struct pluginlink pluginlink = { dobuf2, scanaddr, getip, + getip46, sockmap, ACLmatches, alwaysauth, diff --git a/src/proxy.h b/src/proxy.h index b5898d1..9e13999 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -185,7 +185,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask); int myinet_ntop(int af, void *src, char *dst, socklen_t size); extern struct nserver nservers[MAXNSERVERS]; -extern unsigned long authnserver; +struct nserver authnserver; unsigned long getip(unsigned char *name); unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa); unsigned long myresolver(unsigned char *); diff --git a/src/structures.h b/src/structures.h index 4b7567c..2d8f046 100644 --- a/src/structures.h +++ b/src/structures.h @@ -655,6 +655,7 @@ struct pluginlink { int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format); int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask); unsigned long (*getip)(unsigned char *name); + unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa); int (*sockmap)(struct clientparam * param, int timeo); int (*ACLMatches)(struct ace* acentry, struct clientparam * param); int (*alwaysauth)(struct clientparam * param); diff --git a/src/version.h b/src/version.h index e426bdc..7e397da 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141213192542" +#define BUILDDATE "141213225630" From e37a7f48d7fdb0729260051f0f1d2297bb5bded8 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 13 Dec 2014 23:20:00 +0300 Subject: [PATCH 051/122] Older CVS comments removed --- Makefile.Linux | 1 - Makefile.Solaris | 1 - Makefile.Solaris-gcc | 1 - Makefile.ccc | 1 - Makefile.debug | 1 - Makefile.inc | 1 - Makefile.intl | 1 - Makefile.msvc | 1 - Makefile.msvc64 | 1 - Makefile.msvcCE | 1 - Makefile.unix | 1 - Makefile.win | 1 - Makefile.winCE | 1 - Release.notes | 1 - cfg/0.scenario.txt | 1 - cfg/3proxy.cfg.sample | 1 - cfg/counters.sample | 1 - copying | 1 - doc/html/faqe.html | 3 --- doc/html/faqr.html | 3 --- doc/html/howtoe.html | 1 - doc/html/howtor.html | 3 --- doc/html/securityen.html | 1 - doc/ru/example1.txt | 1 - doc/ru/iodbc.txt | 1 - src/3proxy.c | 1 - src/Makefile.inc | 1 - src/auth.c | 1 - src/base64.c | 1 - src/common.c | 1 - src/countersutil.c | 1 - src/datatypes.c | 1 - src/dighosts.c | 1 - src/dnspr.c | 1 - src/ftp.c | 1 - src/ftppr.c | 1 - src/icqpr.c | 1 - src/libs/md4.c | 2 -- src/msnpr.c | 1 - src/myalloc.c | 1 - src/mycrypt.c | 1 - src/ntlm.c | 1 - src/plugins.c | 1 - src/plugins/FilePlugin/FilePlugin.c | 1 - src/plugins/PCREPlugin/pcre_plugin.c | 1 - src/plugins/SSLPlugin/ssl_plugin.c | 1 - src/plugins/TransparentPlugin/transparent_plugin.c | 1 - src/plugins/WindowsAuthentication/WindowsAuthentication.c | 1 - src/plugins/utf8tocp1251/utf8tocp1251.c | 1 - src/pop3p.c | 1 - src/proxy.c | 1 - src/proxy.h | 1 - src/proxymain.c | 1 - src/smtpp.c | 1 - src/sockmap.c | 1 - src/socks.c | 1 - src/stringtable.c | 1 - src/tcppm.c | 1 - src/udppm.c | 1 - src/version.h | 2 +- src/webadmin.c | 1 - 61 files changed, 1 insertion(+), 68 deletions(-) diff --git a/Makefile.Linux b/Makefile.Linux index 9754446..6836464 100644 --- a/Makefile.Linux +++ b/Makefile.Linux @@ -1,4 +1,3 @@ -#$Id: Makefile.Linux,v 1.24 2014-04-07 20:34:57 vlad Exp $ # # 3 proxy Makefile for GCC/Linux/Cygwin # diff --git a/Makefile.Solaris b/Makefile.Solaris index 34c89ac..31644a7 100644 --- a/Makefile.Solaris +++ b/Makefile.Solaris @@ -1,4 +1,3 @@ -#$Id: Makefile.Solaris,v 1.18 2008/09/30 13:58:44 vlad Exp $ # # 3 proxy Makefile for Solaris/SunCC # diff --git a/Makefile.Solaris-gcc b/Makefile.Solaris-gcc index ac8e730..393d3ce 100644 --- a/Makefile.Solaris-gcc +++ b/Makefile.Solaris-gcc @@ -1,4 +1,3 @@ -#$Id: Makefile.Solaris-gcc,v 1.14 2008/09/30 13:58:44 vlad Exp $ # # 3 proxy Makefile for Solaris/gcc # diff --git a/Makefile.ccc b/Makefile.ccc index d350619..78bdf27 100644 --- a/Makefile.ccc +++ b/Makefile.ccc @@ -1,4 +1,3 @@ -#$Id: Makefile.ccc,v 1.12 2007/04/10 16:29:25 vlad Exp $ # # 3 proxy Makefile for Compaq C Compiler # diff --git a/Makefile.debug b/Makefile.debug index 99259ff..f9aabc5 100644 --- a/Makefile.debug +++ b/Makefile.debug @@ -1,4 +1,3 @@ -#$Id: Makefile.debug,v 1.7 2007/04/18 05:33:19 vlad Exp $ # # 3 proxy Makefile for Microsoft Visual C compiler (for both make and nmake) # diff --git a/Makefile.inc b/Makefile.inc index d3bb6eb..4e088ee 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -1,4 +1,3 @@ -#$Id: Makefile.inc,v 1.3 2007/01/23 16:00:26 vlad Exp $ # # 3 proxy common Makefile # diff --git a/Makefile.intl b/Makefile.intl index 8d50fce..56ab7d9 100644 --- a/Makefile.intl +++ b/Makefile.intl @@ -1,4 +1,3 @@ -#$Id: Makefile.intl,v 1.8 2007/07/21 18:47:00 vlad Exp $ # # 3 proxy Makefile for Intel C compiler for Windows (for both make and nmake) # diff --git a/Makefile.msvc b/Makefile.msvc index 263c4af..9e27291 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -1,4 +1,3 @@ -#$Id: Makefile.msvc,v 1.17 2010-11-11 14:44:11 v.dubrovin Exp $ # # 3 proxy Makefile for Microsoft Visual C compiler (for both make and nmake) # diff --git a/Makefile.msvc64 b/Makefile.msvc64 index 59d64a3..d6dced7 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -1,4 +1,3 @@ -#$Id: Makefile.msvc64,v 1.14 2007/07/21 18:47:05 vlad Exp $ # # 3 proxy Makefile for Microsoft Visual C compiler (for both make and nmake) # diff --git a/Makefile.msvcCE b/Makefile.msvcCE index 8dc70a7..1e4056c 100644 --- a/Makefile.msvcCE +++ b/Makefile.msvcCE @@ -1,4 +1,3 @@ -#$Id: Makefile.msvc,v 1.14 2007/07/21 18:47:02 vlad Exp $ # # 3 proxy Makefile for Microsoft Visual C compiler (for both make and nmake) # diff --git a/Makefile.unix b/Makefile.unix index 1be4eba..0a4f458 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -1,4 +1,3 @@ -#$Id: Makefile.unix,v 1.20 2007/04/10 16:29:25 vlad Exp $ # # 3 proxy Makefile for GCC/Unix # diff --git a/Makefile.win b/Makefile.win index 7a1870d..edcb889 100644 --- a/Makefile.win +++ b/Makefile.win @@ -1,4 +1,3 @@ -#$Id: Makefile.win,v 1.9 2007/08/20 15:26:27 vlad Exp $ # # 3 proxy Makefile for GCC/windows # diff --git a/Makefile.winCE b/Makefile.winCE index 15d166a..0d5213d 100644 --- a/Makefile.winCE +++ b/Makefile.winCE @@ -1,4 +1,3 @@ -#$Id: Makefile.win,v 1.9 2007/08/20 15:26:27 vlad Exp $ # # 3 proxy Makefile for GCC/windows # diff --git a/Release.notes b/Release.notes index 3171f1f..e1bb2eb 100644 --- a/Release.notes +++ b/Release.notes @@ -104,4 +104,3 @@ - Addon antiviral, HTTP cache filters modules, authentication modules for different protocols (RADIUS, PAM etc). -$Id: Release.notes,v 1.9 2014-04-07 21:24:42 vlad Exp $ \ No newline at end of file diff --git a/cfg/0.scenario.txt b/cfg/0.scenario.txt index 4b89b41..0713f6d 100644 --- a/cfg/0.scenario.txt +++ b/cfg/0.scenario.txt @@ -15,4 +15,3 @@ on the provider's Web server. Provider has proxy server 10.1.2.5. Traffic from proxy server is not free, but is cheaper than traffic from non-free networks. -$Id: 0.scenario.txt,v 1.2 2004/07/23 13:33:39 vlad Exp $ \ No newline at end of file diff --git a/cfg/3proxy.cfg.sample b/cfg/3proxy.cfg.sample index ed63303..b8063c2 100644 --- a/cfg/3proxy.cfg.sample +++ b/cfg/3proxy.cfg.sample @@ -199,4 +199,3 @@ admin # now we needn't any root rights. We can chroot and setgid/setuid. -###$Id: 3proxy.cfg.sample,v 1.7 2006/11/18 14:37:06 vlad Exp $####### diff --git a/cfg/counters.sample b/cfg/counters.sample index 03e537e..185d7a2 100644 --- a/cfg/counters.sample +++ b/cfg/counters.sample @@ -50,4 +50,3 @@ internal 127.0.0.1 allow user1 admin -#$Id: counters.sample,v 1.2 2004/07/23 13:33:39 vlad Exp $ \ No newline at end of file diff --git a/copying b/copying index 6cf2b65..10d4184 100644 --- a/copying +++ b/copying @@ -59,4 +59,3 @@ terms of compatible license, including: http://www.gnu.org/licenses/lgpl.txt -$Id: License,v 1.3 2007/04/05 11:59:47 vlad Exp $ diff --git a/doc/html/faqe.html b/doc/html/faqe.html index a4ea57c..581100e 100644 --- a/doc/html/faqe.html +++ b/doc/html/faqe.html @@ -153,6 +153,3 @@ A: First, I'm not programmer. Second, 3proxy was 'proof of concept' in reply for

Q: Why do you use insecure strcpy, sprintf, etc?

A: Why not? I try to use insecure function in secure manner. You're welcome to look for vulnerabilities. -
-$Id: faqe.html,v 1.10 2007/07/31 08:42:38 vlad Exp $
-
\ No newline at end of file diff --git a/doc/html/faqr.html b/doc/html/faqr.html index 0e85252..c377706 100644 --- a/doc/html/faqr.html +++ b/doc/html/faqr.html @@ -278,6 +278,3 @@ пугать.

-
-$Id: faqr.html,v 1.28 2007/09/25 09:47:13 vlad Exp $
-
\ No newline at end of file diff --git a/doc/html/howtoe.html b/doc/html/howtoe.html index a8a0d33..438aebd 100644 --- a/doc/html/howtoe.html +++ b/doc/html/howtoe.html @@ -832,4 +832,3 @@ You can control 3proxy service via "Services" administration ot via "net" comman -
$Id: howtoe.html,v 1.41 2009/02/02 10:04:49 vlad Exp $
\ No newline at end of file diff --git a/doc/html/howtor.html b/doc/html/howtor.html index 4c75e23..788bcd5 100644 --- a/doc/html/howtor.html +++ b/doc/html/howtor.html @@ -1026,6 +1026,3 @@ Только не пытайтесь задавать какие-либо вопросы, если вы просто не поняли этот HowTo. -
-$Id: howtor.html,v 1.40 2010/01/21 13:34:20 v.dubrovin Exp $
-
\ No newline at end of file diff --git a/doc/html/securityen.html b/doc/html/securityen.html index 4a3db7e..1482bb3 100644 --- a/doc/html/securityen.html +++ b/doc/html/securityen.html @@ -34,4 +34,3 @@ ODBC logging to prevent SQL and log record injections.

-

$Id: securityen.html,v 1.4 2007/05/07 09:16:51 vlad Exp $
\ No newline at end of file diff --git a/doc/ru/example1.txt b/doc/ru/example1.txt index 4f7df15..7c426a8 100644 --- a/doc/ru/example1.txt +++ b/doc/ru/example1.txt @@ -96,4 +96,3 @@ setuid 65534 рПУМЕ ФПЗП ЛБЛ НЩ УПЪДБМЙ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ УЕТЧЕТБ, ЪБРХУЛБЕН 3proxy ЛПНБОДПК: /usr/local/3proxy/3proxy /usr/local/3proxy/3proxy.cfg -$Id: example1.txt,v 1.7 2007/04/20 19:58:42 vlad Exp $ diff --git a/doc/ru/iodbc.txt b/doc/ru/iodbc.txt index 7397978..627bb3e 100644 --- a/doc/ru/iodbc.txt +++ b/doc/ru/iodbc.txt @@ -98,4 +98,3 @@ LIBS = -L /usr/local/lib -lodbc make clean make -f Makefile.unix -$Id: iodbc.txt,v 1.3 2006/02/08 17:59:07 vlad Exp $ \ No newline at end of file diff --git a/src/3proxy.c b/src/3proxy.c index 5909b2a..9497779 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: 3proxy.c,v 1.132 2011-08-15 19:52:26 vlad Exp $ */ #include "proxy.h" diff --git a/src/Makefile.inc b/src/Makefile.inc index f134c9f..a3422ef 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -1,4 +1,3 @@ -#$Id: Makefile.inc,v 1.19 2008/12/10 13:12:10 vlad Exp $ # # 3 proxy common Makefile # diff --git a/src/auth.c b/src/auth.c index 2c2e5eb..3608ef4 100644 --- a/src/auth.c +++ b/src/auth.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: auth.c,v 1.108 2012-04-11 23:01:18 vlad Exp $ */ #include "proxy.h" diff --git a/src/base64.c b/src/base64.c index 734daec..90e2da0 100644 --- a/src/base64.c +++ b/src/base64.c @@ -3,7 +3,6 @@ * * please read License Agreement * - * $Id: base64.c,v 1.6 2008/01/08 21:46:36 vlad Exp $ */ #include diff --git a/src/common.c b/src/common.c index 1a0006f..137da1f 100644 --- a/src/common.c +++ b/src/common.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: common.c,v 1.94 2014-04-07 21:24:45 vlad Exp $ */ diff --git a/src/countersutil.c b/src/countersutil.c index 2d38f39..543fb3e 100644 --- a/src/countersutil.c +++ b/src/countersutil.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: common.c,v 1.81 2007/12/18 09:26:44 vlad Exp $ */ #include "proxy.h" diff --git a/src/datatypes.c b/src/datatypes.c index 4c51ed9..640a05c 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -3,7 +3,6 @@ * * please read License Agreement * - * $Id: datatypes.c,v 1.28 2009/08/14 09:56:21 v.dubrovin Exp $ */ #include "proxy.h" diff --git a/src/dighosts.c b/src/dighosts.c index 0db6a71..5f4af9b 100644 --- a/src/dighosts.c +++ b/src/dighosts.c @@ -3,7 +3,6 @@ * * please read License Agreement * - * $Id: dighosts.c,v 1.10 2009/10/06 08:38:00 v.dubrovin Exp $ */ #include "proxy.h" diff --git a/src/dnspr.c b/src/dnspr.c index db7e9f1..b8caeaa 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: dnspr.c,v 1.22 2009/09/17 12:21:05 v.dubrovin Exp $ */ #include "proxy.h" diff --git a/src/ftp.c b/src/ftp.c index 4f763bc..734fa93 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -3,7 +3,6 @@ * * please read License Agreement * - * $Id: ftp.c,v 1.34 2009/09/17 12:21:06 v.dubrovin Exp $ */ #include "proxy.h" diff --git a/src/ftppr.c b/src/ftppr.c index 597b458..40d1297 100644 --- a/src/ftppr.c +++ b/src/ftppr.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: ftppr.c,v 1.45 2011-08-15 19:52:27 vlad Exp $ */ #include "proxy.h" diff --git a/src/icqpr.c b/src/icqpr.c index 6aa5760..74ac8e7 100644 --- a/src/icqpr.c +++ b/src/icqpr.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: icqpr.c,v 1.30 2012-04-11 23:01:19 vlad Exp $ */ #include "proxy.h" diff --git a/src/libs/md4.c b/src/libs/md4.c index b128f07..2e53711 100644 --- a/src/libs/md4.c +++ b/src/libs/md4.c @@ -1,8 +1,6 @@ /* * md4c.c MD4 message-digest algorithm * - * Version: $Id: md4.c,v 1.1 2010-11-11 11:32:32 v.dubrovin Exp $ - * * License to copy and use this software is granted provided that it * is identified as the "RSA Data Security, Inc. MD4 Message-Digest * Algorithm" in all material mentioning or referencing this software diff --git a/src/msnpr.c b/src/msnpr.c index 749847e..92ea54c 100644 --- a/src/msnpr.c +++ b/src/msnpr.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: msnpr.c,v 1.3 2012-04-11 23:01:19 vlad Exp $ */ #include "proxy.h" diff --git a/src/myalloc.c b/src/myalloc.c index a44a48d..23fa944 100644 --- a/src/myalloc.c +++ b/src/myalloc.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: myalloc.c,v 1.5 2008/01/08 21:46:38 vlad Exp $ */ #include "proxy.h" diff --git a/src/mycrypt.c b/src/mycrypt.c index 7cabf38..4381410 100644 --- a/src/mycrypt.c +++ b/src/mycrypt.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: mycrypt.c,v 1.8 2008/01/08 21:46:38 vlad Exp $ */ #include "libs/md5.h" #include "libs/md4.h" diff --git a/src/ntlm.c b/src/ntlm.c index c13f62c..bde76f8 100644 --- a/src/ntlm.c +++ b/src/ntlm.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: ntlm.c,v 1.9 2008/01/08 21:46:38 vlad Exp $ */ #include "proxy.h" diff --git a/src/plugins.c b/src/plugins.c index 098aab7..d9981ed 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: ntlm.c,v 1.8 2007/12/27 13:20:04 vlad Exp $ */ #include "proxy.h" diff --git a/src/plugins/FilePlugin/FilePlugin.c b/src/plugins/FilePlugin/FilePlugin.c index 2558d61..79354c5 100644 --- a/src/plugins/FilePlugin/FilePlugin.c +++ b/src/plugins/FilePlugin/FilePlugin.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: FilePlugin.c,v 1.8 2012-04-11 23:01:22 vlad Exp $ */ #include "../../structures.h" diff --git a/src/plugins/PCREPlugin/pcre_plugin.c b/src/plugins/PCREPlugin/pcre_plugin.c index 05515dc..e2ca258 100644 --- a/src/plugins/PCREPlugin/pcre_plugin.c +++ b/src/plugins/PCREPlugin/pcre_plugin.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: pcre_plugin.c,v 1.11 2012-04-25 18:17:22 vlad Exp $ */ #include "../../structures.h" diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index ffdee78..3889f1e 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: ssl_plugin.c,v 1.9 2010-11-11 11:32:33 v.dubrovin Exp $ */ #include "../../structures.h" diff --git a/src/plugins/TransparentPlugin/transparent_plugin.c b/src/plugins/TransparentPlugin/transparent_plugin.c index d8fcabc..157b0bc 100644 --- a/src/plugins/TransparentPlugin/transparent_plugin.c +++ b/src/plugins/TransparentPlugin/transparent_plugin.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: transparent_plugin.c,v 1.9 2010-11-11 11:32:33 v.dubrovin Exp $ */ #include diff --git a/src/plugins/WindowsAuthentication/WindowsAuthentication.c b/src/plugins/WindowsAuthentication/WindowsAuthentication.c index e530e75..312fee4 100644 --- a/src/plugins/WindowsAuthentication/WindowsAuthentication.c +++ b/src/plugins/WindowsAuthentication/WindowsAuthentication.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: WindowsAuthentication.c,v 1.12 2011-04-12 13:05:58 v.dubrovin Exp $ */ #include "../../structures.h" diff --git a/src/plugins/utf8tocp1251/utf8tocp1251.c b/src/plugins/utf8tocp1251/utf8tocp1251.c index 3bdb7d2..4294065 100644 --- a/src/plugins/utf8tocp1251/utf8tocp1251.c +++ b/src/plugins/utf8tocp1251/utf8tocp1251.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: utf8tocp1251.c,v 1.9 2009/09/03 05:32:56 v.dubrovin Exp $ */ #include "../../structures.h" diff --git a/src/pop3p.c b/src/pop3p.c index b76a77a..46b4480 100644 --- a/src/pop3p.c +++ b/src/pop3p.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: pop3p.c,v 1.17 2008/01/08 21:46:38 vlad Exp $ */ #include "proxy.h" diff --git a/src/proxy.c b/src/proxy.c index 1c073b8..e48f436 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: proxy.c,v 1.107 2014-04-07 20:35:07 vlad Exp $ */ diff --git a/src/proxy.h b/src/proxy.h index 9e13999..0341bdc 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -4,7 +4,6 @@ please read License Agreement - $Id: proxy.h,v 1.92 2012-04-11 23:01:20 vlad Exp $ */ #define COPYRIGHT "(c)2000-2009 3APA3A, Vladimir Dubrovin & 3proxy.ru\n"\ diff --git a/src/proxymain.c b/src/proxymain.c index 231d946..0306b99 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: proxymain.c,v 1.85 2012-04-15 22:46:09 vlad Exp $ */ #include "proxy.h" diff --git a/src/smtpp.c b/src/smtpp.c index 96b7a8c..7265a8e 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: smtpp.c,v 1.13 2011-06-10 20:48:46 vlad Exp $ */ #include "proxy.h" diff --git a/src/sockmap.c b/src/sockmap.c index 1479a48..e5203f5 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: sockmap.c,v 1.64 2014-04-07 20:35:09 vlad Exp $ */ #include "proxy.h" diff --git a/src/socks.c b/src/socks.c index 6b68557..48f48b4 100644 --- a/src/socks.c +++ b/src/socks.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: socks.c,v 1.34 2009/09/17 12:21:09 v.dubrovin Exp $ */ #include "proxy.h" diff --git a/src/stringtable.c b/src/stringtable.c index be59b75..a8bef1c 100644 --- a/src/stringtable.c +++ b/src/stringtable.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: stringtable.c,v 1.16 2009/07/20 18:16:03 v.dubrovin Exp $ */ #include diff --git a/src/tcppm.c b/src/tcppm.c index d6e237c..62cdf56 100644 --- a/src/tcppm.c +++ b/src/tcppm.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: tcppm.c,v 1.15 2012-02-05 22:29:02 vlad Exp $ */ #include "proxy.h" diff --git a/src/udppm.c b/src/udppm.c index 9be913a..eb9164b 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: udppm.c,v 1.27 2012-02-05 22:29:03 vlad Exp $ */ #include "proxy.h" diff --git a/src/version.h b/src/version.h index 7e397da..1362b4e 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141213225630" +#define BUILDDATE "141213231838" diff --git a/src/webadmin.c b/src/webadmin.c index 8a41bd6..22aa6d2 100644 --- a/src/webadmin.c +++ b/src/webadmin.c @@ -4,7 +4,6 @@ please read License Agreement - $Id: webadmin.c,v 1.44 2014-04-07 20:35:12 vlad Exp $ */ #include "proxy.h" From 7fc43e3fbd536f391438fc248d523e4bdae2d31d Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 14 Dec 2014 00:46:03 +0300 Subject: [PATCH 052/122] add some entropy to DNS hashtable --- src/3proxy.c | 16 +++++++++++++++- src/auth.c | 42 +++++++++++++++++++++++++++++++++--------- src/proxy.h | 3 +-- src/structures.h | 4 +++- src/version.h | 2 +- 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 9497779..f07b8db 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1047,7 +1047,21 @@ static int h_nscache(int argc, unsigned char **argv){ fprintf(stderr, "Invalid NS cache size: %d\n", res); return 1; } - if(initdnshashtable((unsigned)res)){ + if(inithashtable(&dns_table, (unsigned)res)){ + fprintf(stderr, "Failed to initialize NS cache\n"); + return 2; + } + return 0; +} +static int h_nscache6(int argc, unsigned char **argv){ + int res; + + res = atoi((char *)argv[1]); + if(res < 256) { + fprintf(stderr, "Invalid NS cache size: %d\n", res); + return 1; + } + if(inithashtable(&dns6_table, (unsigned)res)){ fprintf(stderr, "Failed to initialize NS cache\n"); return 2; } diff --git a/src/auth.c b/src/auth.c index 3608ef4..34596ef 100644 --- a/src/auth.c +++ b/src/auth.c @@ -459,6 +459,7 @@ unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nb sec = tv.tv_sec; msec = tv.tv_usec; #endif + if(!nbytesin && !nbytesout) return 0; pthread_mutex_lock(&bandlim_mutex); if(param->srv->version != conf.paused){ @@ -829,15 +830,19 @@ struct auth authfuncs[] = { -struct hashtable dns_table = {0, NULL, NULL, NULL}; +struct hashtable dns_table = {0, {0}, NULL, NULL, NULL}; +struct hashtable dns6_table = {0, {0}, NULL, NULL, NULL}; -void nametohash(const unsigned char * name, unsigned char *hash){ - unsigned i, j; - memset(hash, 0, sizeof(unsigned)*4); - for(i=0, j=0; name[j]; j++){ - hash[i] += toupper(name[j]) - 32; - if(++i == sizeof(unsigned)*4) i = 0; +void nametohash(const unsigned char * name, unsigned char *hash, unsigned char *rnd){ + unsigned i, j, k; + memcpy(hash, 0, sizeof(unsigned)*4); + for(i=0, j=0, k=0; name[j]; j++){ + hash[i] += (toupper(name[j]) - 32)+rnd[((toupper(name[j]))*29277+rnd[(k+j+i)%16]+k+j+i)%16]; + if(++i == sizeof(unsigned)*4) { + i = 0; + k++; + } } } @@ -867,6 +872,20 @@ void destroyhashtable(struct hashtable *ht){ int inithashtable(struct hashtable *ht, unsigned nhashsize){ unsigned i; + clock_t c; + + +#ifdef _WIN32 + struct timeb tb; + + ftime(&tb); + +#else + struct timeval tb; + struct timezone tz; + gettimeofday(&tb, &tz); +#endif + c = clock(); if(nhashsize<4) return 1; if(ht->hashtable){ @@ -887,8 +906,13 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ return 3; } ht->hashsize = nhashsize; + ht->rnd[0] = myrand(&tb, sizeof(tb)); + ht->rnd[1] = myrand(ht->hashtable, sizeof(ht->hashtable)); + ht->rnd[2] = myrand(&c, sizeof(c)); + ht->rnd[3] = myrand(ht->hashvalues,sizeof(ht->hashvalues)); memset(ht->hashtable, 0, (ht->hashsize>>2) * sizeof(struct hashentry *)); memset(ht->hashvalues, 0, ht->hashsize * sizeof(struct hashentry)); + for(i = 0; i< (ht->hashsize - 1); i++) { (ht->hashvalues + i)->next = ht->hashvalues + i + 1; } @@ -908,7 +932,7 @@ void hashadd(struct hashtable *ht, const unsigned char* name, unsigned long valu pthread_mutex_lock(&hash_mutex); he = ht->hashempty; ht->hashempty = ht->hashempty->next; - nametohash(name, he->hash); + nametohash(name, he->hash, (unsigned char *)ht->rnd); he->value = value; he->expires = expires; he->next = NULL; @@ -934,7 +958,7 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign if(!ht->hashtable || !name) return 0; time(&t); - nametohash(name, hash); + nametohash(name, hash, (unsigned char *)ht->rnd); index = hashindex(ht, hash); pthread_mutex_lock(&hash_mutex); for(hep = ht->hashtable + index; (he = *hep)!=NULL; ){ diff --git a/src/proxy.h b/src/proxy.h index 0341bdc..4558546 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -189,7 +189,7 @@ unsigned long getip(unsigned char *name); unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa); unsigned long myresolver(unsigned char *); unsigned long fakeresolver (unsigned char *name); -int initdnshashtable(unsigned nhashsize); +int inithashtable(struct hashtable *hashtable, unsigned nhashsize); void freeparam(struct clientparam * param); void clearstat(struct clientparam * param); void dumpcounters(struct trafcount *tl, int counterd); @@ -308,7 +308,6 @@ extern pthread_mutex_t pwl_mutex; extern pthread_mutex_t odbc_mutex; #endif -extern struct hashtable dns_table; extern struct datatype datatypes[64]; extern struct commands commandhandlers[]; diff --git a/src/structures.h b/src/structures.h index 2d8f046..aaf4322 100644 --- a/src/structures.h +++ b/src/structures.h @@ -583,19 +583,21 @@ struct child { struct hashentry { unsigned char hash[sizeof(unsigned)*4]; - unsigned long value; + unsigned value; time_t expires; struct hashentry *next; }; struct hashtable { unsigned hashsize; + unsigned rnd[4]; struct hashentry ** hashtable; struct hashentry * hashvalues; struct hashentry * hashempty; }; extern struct hashtable dns_table; +extern struct hashtable dns6_table; struct sockfuncs { #ifdef _WIN32 diff --git a/src/version.h b/src/version.h index 1362b4e..d0ce229 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141213231838" +#define BUILDDATE "141214004331" From 5844e165b5a799a3fb89f3ac7d45a6701ce71dbe Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 14 Dec 2014 05:33:08 +0300 Subject: [PATCH 053/122] nscache6 command support + nsrecord with IPv6 nscache6 - new command for IPv6 addresses cache nsrecord supports IPv6 addresses dnsauth should work with IPv6 servers and clients + caching is now more accurate --- src/3proxy.c | 67 ++++++++++++--------- src/auth.c | 151 ++++++++++++++++++++++++++++------------------- src/common.c | 20 ++++++- src/dighosts.c | 3 +- src/dnspr.c | 25 ++++---- src/plugins.c | 4 +- src/proxy.h | 8 +-- src/structures.h | 8 +-- src/version.h | 2 +- 9 files changed, 168 insertions(+), 120 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index f07b8db..8f7a10d 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -1069,7 +1069,15 @@ static int h_nscache6(int argc, unsigned char **argv){ } static int h_nsrecord(int argc, unsigned char **argv){ - hashadd(&dns_table, argv[1], getip(argv[2]), (time_t)0xffffffff); +#ifndef NOIPV6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + memset(&sa, 0, sizeof(sa)); + if(!getip46(46, argv[2], (struct sockaddr *)&sa)) return 1; + + hashadd(*SAFAMILY(&sa)==AF_INET6?&dns6_table:&dns_table, argv[1], SAADDR(&sa), (time_t)0xffffffff); return 0; } @@ -1819,34 +1827,35 @@ struct commands commandhandlers[]={ {commandhandlers+26, "nserver", h_nserver, 2, 2}, {commandhandlers+27, "fakeresolve", h_fakeresolve, 1, 1}, {commandhandlers+28, "nscache", h_nscache, 2, 2}, - {commandhandlers+29, "nsrecord", h_nsrecord, 3, 3}, - {commandhandlers+30, "dialer", h_dialer, 2, 2}, - {commandhandlers+31, "system", h_system, 2, 2}, - {commandhandlers+32, "pidfile", h_pidfile, 2, 2}, - {commandhandlers+33, "monitor", h_monitor, 2, 2}, - {commandhandlers+34, "parent", h_parent, 5, 0}, - {commandhandlers+35, "allow", h_ace, 1, 0}, - {commandhandlers+36, "deny", h_ace, 1, 0}, - {commandhandlers+37, "redirect", h_ace, 3, 0}, - {commandhandlers+38, "bandlimin", h_ace, 2, 0}, - {commandhandlers+39, "bandlimout", h_ace, 2, 0}, - {commandhandlers+40, "nobandlimin", h_ace, 1, 0}, - {commandhandlers+41, "nobandlimout", h_ace, 1, 0}, - {commandhandlers+42, "countin", h_ace, 4, 0}, - {commandhandlers+43, "nocountin", h_ace, 1, 0}, - {commandhandlers+44, "countout", h_ace, 4, 0}, - {commandhandlers+45, "nocountout", h_ace, 1, 0}, - {commandhandlers+46, "plugin", h_plugin, 3, 0}, - {commandhandlers+47, "logdump", h_logdump, 2, 3}, - {commandhandlers+48, "filtermaxsize", h_filtermaxsize, 2, 2}, - {commandhandlers+49, "nolog", h_nolog, 1, 1}, - {commandhandlers+50, "weight", h_nolog, 2, 2}, - {commandhandlers+51, "authcache", h_authcache, 2, 3}, - {commandhandlers+52, "smtpp", h_proxy, 1, 0}, - {commandhandlers+53, "icqpr", h_proxy, 4, 0}, - {commandhandlers+54, "msnpr", h_proxy, 4, 0}, - {commandhandlers+55, "delimchar",h_delimchar, 2, 2}, - {commandhandlers+56, "authnserver", h_authnserver, 2, 2}, + {commandhandlers+29, "nscache6", h_nscache6, 2, 2}, + {commandhandlers+30, "nsrecord", h_nsrecord, 3, 3}, + {commandhandlers+31, "dialer", h_dialer, 2, 2}, + {commandhandlers+32, "system", h_system, 2, 2}, + {commandhandlers+33, "pidfile", h_pidfile, 2, 2}, + {commandhandlers+34, "monitor", h_monitor, 2, 2}, + {commandhandlers+35, "parent", h_parent, 5, 0}, + {commandhandlers+36, "allow", h_ace, 1, 0}, + {commandhandlers+37, "deny", h_ace, 1, 0}, + {commandhandlers+38, "redirect", h_ace, 3, 0}, + {commandhandlers+39, "bandlimin", h_ace, 2, 0}, + {commandhandlers+40, "bandlimout", h_ace, 2, 0}, + {commandhandlers+41, "nobandlimin", h_ace, 1, 0}, + {commandhandlers+42, "nobandlimout", h_ace, 1, 0}, + {commandhandlers+43, "countin", h_ace, 4, 0}, + {commandhandlers+44, "nocountin", h_ace, 1, 0}, + {commandhandlers+45, "countout", h_ace, 4, 0}, + {commandhandlers+46, "nocountout", h_ace, 1, 0}, + {commandhandlers+47, "plugin", h_plugin, 3, 0}, + {commandhandlers+48, "logdump", h_logdump, 2, 3}, + {commandhandlers+49, "filtermaxsize", h_filtermaxsize, 2, 2}, + {commandhandlers+50, "nolog", h_nolog, 1, 1}, + {commandhandlers+51, "weight", h_nolog, 2, 2}, + {commandhandlers+52, "authcache", h_authcache, 2, 3}, + {commandhandlers+53, "smtpp", h_proxy, 1, 0}, + {commandhandlers+54, "icqpr", h_proxy, 4, 0}, + {commandhandlers+55, "msnpr", h_proxy, 4, 0}, + {commandhandlers+56, "delimchar",h_delimchar, 2, 2}, + {commandhandlers+57, "authnserver", h_authnserver, 2, 2}, {specificcommands, "", h_noop, 1, 0} }; diff --git a/src/auth.c b/src/auth.c index 34596ef..155517d 100644 --- a/src/auth.c +++ b/src/auth.c @@ -733,24 +733,36 @@ int userauth(struct clientparam * param){ } int dnsauth(struct clientparam * param){ - char buf[32]; + char buf[128]; + char addr[16]; + char dig[]="0123456789abcdef"; -/* FIX IT */ - unsigned u ; + unsigned u; + int i; - if(*SAFAMILY(¶m->sincr)!=AF_INET) return 6; - u = ntohl(*(unsigned long *)SAADDR(¶m->sincr)); + if(*SAFAMILY(¶m->sincr)!=AF_INET){ + char *s = buf; + for(i=15; i>=0; i--){ + unsigned char c=((unsigned char *)SAADDR(¶m->sincr))[i]; + *s++ = dig[(c&0xf)]; + *s++ = '.'; + *s++ = dig[(c>>4)]; + *s++ = '.'; + } + sprintf(s, "ip6.arpa"); + } + else { + u = ntohl(*(unsigned long *)SAADDR(¶m->sincr)); - sprintf(buf, "%u.%u.%u.%u.in-addr.arpa", - - - ((u&0x000000FF)), - ((u&0x0000FF00)>>8), - ((u&0x00FF0000)>>16), - ((u&0xFF000000)>>24)); + sprintf(buf, "%u.%u.%u.%u.in-addr.arpa", + ((u&0x000000FF)), + ((u&0x0000FF00)>>8), + ((u&0x00FF0000)>>16), + ((u&0xFF000000)>>24)); -/* FIX IT */ - if(*(unsigned long *)SAADDR(¶m->sincr) != udpresolve(buf, NULL, param, 1)) return 6; + } + if(!udpresolve(*SAFAMILY(¶m->sincr), buf, addr, NULL, param, 1)) return 6; + if(!memcmp(SAADDR(¶m->sincr), addr, SAADDRLEN(¶m->sincr))) return 6; return param->username? 0:4; } @@ -830,13 +842,13 @@ struct auth authfuncs[] = { -struct hashtable dns_table = {0, {0}, NULL, NULL, NULL}; -struct hashtable dns6_table = {0, {0}, NULL, NULL, NULL}; +struct hashtable dns_table = {0, 4, {0}, NULL, NULL, NULL}; +struct hashtable dns6_table = {0, 16, {0}, NULL, NULL, NULL}; void nametohash(const unsigned char * name, unsigned char *hash, unsigned char *rnd){ unsigned i, j, k; - memcpy(hash, 0, sizeof(unsigned)*4); + memcpy(hash, rnd, sizeof(unsigned)*4); for(i=0, j=0, k=0; name[j]; j++){ hash[i] += (toupper(name[j]) - 32)+rnd[((toupper(name[j]))*29277+rnd[(k+j+i)%16]+k+j+i)%16]; if(++i == sizeof(unsigned)*4) { @@ -870,6 +882,7 @@ void destroyhashtable(struct hashtable *ht){ pthread_mutex_unlock(&hash_mutex); } +#define hvalue(i) ((struct hashentry *)((char *)ht->hashvalues + i*(sizeof(struct hashentry) + ht->recsize - 4))) int inithashtable(struct hashtable *ht, unsigned nhashsize){ unsigned i; clock_t c; @@ -897,10 +910,10 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ ht->hashvalues = NULL; } ht->hashsize = 0; - if(!(ht->hashtable = myalloc((nhashsize>>2) * sizeof(struct hashentry *)))){ + if(!(ht->hashtable = myalloc((nhashsize>>2) * sizeof(struct hashentry *)))){ return 2; } - if(!(ht->hashvalues = myalloc(nhashsize * sizeof(struct hashentry)))){ + if(!(ht->hashvalues = myalloc(nhashsize * (sizeof(struct hashentry) + (ht->recsize-4))))){ myfree(ht->hashtable); ht->hashtable = NULL; return 3; @@ -911,58 +924,57 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ ht->rnd[2] = myrand(&c, sizeof(c)); ht->rnd[3] = myrand(ht->hashvalues,sizeof(ht->hashvalues)); memset(ht->hashtable, 0, (ht->hashsize>>2) * sizeof(struct hashentry *)); - memset(ht->hashvalues, 0, ht->hashsize * sizeof(struct hashentry)); + memset(ht->hashvalues, 0, ht->hashsize * (sizeof(struct hashentry) + ht->recsize -4)); for(i = 0; i< (ht->hashsize - 1); i++) { - (ht->hashvalues + i)->next = ht->hashvalues + i + 1; + hvalue(i)->next = hvalue(i+1); } ht->hashempty = ht->hashvalues; return 0; } -int initdnshashtable(unsigned nhashsize){ - return inithashtable(&dns_table, nhashsize); -} +void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires){ + struct hashentry * hen, *he; + struct hashentry ** hep; -void hashadd(struct hashtable *ht, const unsigned char* name, unsigned long value, time_t expires){ - struct hashentry * he; unsigned index; if(!value||!name||!ht->hashtable||!ht->hashempty) return; pthread_mutex_lock(&hash_mutex); - he = ht->hashempty; + hen = ht->hashempty; ht->hashempty = ht->hashempty->next; - nametohash(name, he->hash, (unsigned char *)ht->rnd); - he->value = value; - he->expires = expires; - he->next = NULL; - index = hashindex(ht, he->hash); - if(!ht->hashtable[index] || !memcmp(he->hash, ht->hashtable[index]->hash, sizeof(he->hash))){ - he->next = ht->hashtable[index]; - ht->hashtable[index] = he; - } - else { - memset(he, 0, sizeof(struct hashentry)); - he->next = ht->hashempty; - ht->hashempty = he; + nametohash(name, hen->hash, (unsigned char *)ht->rnd); + memcpy(hen->value, value, ht->recsize); + hen->expires = expires; + hen->next = NULL; + index = hashindex(ht, hen->hash); + + for(hep = ht->hashtable + index; (he = *hep)!=NULL; ){ + if(he->expires < conf.time || !memcmp(hen->hash, he->hash, sizeof(he->hash))) { + (*hep) = he->next; + he->expires = 0; + he->next = ht->hashempty; + ht->hashempty = he; + } + else hep=&(he->next); } + hen->next = ht->hashtable[index]; + ht->hashtable[index] = hen; pthread_mutex_unlock(&hash_mutex); } -unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsigned *ttl){ +unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsigned char* value, unsigned *ttl){ unsigned char hash[sizeof(unsigned)*4]; struct hashentry ** hep; struct hashentry *he; unsigned index; - time_t t; if(!ht->hashtable || !name) return 0; - time(&t); nametohash(name, hash, (unsigned char *)ht->rnd); index = hashindex(ht, hash); pthread_mutex_lock(&hash_mutex); for(hep = ht->hashtable + index; (he = *hep)!=NULL; ){ - if((unsigned long)he->expires < (unsigned long)t) { + if(he->expires < conf.time) { (*hep) = he->next; he->expires = 0; he->next = ht->hashempty; @@ -970,8 +982,9 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign } else if(!memcmp(hash, he->hash, sizeof(unsigned)*4)){ pthread_mutex_unlock(&hash_mutex); - if(ttl) *ttl = (unsigned)(he->expires - t); - return he->value; + if(ttl) *ttl = (unsigned)(he->expires - conf.time); + memcpy(value, he->value, ht->recsize); + return 1; } else hep=&(he->next); } @@ -983,12 +996,15 @@ struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0} struct nserver authnserver; -unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientparam* param, int makeauth){ +unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth){ int i,n; unsigned long retval; - if((retval = hashresolv(&dns_table, name, retttl))) { + if((af == AF_INET) && (retval = hashresolv(&dns_table, name, value, retttl))) { + return retval; + } + if((af == AF_INET6) && (retval = hashresolv(&dns6_table, name, value, retttl))) { return retval; } n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers; @@ -1064,7 +1080,7 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa *s2 = (len - (int)(s2 - buf)) - 1; len++; buf[len++] = 0; - buf[len++] = (makeauth == 1)? 0x0c : 0x01; /* PTR:host address */ + buf[len++] = (makeauth == 1)? 0x0c : (af==AF_INET6? 0x1c:0x01); /* PTR:host address */ buf[len++] = 0; buf[len++] = 1; /* INET */ if(usetcp){ @@ -1112,25 +1128,27 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa k += 4; if(na > 255) na = 255; /* somebody is very evil */ for (j = 0; j < na; j++) { /* now there should be answers */ - if((k+16) > len) { + if((k+(af == AF_INET6?28:16)) > len) { break; } flen = buf[k+11] + (((unsigned short)buf[k+10])<<8); - if((k+12+flen) > len) break; + if((k+12+flen) > len) { + break; + } if(makeauth != 1){ - if(buf[k+2] != 0 || buf[k+3] != 0x01 || flen != 4) { + if(buf[k+2] != 0 || buf[k+3] != (af == AF_INET6?0x1c:0x1) || flen != (af == AF_INET6?16:4)) { k+= (12 + flen); continue; /* we need A IPv4 */ } - retval = *(unsigned long *)(buf + k + 12); ttl = ntohl(*(unsigned long *)(buf + k + 6)); - t = time(0); + memcpy(value, buf + k + 12, af == AF_INET6? 16:4); if(ttl < 60 || ((unsigned)t)+ttl < ttl) ttl = 300; if(ttl){ - hashadd(&dns_table, name, retval, ((unsigned)t)+ttl); + hashadd(af == AF_INET6?&dns6_table:&dns_table, name, value, conf.time+ttl); + } if(retttl) *retttl = ttl; - return retval; + return 1; } else { @@ -1147,19 +1165,30 @@ unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientpa if(param->username)myfree(param->username); param->username = mystrdup (buf + k + 13); - return udpresolve(param->username, NULL, NULL, 2); + return udpresolve(af,param->username, value, NULL, NULL, 2); } } } return 0; } -unsigned long myresolver(unsigned char * name){ - return udpresolve(name, NULL, NULL, 0); +unsigned long myresolver(int af, unsigned char * name, unsigned char * value){ + return udpresolve(af, name, value, NULL, NULL, 0); } -unsigned long fakeresolver (unsigned char *name){ - return htonl(0x7F000002); +unsigned long fakeresolver (int af, unsigned char *name, unsigned char * value){ + memset(value, 0, af == AF_INET6? 16 : 4); + if(af == AF_INET6){ + memset(value, 0, 16); + value[15] = 2; + } + else { + value[0] = 127; + value[1] = 0; + value[2] = 0; + value[3] = 2; + } + return 1; } #ifndef NOODBC diff --git a/src/common.c b/src/common.c index 137da1f..52287c2 100644 --- a/src/common.c +++ b/src/common.c @@ -693,6 +693,7 @@ struct hostent * my_gethostbyname(char *name, char *buf, struct hostent *hp){ } #endif +#ifdef NOIPV6 unsigned long getip(unsigned char *name){ unsigned long retval; int i; @@ -719,9 +720,9 @@ unsigned long getip(unsigned char *name){ } } if(resolvfunc){ - if((retval = (*resolvfunc)(name))) return retval; + if((*resolvfunc)(AF_INET, name, &retval)) return retval; if(conf.demanddialprog) system(conf.demanddialprog); - return (*resolvfunc)(name); + return (*resolvfunc)(AF_INET, name, &retval)?retval:0; } #if !defined(_WIN32) && !defined(GETHOSTBYNAME_R) if(!ghbn_init){ @@ -744,6 +745,7 @@ unsigned long getip(unsigned char *name){ #endif return retval; } +#endif unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ #ifndef NOIPV6 @@ -753,9 +755,11 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ if(!sa) return 0; if(!family) { -#endif + family = AF_INET; +#else ((struct sockaddr_in *)sa)->sin_family = AF_INET; return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0; +#endif #ifndef NOIPV6 } for(i=0; name[i]; i++){ @@ -786,6 +790,16 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ return inet_pton(AF_INET6, name, SAADDR(sa))?(family==4? 0:AF_INET6) : 0; } } + if(resolvfunc){ + int f = (family == 6 || family == 64)?AF_INET6:AF_INET; + *SAFAMILY(sa) = f; + if(resolvfunc(f, name, SAADDR(sa))) return f; + if(family == 4 || family == 6) return 0; + f = (family == 46)? AF_INET6 : AF_INET; + *SAFAMILY(sa) = f; + if(resolvfunc(f, name, SAADDR(sa))) return f; + return 0; + } memset(&hint, 0, sizeof(hint)); hint.ai_family = (family == 6 || family == 64)?AF_INET6:AF_INET; if (getaddrinfo(name, NULL, &hint, &ai)) { diff --git a/src/dighosts.c b/src/dighosts.c index 5f4af9b..2d25989 100644 --- a/src/dighosts.c +++ b/src/dighosts.c @@ -83,12 +83,11 @@ int main(int argc, char *argv[]){ return 4; } *hostend = '/'; - if(!(sa.sin_addr.s_addr = getip(host))) { + if(!getip46(4, host, (struct sockaddr *)&sa)) { fprintf(stderr, "Unable to resolve %s\n", host); return 5; } sa.sin_port = htons(80); - sa.sin_family = AF_INET; if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) return 6; sprintf((char *)buf, (char *)request, hostend, host); if(connect(sock,(struct sockaddr *)&sa,sizeof(sa))) { diff --git a/src/dnspr.c b/src/dnspr.c index b8caeaa..bdee19e 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -27,6 +27,7 @@ void * dnsprchild(struct clientparam* param) { int len; unsigned type=0; unsigned ttl; + unsigned char addr[16]; #ifdef _WIN32 unsigned long ul = 1; #endif @@ -81,8 +82,8 @@ void * dnsprchild(struct clientparam* param) { *s2 = (len - (int)(s2 - buf)) - 1; type = ((unsigned)buf[len+1])*256 + (unsigned)buf[len+2]; - if(type==1 && !param->srv->singlepacket){ - ip = udpresolve((unsigned char *)host, &ttl, param, 0); + if((type==0x01 || type==0x1c) && !param->srv->singlepacket){ + ip = udpresolve((type==0x1c)?AF_INET6:AF_INET, (unsigned char *)host, addr, &ttl, param, 0); } len+=5; @@ -96,13 +97,13 @@ void * dnsprchild(struct clientparam* param) { memset(buf+len, 0, 16); buf[len] = 0xc0; buf[len+1] = 0x0c; - buf[len+3] = 1; + buf[len+3] = type; buf[len+5] = 1; ttl = htonl(ttl); memcpy(buf + len + 6, &ttl, 4); - buf[len+11] = 4; - memcpy(buf+len+12,(void *)&ip,4); - len+=16; + buf[len+11] = type==1? 4:16; + memcpy(buf+len+12,(void *)&addr,type==1? 4:16); + len+=(type==1?16:28); } else if(type == 0x0c) { unsigned a, b, c, d; @@ -191,14 +192,12 @@ void * dnsprchild(struct clientparam* param) { CLEANRET: if(param->res!=813){ - sprintf((char *)buf, "%04x/%s(%u.%u.%u.%u)", + sprintf((char *)buf, "%04x/%s/", (unsigned)type, - host?host:"", - (unsigned)(ntohl(ip)&0xff000000)>>24, - (unsigned)(ntohl(ip)&0x00ff0000)>>16, - (unsigned)(ntohl(ip)&0x0000ff00)>>8, - (unsigned)(ntohl(ip)&0x000000ff) - ); + host?host:""); + if(ip && type == 0x01 || type == 0x1c){ + myinet_ntop(type == 0x01? AF_INET:AF_INET6, addr, buf+strlen(buf), 64); + } (*param->srv->logfunc)(param, buf); } if(bbuf)myfree(bbuf); diff --git a/src/plugins.c b/src/plugins.c index d9981ed..e7b0cc9 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -35,7 +35,7 @@ struct symbol symbols[] = { {symbols+8, "myinet_ntop", (void *) myinet_ntop}, {symbols+9, "dobuf", (void *) dobuf}, {symbols+10, "scanaddr", (void *) scanaddr}, - {symbols+11, "getip", (void *) getip}, + {symbols+11, "getip46", (void *) getip46}, {symbols+12, "sockmap", (void *) sockmap}, {symbols+13, "sockfuncs", (void *) &so}, {symbols+14, "ACLmatches", (void *) ACLmatches}, @@ -78,7 +78,6 @@ struct symbol symbols[] = { {symbols+48, "parsestr", (void *) parsestr}, {symbols+49, "make_ace", (void *) make_ace}, {symbols+50, "freeacl", (void *) freeacl}, - {symbols+51, "getip46", (void *) getip46}, {NULL, "", NULL} }; @@ -108,7 +107,6 @@ struct pluginlink pluginlink = { dobuf, dobuf2, scanaddr, - getip, getip46, sockmap, ACLmatches, diff --git a/src/proxy.h b/src/proxy.h index 4558546..82b4dcf 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -187,8 +187,8 @@ extern struct nserver nservers[MAXNSERVERS]; struct nserver authnserver; unsigned long getip(unsigned char *name); unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa); -unsigned long myresolver(unsigned char *); -unsigned long fakeresolver (unsigned char *name); +unsigned long myresolver(int, unsigned char *, unsigned char *); +unsigned long fakeresolver (int, unsigned char *, unsigned char*); int inithashtable(struct hashtable *hashtable, unsigned nhashsize); void freeparam(struct clientparam * param); void clearstat(struct clientparam * param); @@ -227,14 +227,14 @@ void mschap(const unsigned char *win_password, const unsigned char *challenge, unsigned char *response); struct hashtable; -void hashadd(struct hashtable *ht, const unsigned char* name, unsigned long value, time_t expires); +void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires); int parsehostname(char *hostname, struct clientparam *param, unsigned short port); int parseusername(char *username, struct clientparam *param, int extpasswd); int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port); int ACLmatches(struct ace* acentry, struct clientparam * param); -unsigned long udpresolve(unsigned char * name, unsigned *retttl, struct clientparam* param, int makeauth); +unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth); struct ace * copyacl (struct ace *ac); struct auth * copyauth (struct auth *); diff --git a/src/structures.h b/src/structures.h index aaf4322..9b0f26a 100644 --- a/src/structures.h +++ b/src/structures.h @@ -155,7 +155,7 @@ struct srvparam; typedef void (*LOGFUNC)(struct clientparam * param, const unsigned char *); typedef int (*AUTHFUNC)(struct clientparam * param); typedef void * (*REDIRECTFUNC)(struct clientparam * param); -typedef unsigned long (*RESOLVFUNC)(unsigned char *); +typedef unsigned long (*RESOLVFUNC)(int af, unsigned char *name, unsigned char *value); typedef unsigned (*BANDLIMFUNC)(struct clientparam * param, unsigned nbytesin, unsigned nbytesout); typedef void (*TRAFCOUNTFUNC)(struct clientparam * param); typedef void * (*EXTENDFUNC) (struct node *node); @@ -583,16 +583,17 @@ struct child { struct hashentry { unsigned char hash[sizeof(unsigned)*4]; - unsigned value; time_t expires; struct hashentry *next; + char value[4]; }; struct hashtable { unsigned hashsize; + unsigned recsize; unsigned rnd[4]; struct hashentry ** hashtable; - struct hashentry * hashvalues; + void * hashvalues; struct hashentry * hashempty; }; @@ -656,7 +657,6 @@ struct pluginlink { int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec); int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format); int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask); - unsigned long (*getip)(unsigned char *name); unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa); int (*sockmap)(struct clientparam * param, int timeo); int (*ACLMatches)(struct ace* acentry, struct clientparam * param); diff --git a/src/version.h b/src/version.h index d0ce229..2a103c2 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141214004331" +#define BUILDDATE "141214052453" From bf8522321f8291627d3955109e1e83db9c1028f2 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 17 Dec 2014 00:20:21 +0300 Subject: [PATCH 054/122] nscache bug fixed nscache caused crash --- src/3proxy.c | 6 ++++++ src/auth.c | 10 +++++----- src/structures.h | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 8f7a10d..09835e9 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -644,9 +644,11 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.isudp = 0; childdef.service = S_PROXY; childdef.helpmessage = " -n - no NTLM support\n"; +#ifdef NOIPV6 if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, proxy may run very slow\n", linenum); } +#endif } else if(!strcmp((char *)argv[0], "pop3p")) { childdef.pf = pop3pchild; @@ -675,9 +677,11 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.isudp = 0; childdef.service = S_SOCKS; childdef.helpmessage = " -n - no NTLM support\n"; +#ifdef NOIPV6 if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, socks may run very slow\n", linenum); } +#endif } else if(!strcmp((char *)argv[0], "tcppm")) { childdef.pf = tcppmchild; @@ -721,9 +725,11 @@ static int h_proxy(int argc, unsigned char ** argv){ childdef.isudp = 1; childdef.service = S_DNSPR; childdef.helpmessage = " -s - simple DNS forwarding - do not use 3proxy resolver / name cache\n"; +#ifndef NOIPV6 if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize) || resolvfunc == fakeresolver){ fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, dnspr will not work as expected\n", linenum); } +#endif } return start_proxy_thread(&ch); } diff --git a/src/auth.c b/src/auth.c index 155517d..7ebc99b 100644 --- a/src/auth.c +++ b/src/auth.c @@ -842,8 +842,8 @@ struct auth authfuncs[] = { -struct hashtable dns_table = {0, 4, {0}, NULL, NULL, NULL}; -struct hashtable dns6_table = {0, 16, {0}, NULL, NULL, NULL}; +struct hashtable dns_table = {0, 4, {0,0,0,0}, NULL, NULL, NULL}; +struct hashtable dns6_table = {0, 16, {0,0,0,0}, NULL, NULL, NULL}; void nametohash(const unsigned char * name, unsigned char *hash, unsigned char *rnd){ @@ -882,7 +882,7 @@ void destroyhashtable(struct hashtable *ht){ pthread_mutex_unlock(&hash_mutex); } -#define hvalue(i) ((struct hashentry *)((char *)ht->hashvalues + i*(sizeof(struct hashentry) + ht->recsize - 4))) +#define hvalue(I) ((struct hashentry *)((char *)ht->hashvalues + (I)*(sizeof(struct hashentry) + ht->recsize - 4))) int inithashtable(struct hashtable *ht, unsigned nhashsize){ unsigned i; clock_t c; @@ -981,9 +981,9 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign ht->hashempty = he; } else if(!memcmp(hash, he->hash, sizeof(unsigned)*4)){ - pthread_mutex_unlock(&hash_mutex); if(ttl) *ttl = (unsigned)(he->expires - conf.time); memcpy(value, he->value, ht->recsize); + pthread_mutex_unlock(&hash_mutex); return 1; } else hep=&(he->next); @@ -1142,7 +1142,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un } ttl = ntohl(*(unsigned long *)(buf + k + 6)); memcpy(value, buf + k + 12, af == AF_INET6? 16:4); - if(ttl < 60 || ((unsigned)t)+ttl < ttl) ttl = 300; + if(ttl < 60 || ttl > (3600*12)) ttl = 300; if(ttl){ hashadd(af == AF_INET6?&dns6_table:&dns_table, name, value, conf.time+ttl); diff --git a/src/structures.h b/src/structures.h index 9b0f26a..16b065e 100644 --- a/src/structures.h +++ b/src/structures.h @@ -104,11 +104,11 @@ int #ifndef NOIPV6 #define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port) -#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.u.Byte : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) +#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) #define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4) #define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET) #define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) -#define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)((struct sockaddr_in6 *)sa)->sin6_addr.u.Byte : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4))) +#define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4))) #else #define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port) #define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr) From 7951de875a7a5f1c664e2e3984d3238da0f67e32 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 17 Feb 2015 16:05:55 +0300 Subject: [PATCH 055/122] Move icon compilations to makefiles --- 3proxy.ico | Bin 32988 -> 32988 bytes 3proxy.rc | 4 ++-- Makefile.msvc | 12 ++++++------ Makefile.msvc64 | 7 +++++++ src/version.h | 2 +- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/3proxy.ico b/3proxy.ico index 44dc48143d48dcf29b781f062f63da9359954b73..b879bd139849135061178bdf072acc1984b5b02f 100644 GIT binary patch literal 32988 zcmeHP3sjHU7XQ!OS##&b7&AjyOy0(0MCBPJl~j7@ty0lLl1NdJe=77KdPpy?k{)_X zR3xtw8N4+C`%wVj(q2a%1Vt<22EJNHD^R?B+T8L9Ouhqod)`3{rFC@O}LkN8MI&#FaE6$x4 zY(@;g{?N#1As!%mTS8K^+$T?-3S*!bA3ZL_31Vj6LRZ1wTXna|a-TKic|~k11AM^`-NT|{1)XEIClJUhEk7glgF?ewU?$d&wP7RHgO06Bzi-D77k4iL9T@-X z)YUcD1WbpFnLvOC!veaC<-k6y4clN7+F19uTXn?2#f?nUG7$KI+X%%eiW@)qle*F+m@K^}P9E1CwTf-bG+chs-^wMxJicH?;!`x%dP zZ4jxte1-HMDKB7vwTg<53VJg9ARlo7KLI279(=E2KV-{KQES(3F(!x+@t(vw?LF`j z_7h^0<-fGd9AQ1|Epa~dT#t}Nd4_0V0s z|5lh6Y@YqJi=cr7LZ$zmmm*k1msP~#d!k{Fk|>bhS;AhFM;0P zgSD{7AQ#vn4}amNe(XD@Ki*Fr+0DkW zx7fVSR*U`5axH9N=SXH_do^-!XS18>E4H7VFEPf>k?q-yF}z>I=OE-*6uf^~5%LoRWM-RBifVIS;r6u_^u31d9y^8&uhaI$Tnsm5`iPzjJqL7S-Xy)>A3% zQ_yJrRU2dPx284m{q-)+QIpGX70Yi zg5qK~$~$#WT1I-w@v^v-jI1j9yP)Amj-I?(eDqk(kChj*Xg_3EQfl$Ja~JY6_vI&L z=H~g)IUhBx-6d#qM6Q~i3F$RtH0e2TB+)asA*orp`zTM>);ds{Y;=4={qEFs61XXn ztXi`!iqbwbw{d7p+M7ij7B3^a(=v(Ke1{$Gt9%Sq|3)_3nagiO;mB>9Dh{93PHa;#M9DP2oaGIEGd zKpH-SNA$C1GA030YMi{Z0zsTHAh<6 zIW_8=Lk-=+N)7(9FSOd+q} z&@U&-PG>H1_q-b(9ZzhWT*;hy3&@7>DB|NENc@90k%exaflEDC)-G7$u|sW^QB7KQ zPVJ@3)uD48UC6Ihm+Gk8Ub*=PJ-?f%N}QLhxFuePw!4|wI6RS?q)G~ljuadyI^w(U zK#@=|=hW%bVJFK^2btR1KX7sPCN>LPh_TgtLgR;cO8qG|*~Hp$(WwbhiAz`FHfoay=>danuCFGFKt)C6TR zQB9jnn64$1@v1ZF&oI@A!c+|+J3^lH8Z?p&9zC9XGkh%RO?@~-ZUPx5KS`+Zd+7s5 zDN??%bbJhrtr5Z;;5}SH$zR9BQaV*@Hi?Xl_ZF{@ww{TV%P<8c@=1?=jgUuK}cM?*XJsul_<|ylaYoz9ltzZiPx_~4SEe>jaDuY$XG@A+P~P{G^}i1+-sVH& zS*ogIM7sAIBH*bx+njvfXAsdgwjd?POAV-wZ#B?4@&39AxW?DXY z@L=%qvNJ0AhmKgDC@Zr(f4CS#n$L_C6&0VvZc9ptPe>-A5m61hb|>qsl&;O(61U^e$k^?T z^q%!Ya9HHE(z1%{!QoN$yLYFaa`W~%Z#vguVAjE`zM6*SKgug>5Y<@*hsI7;t)8l> zPr|muxHBy1TL0Ldn3|rHmigE}Xycz!|B#Zo_Rd!VLN=4N8^VaQyJxPoqjRy-Vvobi ze0-}SqT_=WxO&v=OimuSWcf;W$n#ja#uxIE($fbkY3STEwz99ieEI6k%Brdf73V7_ z(0l6Y<7MT0DBtZB(f~5o!I^mbt|ho*N!JA*TOF|O!W?_2>ZrKwzpoFCs7g#pC%@Iz zxfxp8r5Mbytv-A9L~o|AgR6Teu%dSTOGDr6mWIA@9sNDaYL%J#SLy$;XdI!aM81`u zOuki^Oq4ZsiQ*Ksr{k10o{v$QPR6Ndkl}P(Nkf-t8(Qp`rZYR)*xK<_L&LQ%nEW}` zjyC;ADUcrYj?`z^7}95`9KHXHruW$In#w5BdkEU2NDq3xmZ7x_y-)O}rN@Bb!d(dW z?Y_gtCOW!$B+`4v-SC(gq(po>c;CulQI4Xr#vlG6n@;$LY(C*1NbA52C;Vs;Xia^A z4j!TZf(LCsT0$bC%QkF|^bU>OYB7oaKN594v+SEUZ_N)5+p>0?iYBpfb}goB^>~9K zL+5@*OE>zv{`+v3R5vgqiqo{n3_a6(S$PL1F}&WizVqM#-CLotMsw}XELgIlFfk)T z`%PuGHJ{o7o0|7kTRfb`5%@b1KvJN8idp!X3O^@xj67)|&3PK!IXMRh#l-D&I$3ZM zx$ff|H*S3S`0?XDwB3U=G<3gGSJ(3@{T@pDA6Yss+^B72QMq`ru zZl!b`zRkX0UtcemmtXWl;D(5L7Z0!No43Z}8{x&pD?H2ngF`QEjEt_@k(lhMXJ%bw zLq9q~=UFC}%jx^-p|+vbfmx;&2aPRlD<-RHKgV}CHC-d3Wnl7XqT0-dQ#Ez}oMk$f z*t;y-r(r5wNHLtDZ+^zo-YGLVD|dQEcAoa$%p4v1O+-68`+#-^t%XAA z7|Ys!P(Qz@NHKitw$bKx3oG^J*fi>y+n$Y$P3R9@Ugt^9%pACEm7h^sQBl9wna6oK z0vrL307rl$z!BgGa0EC490861M}Q;15#R`L1ULd50geDifFr;W;0SO8I0762jsQo1 TBft^h2yg^A0vv(Ph`@gU<@t}U literal 32988 zcmeI4J&znk5QZCM@gWEtS|Zu(j6{I=1t%d9Lk1Cnb0o_#vSkZ7wuDT0h{S@7Kj46f zfQX22QvV8g-@Sd#FKV|x4L_3_Ey{4TkTdmJ#D%!+Ff10Xss<4 ztNYuneW$TIcUJfBxAy$Y)^2Nj$$zW0m*2E@S2AL2k3=4?RtOXVg+L)t2owT^Kp{{F z6as}nAy5bu0);>!PzV$Pg+L)t2=pNEKx3~&Cp~jlHT1R&|0McX)QLV2&DE}Z{Knu{ z(K|B%a2?~1q1r!V@Od1Zuz%g-|46a^BYHYv%uyBbf2=|Fobm3n_m##k%LVx|U!R^K z9iOfE@9CPGb#|gT&H>{8P5SYfYqmM$yF~Smz1IE|Aserq#_=7#xTiVqBA-N-jr?2R z9D9I##b*Hi*k)V@WAUS>FRrX7=Xy*pb6LkZI=lbH?~E;Z>STi4;mbO_c-E%}e63sm z-CeGmh#Ru-dG2db%n>}hULAiYBF3oCbJ6Bd{H)QqR>t&r4jJb)+K6)S_)LiX$g^vI zEdCsCzQ;DcZ4$p_S$pfq#kDYHEie}UocU*8IR9SXIVR@gobex8E1KG>k%PRa!Ml@I z_6GU)dW;QUI}O6i{Lmb_z89l0$U5^GX??7-%PL zdWgfk?}=P@bfSoz^<_Kg%e-RUy4g-AdLpu)k+OZq--#kG@sj5#Pv0_Qv4IB|<$H-= zG;$Dgbuqa`hxqLuIkexMDEh41M*KXph%fpQb$FhbEbqp;&f_tz*guzg{dWwT*Id;r z1PXydpb#ho3IQWP?Zh*?@7a8)NR8EI)Nh9xyW^rJyO)Bb&dRk|V!P3|Oa$|GZF%nde~NxsYWJ=|0APY_Z2Y@;SsYW58O7 zpWj4`4xvAG#veoc&LMHeI*-rMUTOa15E4BS19cu}e!S+Ictp*Oo?;)w*bjN%-{@qO z^MybmPzdaTfPW`oAvzV+?*s^hYK6cs0|dhz8Ck5UyVV>uCUvFXv3bAt+_M#*F8^!j;~gc+_SyI6melT<_e^vCUdfLl z@@XA^hkJG3Xv7b{{Y5_8H}6Xkcw|}o=I`|oi@M8qFpuH0$70JmJZC+|GTYDh(O1jm zSegGsbI(QjyH=L5eSd$I+#zE;vc1dV=Y5k{&5zyt>VvVm7Y+NY7w5DS8Drb`ccAf2 z-6b~YkNL+pe@BHJc|P*ew;mdD-)f+5{r{rzpGBR>KH;x<8B_NSzl_7v)fm1z7O&5~ z9B8=O6(Zm@AHM_7THJ?A*k+yBW?a{E`w;gVwpioQC+7BXy=wb?n9LnF>%iyAKG$E4 z>#DK0KR!SAg+YF1?%TfY`FZc>g&X+yJ*&<+rvDq)p4Z<#ZBHLfXvE9BiM8 z*7%$t)>3QfA7HW`uQAp;Y*XpCKGt)5ep&wuk!^P(*K*M&GMvBfYTh*gdm*1mu4f;M zsOPMUn9$2rQ_C|g>T=&U{jOm@&qV0*neq z(d#QQIsWXwhL&eneCP4`Mg2{D=CiIJM6TyM5%|AY-G8VnH5h)xbCJHU_@VAnudme# zf$NTd*RIbO6Z>i^pV_nMi~E(aDX(+s2cx*hr}W#p;u$rS?s!(tq2GRjjn|K#8P)cH zfa@fGsI(BRQ74IO^2R%X^WKU4?A)})nqX5|^IP7}Zq6@1qc>@mKMMkzo*%i6*+d@v zewTe>81g^Yfz)Kd_0g{VVsGX%c~r1xa$9-g-Q^i$9G;0bU2DW885GVu+fkL1VCR1PXydpb#ho3V}kP5GVu+fkL1VCR1PXyd Spb#ho3V}kP5GVwe2>b_IV3_Ct diff --git a/3proxy.rc b/3proxy.rc index 5a9b43c..3ff2cfa 100644 --- a/3proxy.rc +++ b/3proxy.rc @@ -3,8 +3,8 @@ LANGUAGE 0x09, 0x01 VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,7,0,0 - PRODUCTVERSION 0,7,0,0 + FILEVERSION 0,8,0,0 + PRODUCTVERSION 0,8,0,0 FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN diff --git a/Makefile.msvc b/Makefile.msvc index 9e27291..84fe8ec 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -29,14 +29,14 @@ MAKEFILE = Makefile.msvc PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin VERFILE = $(VERFILE) -#../3proxy.res: -# rc /fo../3proxy.res ../3proxy.rc - -#3proxyres.obj: ../3proxy.res -# cvtres /out:3proxyres.obj /MACHINE:I386 ../3proxy.res - include Makefile.inc +../3proxy.res: + rc /fo../3proxy.res ../3proxy.rc + +3proxyres.obj: ../3proxy.res + cvtres /out:3proxyres.obj /MACHINE:I386 ../3proxy.res + allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) \ No newline at end of file diff --git a/Makefile.msvc64 b/Makefile.msvc64 index d6dced7..8a1e98d 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -37,6 +37,13 @@ VERFILE = $(VERFILE) include Makefile.inc +../3proxy.res: + rc /fo../3proxy.res ../3proxy.rc + +3proxyres.obj: ../3proxy.res + cvtres /out:3proxyres.obj /machine:x64 ../3proxy.res + + allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) diff --git a/src/version.h b/src/version.h index 2a103c2..383b4b6 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141214052453" +#define BUILDDATE "150216013249" From 522e6732fe22f5f22d342e8c5d83a97e890d665b Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 2 Mar 2015 21:05:29 +0300 Subject: [PATCH 056/122] SSLPlugin race condition fix + minor corrections to PCREPlugin --- Makefile.msvc | 4 ++-- src/plugins/PCREPlugin/pcre_plugin.c | 11 +++++---- src/plugins/SSLPlugin/my_ssl.c | 36 +++++++++++++++++++++------- src/plugins/SSLPlugin/ssl_plugin.c | 10 ++++---- src/version.h | 2 +- 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/Makefile.msvc b/Makefile.msvc index 84fe8ec..da95036 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -14,7 +14,7 @@ LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386 DLFLAGS = /DLL DLSUFFICS = .dll -LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib +LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib libeay32MT.lib ssleay32MT.lib LIBSOLD = libeay32MT.lib ssleay32MT.lib LIBEXT = .lib LNOUT = /out: @@ -26,7 +26,7 @@ REMOVECOMMAND = del 2>NUL >NUL TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc -PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin +PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin SSLPlugin VERFILE = $(VERFILE) include Makefile.inc diff --git a/src/plugins/PCREPlugin/pcre_plugin.c b/src/plugins/PCREPlugin/pcre_plugin.c index e2ca258..f04d9c1 100644 --- a/src/plugins/PCREPlugin/pcre_plugin.c +++ b/src/plugins/PCREPlugin/pcre_plugin.c @@ -229,12 +229,12 @@ static int h_pcre(int argc, unsigned char **argv){ struct filter *newf; char *replace = NULL; - if(!strcmp(argv[2], "allow")) action = PASS; - else if(!strcmp(argv[2], "deny")) action = REJECT; - else if(!strcmp(argv[2], "remove")) action = REMOVE; - else if(!strcmp(argv[2], "dunno")) action = CONTINUE; + if(!strncmp(argv[2], "allow",5)) action = PASS; + else if(!strncmp(argv[2], "deny",4)) action = REJECT; + else if(!strncmp(argv[2], "remove",6)) action = REMOVE; + else if(!strncmp(argv[2], "dunno",5)) action = CONTINUE; else return 1; - if(!strcmp(argv[0], "pcre_rewrite")) { + if(!strncmp(argv[0], "pcre_rewrite", 12)) { int i,j; offset = 5; replace = pl->mystrdup(argv[4]); @@ -266,6 +266,7 @@ static int h_pcre(int argc, unsigned char **argv){ replace[j] = 0; } if(!(acl = pl->make_ace(argc - offset, argv + offset))) return 2; + acl->nolog = (strstr(argv[2],"log") == 0); if(*argv[3] && !(*argv[3] == '*' && !argv[3][1]) ){ re = pcre_compile((char *)argv[3], pcre_options, &errptr, &offset, NULL); if(!re) { diff --git a/src/plugins/SSLPlugin/my_ssl.c b/src/plugins/SSLPlugin/my_ssl.c index d3a4799..0e7bca7 100644 --- a/src/plugins/SSLPlugin/my_ssl.c +++ b/src/plugins/SSLPlugin/my_ssl.c @@ -8,6 +8,9 @@ #include #include #include +#ifndef _WIN32 +#include +#endif #include #include @@ -110,20 +113,23 @@ SSL_CERT ssl_copy_cert(SSL_CERT cert) static char hash_name[sizeof(src_cert->sha1_hash)*2 + 1]; static char cache_name[200]; - pthread_mutex_lock(&ssl_file_mutex); bin2hex(src_cert->sha1_hash, sizeof(src_cert->sha1_hash), hash_name, sizeof(hash_name)); sprintf(cache_name, "%s%s.pem", cert_path, hash_name); /* check if certificate is already cached */ fcache = fopen(cache_name, "rb"); if ( fcache != NULL ) { +#ifndef _WIN32 + flock(fileno(fcache), LOCK_SH); +#endif dst_cert = PEM_read_X509(fcache, &dst_cert, NULL, NULL); +#ifndef _WIN32 + flock(fileno(fcache), LOCK_UN); +#endif fclose(fcache); if ( dst_cert != NULL ){ - pthread_mutex_unlock(&ssl_file_mutex); return dst_cert; } } - pthread_mutex_unlock(&ssl_file_mutex); /* proceed if certificate is not cached */ dst_cert = X509_dup(src_cert); @@ -163,13 +169,17 @@ SSL_CERT ssl_copy_cert(SSL_CERT cert) /* write to cache */ - pthread_mutex_lock(&ssl_file_mutex); fcache = fopen(cache_name, "wb"); if ( fcache != NULL ) { +#ifndef _WIN32 + flock(fileno(fcache), LOCK_EX); +#endif PEM_write_X509(fcache, dst_cert); +#ifndef _WIN32 + flock(fileno(fcache), LOCK_UN); +#endif fclose(fcache); } - pthread_mutex_unlock(&ssl_file_mutex); return dst_cert; } @@ -212,6 +222,10 @@ SSL_CONN ssl_handshake_to_server(SOCKET s, SSL_CERT *server_cert, char **errSSL) } cert = SSL_get_peer_certificate(conn->ssl); + if(!cert) { + ssl_conn_free(conn); + return NULL; + } /* TODO: Verify certificate */ @@ -312,10 +326,14 @@ void ssl_conn_free(SSL_CONN connection) { ssl_conn *conn = (ssl_conn *) connection; - SSL_shutdown(conn->ssl); - SSL_free(conn->ssl); - SSL_CTX_free(conn->ctx); - free(conn); + if(conn){ + if(conn->ssl){ + SSL_shutdown(conn->ssl); + SSL_free(conn->ssl); + } + if(conn->ctx) SSL_CTX_free(conn->ctx); + free(conn); + } } void _ssl_cert_free(SSL_CERT cert) diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index 3889f1e..172969c 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -53,13 +53,15 @@ struct SSLqueue { /* - Todo: use hashtable + TO DO: use hashtable */ static struct SSLqueue *searchSSL(SOCKET s){ - struct SSLqueue *sslq; + struct SSLqueue *sslq = NULL; + pthread_mutex_lock(&ssl_mutex); for(sslq = SSLq; sslq; sslq = sslq->next) - if(sslq->s == s) return sslq; - return NULL; + if(sslq->s == s) break; + pthread_mutex_lock(&ssl_mutex); + return sslq; } static void addSSL(SOCKET s, SSL_CERT cert, SSL_CONN conn, struct clientparam* param){ diff --git a/src/version.h b/src/version.h index 383b4b6..a97b453 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150216013249" +#define BUILDDATE "150302205552" From 57876336655a276a2430803012894e4465b30c1a Mon Sep 17 00:00:00 2001 From: User Date: Sun, 29 Mar 2015 14:29:50 +0300 Subject: [PATCH 057/122] increasing length of proxy username specified in config --- src/proxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxy.c b/src/proxy.c index e48f436..281bfa4 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -830,7 +830,7 @@ for(;;){ if(keepalive <= 1) sprintf((char*)buf+strlen((char *)buf), "%s: %s\r\n", (param->redirtype == R_HTTP)?"Proxy-Connection":"Connection", keepalive? "keep-alive":"close"); if(param->extusername){ sprintf((char*)buf + strlen((char *)buf), "%s: basic ", (redirect)?"Proxy-Authorization":"Authorization"); - sprintf((char*)username, "%.32s:%.64s", param->extusername, param->extpassword?param->extpassword:(unsigned char*)""); + sprintf((char*)username, "%.128s:%.64s", param->extusername, param->extpassword?param->extpassword:(unsigned char*)""); en64(username, buf+strlen((char *)buf), (int)strlen((char *)username)); sprintf((char*)buf + strlen((char *)buf), "\r\n"); } From 252d481299540150f97c0e435edd174bebddb637 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 May 2015 17:23:26 +0300 Subject: [PATCH 058/122] allow larger request size in HTTP proxy allow larger request size in HTTP proxy & correctly nullify request buffer --- src/proxy.c | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index 281bfa4..32715e2 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -239,7 +239,7 @@ void * proxychild(struct clientparam* param) { bufsize = BUFSIZE; anonymous = param->srv->singlepacket; for(;;){ - memset(buf, 0, BUFSIZE); + memset(buf, 0, bufsize); inbuf = 0; @@ -494,7 +494,7 @@ for(;;){ } inbuf += i; if((bufsize - inbuf) < LINESIZE){ - if (bufsize > 20000){ + if (bufsize > (LINESIZE * 16)){ RETURN (516); } if(!(newbuf = myrealloc(buf, bufsize + BUFSIZE))){RETURN (21);} diff --git a/src/version.h b/src/version.h index a97b453..2c2453f 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150302205552" +#define BUILDDATE "150302210600" From 8e6d8b33147757db782e39c6c3a38081ddeb667b Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 May 2015 17:33:30 +0300 Subject: [PATCH 059/122] increase max address length in X-Forwarded-For --- src/proxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxy.c b/src/proxy.c index 32715e2..ddb58e9 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -817,7 +817,7 @@ for(;;){ sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 "); gethostname((char *)(buf+strlen((char *)buf)), 256); sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); - if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 64); + if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128); else { unsigned long tmp; From aa4125a6f00dee733b2b34d8c2ce32143247f2ab Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 May 2015 17:39:24 +0300 Subject: [PATCH 060/122] Avoid some potential hashtables race conditions --- src/auth.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/auth.c b/src/auth.c index 7ebc99b..939f0fd 100644 --- a/src/auth.c +++ b/src/auth.c @@ -901,6 +901,7 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ c = clock(); if(nhashsize<4) return 1; + pthread_mutex_lock(&hash_mutex); if(ht->hashtable){ myfree(ht->hashtable); ht->hashtable = NULL; @@ -911,11 +912,13 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ } ht->hashsize = 0; if(!(ht->hashtable = myalloc((nhashsize>>2) * sizeof(struct hashentry *)))){ + pthread_mutex_unlock(&hash_mutex); return 2; } if(!(ht->hashvalues = myalloc(nhashsize * (sizeof(struct hashentry) + (ht->recsize-4))))){ myfree(ht->hashtable); ht->hashtable = NULL; + pthread_mutex_unlock(&hash_mutex); return 3; } ht->hashsize = nhashsize; @@ -930,6 +933,7 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ hvalue(i)->next = hvalue(i+1); } ht->hashempty = ht->hashvalues; + pthread_mutex_unlock(&hash_mutex); return 0; } @@ -969,10 +973,13 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign struct hashentry *he; unsigned index; - if(!ht->hashtable || !name) return 0; + pthread_mutex_lock(&hash_mutex); + if(!ht || !ht->hashtable || !name) { + pthread_mutex_unlock(&hash_mutex); + return 0; + } nametohash(name, hash, (unsigned char *)ht->rnd); index = hashindex(ht, hash); - pthread_mutex_lock(&hash_mutex); for(hep = ht->hashtable + index; (he = *hep)!=NULL; ){ if(he->expires < conf.time) { (*hep) = he->next; From bc725189e3f065a81315d59035446375d1440037 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 May 2015 18:06:07 +0300 Subject: [PATCH 061/122] bit more thread safety One more potential race condition in hashtables --- src/auth.c | 5 ++++- src/version.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/auth.c b/src/auth.c index 939f0fd..28f95b9 100644 --- a/src/auth.c +++ b/src/auth.c @@ -943,8 +943,11 @@ void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* val unsigned index; - if(!value||!name||!ht->hashtable||!ht->hashempty) return; pthread_mutex_lock(&hash_mutex); + if(!ht||!value||!name||!ht->hashtable||!ht->hashempty) { + pthread_mutex_unlock(&hash_mutex); + return; + } hen = ht->hashempty; ht->hashempty = ht->hashempty->next; nametohash(name, hen->hash, (unsigned char *)ht->rnd); diff --git a/src/version.h b/src/version.h index 2c2453f..c770653 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150302210600" +#define BUILDDATE "150504180421" From d4f4e4a8072ae3e0f2972cec436fb8f63db7d3a9 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 May 2015 18:12:46 +0300 Subject: [PATCH 062/122] Deadlock in SSLPlugin corrected deadlock due to typo in previous SSL patch --- src/plugins/SSLPlugin/ssl_plugin.c | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index 172969c..a8e16c8 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -60,7 +60,7 @@ static struct SSLqueue *searchSSL(SOCKET s){ pthread_mutex_lock(&ssl_mutex); for(sslq = SSLq; sslq; sslq = sslq->next) if(sslq->s == s) break; - pthread_mutex_lock(&ssl_mutex); + pthread_mutex_unlock(&ssl_mutex); return sslq; } diff --git a/src/version.h b/src/version.h index c770653..a74b143 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150504180421" +#define BUILDDATE "150504181054" From 1ab94fa0024c3e3afa340d0f6c2e7eaee2635575 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 16 May 2015 18:14:35 +0300 Subject: [PATCH 063/122] SSLPlugin: add SNI to server request --- Makefile.msvc64 | 4 ++-- src/plugins/SSLPlugin/my_ssl.c | 13 ++++++++----- src/plugins/SSLPlugin/my_ssl.h | 2 +- src/plugins/SSLPlugin/ssl_plugin.c | 5 ++--- src/proxy.h | 8 +++++++- src/version.h | 2 +- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Makefile.msvc64 b/Makefile.msvc64 index 8a1e98d..b5d4a57 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -14,7 +14,7 @@ LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:x64 DLFLAGS = /DLL DLSUFFICS = .dll -LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib +LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib kernel32.lib Gdi32.lib libeay32MT.lib ssleay32MT.lib LIBSOLD = libeay32MT.lib ssleay32MT.lib LIBEXT = .lib LNOUT = /out: @@ -26,7 +26,7 @@ REMOVECOMMAND = del 2>NUL >NUL TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc64 -PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin +PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin SSLPlugin VERFILE = $(VERFILE) #../3proxy.res: diff --git a/src/plugins/SSLPlugin/my_ssl.c b/src/plugins/SSLPlugin/my_ssl.c index 0e7bca7..1590cc4 100644 --- a/src/plugins/SSLPlugin/my_ssl.c +++ b/src/plugins/SSLPlugin/my_ssl.c @@ -2,11 +2,7 @@ #define _CRT_SECURE_NO_WARNINGS #include "../../structures.h" -#include "../../proxy.h" -#include "my_ssl.h" - #include -#include #include #ifndef _WIN32 #include @@ -19,6 +15,12 @@ #include #include +#include "../../proxy.h" +#include "my_ssl.h" + + + + typedef struct _ssl_conn { SSL_CTX *ctx; SSL *ssl; @@ -184,7 +186,7 @@ SSL_CERT ssl_copy_cert(SSL_CERT cert) } -SSL_CONN ssl_handshake_to_server(SOCKET s, SSL_CERT *server_cert, char **errSSL) +SSL_CONN ssl_handshake_to_server(SOCKET s, char * hostname, SSL_CERT *server_cert, char **errSSL) { int err = 0; X509 *cert; @@ -214,6 +216,7 @@ SSL_CONN ssl_handshake_to_server(SOCKET s, SSL_CERT *server_cert, char **errSSL) ssl_conn_free(conn); return NULL; } + if(hostname && *hostname)SSL_set_tlsext_host_name(conn->ssl, hostname); err = SSL_connect(conn->ssl); if ( err == -1 ) { *errSSL = ERR_error_string(ERR_get_error(), errbuf); diff --git a/src/plugins/SSLPlugin/my_ssl.h b/src/plugins/SSLPlugin/my_ssl.h index 6e41929..8a89e9e 100644 --- a/src/plugins/SSLPlugin/my_ssl.h +++ b/src/plugins/SSLPlugin/my_ssl.h @@ -18,7 +18,7 @@ SSL_CERT ssl_copy_cert(SSL_CERT cert); // // SSL/TLS handshakes // -SSL_CONN ssl_handshake_to_server(SOCKET s, SSL_CERT *server_cert, char **errSSL); +SSL_CONN ssl_handshake_to_server(SOCKET s, char * hostname, SSL_CERT *server_cert, char **errSSL); SSL_CONN ssl_handshake_to_client(SOCKET s, SSL_CERT server_cert, char **errSSL); // diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index a8e16c8..40ef8a8 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -7,13 +7,12 @@ */ #include "../../structures.h" -#include "../../proxy.h" #include /* SSLeay stuff */ #include #include #include #include -#include +#include "../../proxy.h" #include "my_ssl.h" #ifndef _WIN32 @@ -236,7 +235,7 @@ int dossl(struct clientparam* param, SSL_CONN* ServerConnp, SSL_CONN* ClientConn ul = ((unsigned long)ssl_connect_timeout)*1000; setsockopt(param->remsock, SOL_SOCKET, SO_SNDTIMEO, (char *)&ul, 4); } - ServerConn = ssl_handshake_to_server(param->remsock, &ServerCert, &errSSL); + ServerConn = ssl_handshake_to_server(param->remsock, (char *)param->hostname, &ServerCert, &errSSL); if ( ServerConn == NULL || ServerCert == NULL ) { param->res = 8011; param->srv->logfunc(param, (unsigned char *)"SSL handshake to server failed"); diff --git a/src/proxy.h b/src/proxy.h index 82b4dcf..f72519a 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -58,13 +58,13 @@ #ifndef FD_SETSIZE #define FD_SETSIZE 4096 #endif -#include #include #include #include #include #include #include +#include #endif #ifdef __CYGWIN__ @@ -77,7 +77,13 @@ #undef errno #endif #define errno WSAGetLastError() +#ifdef EAGAIN +#undef EAGAIN +#endif #define EAGAIN WSAEWOULDBLOCK +#ifdef EINTR +#undef EINTR +#endif #define EINTR WSAEWOULDBLOCK #define SLEEPTIME 1 #define usleep Sleep diff --git a/src/version.h b/src/version.h index a74b143..dfd75a5 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150504181054" +#define BUILDDATE "150516170531" From 2d6b43f488bb107676165926676bd30d16a42c0c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 1 Jun 2015 00:50:57 +0300 Subject: [PATCH 064/122] 3proxy for dummies updated --- doc/ru/3proxy_for_dummies.rtf | 3557 ++++++++++++++++----------------- 1 file changed, 1735 insertions(+), 1822 deletions(-) diff --git a/doc/ru/3proxy_for_dummies.rtf b/doc/ru/3proxy_for_dummies.rtf index 50389d0..13d1021 100644 --- a/doc/ru/3proxy_for_dummies.rtf +++ b/doc/ru/3proxy_for_dummies.rtf @@ -1,1825 +1,1738 @@ -{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1049\deflangfe1049\themelang1049\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;} -{\f1\fbidi \fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}{\f39\fbidi \fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial CYR;}{\flomajor\f31500\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset204\fprq2{\*\panose 02040503050406030204}Cambria;} -{\fbimajor\f31503\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset204\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f44\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\f42\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\f45\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f46\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f47\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f48\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f49\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f54\fbidi \fswiss\fcharset0\fprq2 Arial;}{\f52\fbidi \fswiss\fcharset238\fprq2 Arial CE;} -{\f55\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f56\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f57\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f58\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} -{\f59\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f60\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f54\fbidi \fswiss\fcharset0\fprq2 Arial;}{\f52\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f55\fbidi \fswiss\fcharset161\fprq2 Arial Greek;} -{\f56\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f57\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f58\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f59\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;} -{\f60\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f434\fbidi \fswiss\fcharset0\fprq2 Arial CYR;}{\f432\fbidi \fswiss\fcharset238\fprq2 Arial CYR CE;}{\f435\fbidi \fswiss\fcharset161\fprq2 Arial CYR Greek;} -{\f436\fbidi \fswiss\fcharset162\fprq2 Arial CYR Tur;}{\f437\fbidi \fswiss\fcharset177\fprq2 Arial CYR (Hebrew);}{\f438\fbidi \fswiss\fcharset178\fprq2 Arial CYR (Arabic);}{\f439\fbidi \fswiss\fcharset186\fprq2 Arial CYR Baltic;} -{\f440\fbidi \fswiss\fcharset163\fprq2 Arial CYR (Vietnamese);}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fdbmajor\f31520\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31530\fbidi \froman\fcharset0\fprq2 Cambria;} -{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} -{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;} -{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fdbminor\f31560\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} -{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} -{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;} -{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; -\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp -\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1049\langfe1049\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1049\langfenp1049 \snext0 \sqformat \spriority0 Normal;} -{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1049\langfe1049\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1049\langfenp1049 \snext11 \ssemihidden \sunhideused -Normal Table;}}{\*\rsidtbl \rsid3764488\rsid11355186}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator vlad}{\creatim\yr2011\mo7\dy9\hr1\min32} -{\revtim\yr2011\mo7\dy9\hr1\min34}{\version2}{\edmins2}{\nofpages18}{\nofwords7180}{\nofchars40932}{\nofcharsws48016}{\vern49255}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} -\paperw12240\paperh15840\margl1701\margr850\margt1134\margb1134\gutter0\ltrsect -\deftab709\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 -\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot3764488 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} -{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} -{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 -\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 -\fs22\lang1049\langfe1049\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1049\langfenp1049 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -Kurmaeff Halit -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e8\'fe\'ed\'fc}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\hich\af39\dbch\af31505\loch\f39 2006 -\par -\par \hich\af39\dbch\af31505\loch\f39 halit_at_mail_dot_ru -\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d1\'e5\'ec\'fc\loch\f39 \hich\f39 \'f1\'eb\'ee\'e5\'e2\loch\f39 \hich\f39 \'ec\'e0\'f2\'f0\'e5\'f8\'ea\'e8\loch\f39 \hich\f39 , \'e8\'eb\'e8 -\loch\f39 \hich\f39 \'cd\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\loch\f39 \hich\f39 3proxy \'e4\'eb\'ff\loch\f39 \hich\f39 \'f7\'e0\'e9\'ed\'e8\'ea\'ee\'e2 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 \hich\f39 1.3, \'e8\'f1\'ef\'f0\'e0\'e2\'eb\'e5\'ed\'ed\'e0\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'ee\'ef\'ee\'eb\'ed\'e5\'ed\'ed\'e0\'ff\loch\f39 \hich\f39 , -\'ec\'e0\'f0\'f2\loch\f39 , 2010) -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \loch\af39\dbch\af31505\hich\f39 \'d5\'ee\'f7\'f3\loch\f39 \hich\f39 \'ef\'ee\'e4\'e5\'eb\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'f1\'e2\'ee\'e8\'ec\loch\f39 \hich\f39 \'ee\'ef\'fb\'f2\'ee\'ec\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'ed\'e0 -\'f1\'f2\'f0\'ee\'e9\'ea\'e5\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'c7\'e0\'f0\'e0\'e7\'fb -\loch\f39 \hich\f39 - 3proxy. \'c4\'ee\'eb\'e3\'ee\'e5\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'eb\'f1\'ff\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8\'ec\loch\f39 \hich\f39 \'e8 -\'ed\'f2\'e5\'f0\'e5\'f1\'ed\'fb\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'ee\'ec\loch\f39 \hich\f39 ES Proxy http://esproxy.org.ua \'ee\'f2\loch\f39 \hich\f39 \'c3\'e5\'ee\'f0\'e3\'e8\'ff\loch\f39 \hich\f39 \'cf\'e0 -\'e2\'eb\'e5\'ed\'ea\'ee\loch\f39 \hich\f39 - \'ec\'e0\'eb\'e5\'ed\'fc\'ea\'ee\'e3\'ee\loch\f39 \hich\f39 (\'e2\'f1\'e5\'e3\'ee\loch\f39 \hich\f39 \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 exe-\'f8\'ed\'e8\'ea\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 300 \'ea\'c1\loch\f39 \hich\f39 ), \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e5\loch\f39 \hich\f39 \'e8\loch\f39 -\hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'ed\'e5\'f2\'f0\'e5\'e1\'ee\'e2\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f0\'e5\'f1\'f3\'f0\'f1\'e0\'ec\loch\f39 \hich\f39 - \'ef\'ee\loch\f39 \hich\f39 \'ea -\'f0\'e0\'e9\'ed\'e5\'e9\loch\f39 \hich\f39 \'ec\'e5\'f0\'e5\loch\f39 \hich\f39 , \'ef\'f0\'e8\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 \'f1\'ee\'f2\'ed\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\loch\af39\dbch\af31505\hich\f39 \'fc -\loch\af39\dbch\af31505\hich\f39 \'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 \'f3\'ec\'f3\'e4\'f0\'ff\'eb\'f1\'ff\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 \'f1\'f2\'e0\'f0\'e8\'ed\'ed\'ee\'ec\loch\f39 \hich\f39 P133, \'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'f2\'fb\'ea\'e0\'ff\'f1\'fc\loch\f39 \hich\f39 . \'c8\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee -\loch\f39 \hich\f39 \'e2\'ee\'f2\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 <\'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 > - \'e8\'ed\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea -\'f1\'e8\'ea\loch\f39 \hich\f39 \'f1\'e0\'ec\'ee\'ef\'f0\'ee\'e8\'e7\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ef\'ee\'e6\'e8\'f0\'e0\'eb\loch\f39 \hich\f39 100% \'ef\'f0\'ee\'f6\'e5\'f1\'f1\'ee\'f0\'e0\loch\f39 \hich\f39 , \'f5\'ee\'f2\'ff -\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'f0\'ee\'e4\'ee\'eb\'e6\'e0\'eb\loch\f39 \hich\f39 \'f7\'e0\'f1\'f2\'e8\'f7\'ed\'ee\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'ee\'f1\'f2\'fc\'fe\loch\f39 \hich\f39 \'f1\'ef -\'f0\'e0\'e2\'eb\'ff\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'f1\'ee\loch\f39 \hich\f39 \'f1\'e2\'ee\'e8\'ec\'e8\loch\f39 \hich\f39 \'ee\'e1\'ff\'e7\'e0\'ed\'ed\'ee\'f1\'f2\'ff\'ec\'e8\loch\f39 \hich\f39 - \'e0\loch\f39 \hich\f39 \'f2\'e0\'ea\'e6\'e5 -\loch\f39 \hich\f39 \'f2\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e0\loch\af39\dbch\af31505\hich\f39 \'e2\'f2\'ee\'f0\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 - 4 \'e3\'ee\'e4\'e0\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'ee\'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'ed\'e8\'ea\'e0\'ea\'e8\'f5\loch\f39 \hich\f39 \'ef\'f0\'e8\'e7\'ed\'e0\'ea\'ee\'e2\loch\f39 \hich\f39 -\'e6\'e8\'e7\'ed\'e8\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'e4\'f3\'ea\'f2\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f0\'e0\'e7\'e2\'e8\'f2\'e8\'e8 -\loch\f39 \hich\f39 - \'ef\'f0\'e8\'e2\'e5\'eb\'e8\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ef\'ee\'e8\'f1\'ea\'e0\'ec\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'e4\'f5\'ee\'e4\'ff\'f9\'e5\'e3\'ee\loch\f39 -\hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 . \'d1\'ea\'e0\'e6\'f3\loch\f39 \hich\f39 \'f1\'f0\'e0\'e7\'f3\loch\f39 \hich\f39 - \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ea\'f0 -\'e0\'f1\'e8\'e2\'fb\'ec\'e8\loch\f39 \hich\f39 GUI \'ec\'e5\'ed\'ff\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'eb\'e5\'ea\'e0\'eb\'e8\loch\f39 \hich\f39 \'ec\'e0\'eb\'ee\loch\f39 \hich\f39 , \'ff\loch\f39 \hich\f39 \'f1\'f2\'ee\'f0\'ee\'ed\'ed\'e8\'ea -\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'f6\'e8\'ef\'e0\loch\f39 \hich\f39 <\'cc\'ed\'e5\loch\f39 \hich\f39 \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'e5\'f5\'e0\'f2\'fc\loch\f39 \hich\f39 >, \'e0\loch\f39 \hich\f39 \'ea\'f0\'e0 -\loch\af39\dbch\af31505\hich\f39 \'f1\loch\af39\dbch\af31505\hich\f39 \'e8\'e2\'fb\'e9\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\loch\f39 \hich\f39 - \'fd\'f2\'ee\loch\f39 \hich\f39 , \'ea\'ee\'ed\'e5\'f7\'ed\'ee\loch\f39 \hich\f39 , \'f5 -\'ee\'f0\'ee\'f8\'ee\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f3\'f9\'e5\'f0\'e1\loch\f39 \hich\f39 \'ef\'f0\'ee\'e8\'e7\'e2\'ee\'e4\'e8\'f2\'e5\'eb\'fc\'ed\'ee\'f1\'f2\'e8\loch\f39 -\hich\f39 . \'cf\'e5\'f0\'e5\'ef\'f0\'ee\'e1\'ee\'e2\'e0\'e2\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'f5\'ee\'f0\'ee\'f8\'e5\'e9\loch\f39 \hich\f39 \'e6\'e8\'e7\'ed\'e8\loch\f39 \hich\f39 5-6 \'f0\'e0\'e7\'ed\'fb -\'f5\loch\f39 \hich\f39 \'ef\'f0\'ee\'e4\'f3\'ea\'f2\'ee\'e2\loch\f39 \hich\f39 (\'f1\'f0\'e5\'e4\'e8\loch\f39 \hich\f39 \'ed\'e8\'f5\loch\f39 \hich\f39 Usergate, Proxy+, Lan4net....) \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'f1\'f2 -\'e0\'e2\'f8\'e8\'f1\'fc\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'fb\'ec\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e0\'e5\'ec\'fb\'ec\'e8\loch\f39 \hich\f39 \'f0\'e5\'e7\'f3\'eb\'fc\'f2\'e0\'f2\'e0\'ec\'e8\loch\f39 \hich\f39 (\'e4\'ee\'eb\'e6 -\'e5\'ed\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e8\'e7\'e2\'e5\'f1\'f2\'ed\'fb\'e9\loch\f39 \hich\f39 \'ef\'f0\'ee\'e4\loch\af39\dbch\af31505\hich\f39 \'f3 -\loch\af39\dbch\af31505\hich\f39 \'ea\'f2\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 Microsoft \'ff\loch\f39 \hich\f39 \'f0\'e5\'f8\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ee\'f2\'ec\'e5\'eb\loch\f39 \hich\f39 \'e2\'e2\'e8\'e4\'f3 -\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'e2\'fb\'f1\'ee\'ea\'ee\'e9\loch\f39 \hich\f39 \'f1\'f2\'ee\'e8\'ec\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 ), \'f0\'e5\'f8\'e8\'eb\loch\f39 \hich\f39 \'ef\'ee\'ef\'f0\'ee\'e1\'ee\'e2\'e0\'f2\'fc -\loch\f39 \hich\f39 \'f2\'e0\'ea\'e8\loch\f39 \hich\f39 3proxy, \'f2\'e5\'ec\loch\f39 \hich\f39 \'ef\'e0\'f7\'e5\loch\f39 \hich\f39 \'f1\'eb\'fb\'f8\'e0\'eb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'ee\'ec\loch\f39 -\hich\f39 \'f5\'ee\'f0\'ee\'f8\'e8\'e5\loch\f39 \hich\f39 \'ee\'f2\'ea\'eb\'e8\'ea\'e8\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ea\'f2\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e6\'e0\'eb\'ee\'e2\'e0\'eb\'f1\'ff\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ed\'e5\'e3\'ee\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'eb\'ee\'e6\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2 -\'f0\'ee\'e9\'ea\'e8\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'f7\'e5\'ec\loch\f39 \hich\f39 , \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 , \'ed\'e5\'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e7\'e0 -\'e1\'e5\'e3\'e0\'ff\loch\f39 \hich\f39 \'e2\'ef\'e5\'f0\'e5\'e4\loch\f39 \hich\f39 , \'ff\loch\f39 \hich\f39 \'e8\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e8\loch\af39\dbch\af31505\hich\f39 \'ec\'e5\'eb\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6 -\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'f3\'e1\'e5\'e4\'e8\'f2\'fc\'f1\'ff\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\'e9\'e4\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\'e5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e0\'e1\'ee\'f2\'f7\'e8\'ea\'e0\loch\f39 -\hich\f39 http://3proxy.ru/, \'ef\'ee\'f7\'e8\'f2\'e0\'eb\loch\f39 \hich\f39 \'ef\'f0\'ee\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 - \'e8\loch\f39 \hich\f39 \'e2\'ee\'e7\'f0\'e0\'e4\'ee\'e2\'e0\'eb\'f1\'ff -\loch\f39 \hich\f39 . \'d2\'f3\'f2\loch\f39 \hich\f39 \'f2\'e5\'e1\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'e5\loch\f39 \hich\f39 \'eb\'e8\'ec\'e8\'f2\'fb\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'ee -\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 , \'e8 -\loch\f39 \hich\f39 FTP, \'e8\loch\f39 \hich\f39 SOCKS, \'e8\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2-\'ec\'e0\'ef\'ef\'e5\'f0\'fb\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\loch\f39 -\hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ef\'ee\'e4\loch\f39 Win\hich\af39\dbch\af31505\loch\f39 \hich\f39 dows, \'f2\'e0\'ea\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'e4\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'ec\'e8\loch\f39 \hich\f39 -\'ed\'e8\'ea\'f1\'e0\'ec\'e8\loch\f39 \hich\f39 . \'c1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'f3 -\'ed\'e8\'ea\'e0\'eb\'fc\'ed\'fb\'e5\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 - \'e2\'f0\'ee\'e4\'e5\loch\f39 \hich\f39 \'e2\'e5\'e4\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e6\'f3\'f0\'ed\'e0\'eb\'ee\'e2 -\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 ODBC \'e8\'eb\'e8\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'e8\'e7\'e2\'ee\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e0 -\loch\f39 \hich\f39 \'eb\'ee\'e3\'ee\'e2\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 <\'f1 -\'ea\'ee\'f0\'ec\'e8\'f2\'fc\loch\f39 \hich\f39 > \'eb\'fe\'e1\'ee\'ec\'f3\loch\f39 \hich\f39 \'eb\'ee\'e3-\'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\'f3\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'ee\'e1\'f9\'e5\'ec\loch\f39 \hich\f39 , \'e2\'f1\'b8 -\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'ed\'e0\'e4\'ee\'e1\'e8\'f2\'fc\loch\af39\dbch\af31505\hich\f39 \'f1\loch\af39\dbch\af31505\hich\f39 \'ff\loch\f39 \hich\f39 \'f1\'e8\'f1\'f2\'e5\'ec -\'ed\'ee\'ec\'f3\loch\f39 \hich\f39 \'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e0\'f2\'ee\'f0\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 -\'f3\'e4\'ee\'e2\'eb\'e5\'f2\'e2\'ee\'f0\'e8\'f2\'fc\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'f3\'f1\'ea\'e0\'f2\'fc\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ea\'f3\'e4\'e0 -\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee\loch\f39 \hich\f39 ... \'cd\'e5\loch\f39 \hich\f39 \'f5\'e2\'e0\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'f0\'e0\'e7\'e2\'e5\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \hich\f39 \'ea\'fd -\'f8\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'e4\'e0\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ef\'e0\'f0\'fb\loch\f39 \hich\f39 \'ec\'e5\'eb\'ee\'f7\'e5\'e9\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'fd\'f2\'ee -\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'ee\'e1\'e5\'f9\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'ec\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f9\'e5\'ec\loch\f39 -\hich\f39 , \'e4\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f1\'ee\'e4\'e5\'f0\'e6\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'f4\'ee\'f0\'f3\'ec\'e0\loch\f39 \hich\f39 , \'ee\'ef\'e5\'f0\'e0\'f2\'e8\'e2\'ed\'fb\'ec -\loch\f39 \hich\f39 \'ee\'f2\'e2\'e5\'f2\'e0\'ec\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\loch\af39\dbch\af31505\hich\f39 \'f1\loch\af39\dbch\af31505\hich\f39 \'fb\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5 -\'eb\'e5\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f1\'ee\'e4\'e5\'f0\'e6\'e8\'ec\'ee\'ec\'f3\loch\f39 \hich\f39 changelog'\'e0\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 0.6 \'e2\'e8\'e4\'ed\'ee\loch\f39 \hich\f39 , \'f7 -\'f2\'ee\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\loch\f39 \hich\f39 \'ed\'e0\'e4\loch\f39 \hich\f39 \'f1\'ee\'e2\'e5\'f0\'f8\'e5\'ed\'f1\'f2\'e2\'ee\'e2\'e0\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e8 -\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'fb\'ec\loch\f39 \hich\f39 \'f5\'ee\'e4\'ee\'ec\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ea\'e0\'f7\'e0\'e2\loch\f39 \hich\f39 \'e4\'e8\'f1\'f2\'f0\'e8\'e1\'f3\'f2\'e8\'e2\loch\f39 \hich\f39 (555 \'ea\'c1\loch\f39 \hich\f39 ! \'e2\loch\f39 \hich\f39 \'e0\'ea\'f2\'f3\'e0\'eb\'fc\'ed\'ee\'e9\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\loch\f39 \hich\f39 \'ed\'e0\'ef\'e8\'f1\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'fc\'e8\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 devel 0.6), \'ff -\loch\f39 \hich\f39 \'ef\'ee\'e3\'f0\'f3\'e7\'e8\'eb\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e8\'e7\'f3\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e7\'f6\'e0\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6\'e8 -\'ee\'ed\'ed\loch\af39\dbch\af31505\hich\f39 \'ee\'e3\'ee\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'e0\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'ef\'f0\'e8\'eb\'e0\'e3\'e0\'eb\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 -\'ea\'ee\'ec\'ef\'eb\'e5\'ea\'f2\'e5\loch\f39 \hich\f39 . \'cf\'ee\loch\f39 \hich\f39 \'f5\'ee\'e4\'f3\loch\f39 \hich\f39 \'e8\'e7\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\'ee\'e7\'ed\'e8\'ea\'eb\'ee\loch\f39 \hich\f39 \'ed\'e5\'ec\'e0\'eb\'ee -\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'ee\'e2\loch\f39 \hich\f39 . \'d1\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8\'f8\'eb\'ee\'f1\'fc\loch\f39 -\hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f0\'e0\'f1\'ef\'e5\'f7\'e0\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ed\'e5\'f1\'ef\'e5\'f8\'ed\'ee\loch\f39 \hich\f39 \'e8\'e7 -\'f3\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 , FAQ \'e8\loch\f39 \hich\f39 HowTo. \'ca\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'fd\'f2\'e8\loch\f39 \hich\f39 \'ec\'e0\'f2\'e5\'f0\'e8\'e0\'eb\'fb\loch\f39 \hich\f39 \'e1\'fb\'eb\'e8 -\loch\f39 \hich\f39 \'e8\'e7\'f3\'f7\'e5\'ed\'fb\loch\f39 \hich\f39 , \'ee\'ea\'e0\'e7\'e0\'eb\'ee\'f1\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'ee\'e2\loch\f39 \hich\f39 \'ec\'e5\'ed\'fc\'f8\'e5\loch\f39 -\hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'eb\'ee\loch\f39 \hich\f39 . \'cf\'ee\'ef\'fb\'f2\'ea\'e8\hich\af39\dbch\af31505\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1 -\'e8\loch\f39 \hich\f39 \'e1\'fb\'eb\'e8\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'ee\'ed\'e0\'f7\'e0\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e1\'e5\'e7\'f3\'f1\'ef\'e5\'f8\'ed\'fb\'ec\'e8\loch\f39 \hich\f39 , \'ef\'f0\'e8\'f8\'eb\'ee\'f1\'fc\loch\f39 -\hich\f39 \'ef\'ee\'f7\'e8\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ec\'e0\'f2\'e5\'f0\'e8\'e0\'eb\'fb\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e5\'f0\'e5\'ed\'f6\'e8\'e8\loch\f39 \hich\f39 , \'e3\'e4\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e1\'fb -\'eb\loch\f39 \hich\f39 \'ed\'e0\'e9\'e4\'e5\'ed\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e7\'e5\'f6\loch\f39 \hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6 -\'e8\'ee\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'e0\loch\f39 \hich\f39 , \'ef\'ee\'f1\'f2\'f0\'ee\'e5\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'f6\'e8\'ef\'f3\loch\f39 \hich\f39 <\'f0\'e0\'e7 -\'f0\'e5\'f8\'e8\'f2\'fc\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'f1\'e5\'ec\loch\f39 \hich\f39 >. \'ca\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'e2\'ee\'f2\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 (\'e2 -\'e5\'f0\'f1\'e8\'ff\loch\f39 0): -\par \hich\af39\dbch\af31505\loch\f39 auth none -\par \hich\af39\dbch\af31505\loch\f39 log -\par \hich\af39\dbch\af31505\loch\f39 proxy -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'f1\'e5\loch\f39 \hich\f39 \'e3\'e5\'ed\'e8\'e0\'eb\'fc\'ed\'ee\'e5\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'e3\'ee\'e2\'ee\'f0\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 , \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 -\hich\f39 . \'c0\loch\f39 \hich\f39 \'ec\'ee\'ff\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1\'ea\'e0\loch\f39 \hich\f39 \'e7\'e0\'ea\'eb\'fe\'f7\'e0\'eb\'e0\'f1\'fc\loch\f39 \hich\f39 , \'ea\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 -\hich\f39 \'f0\'e0\'e7\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f2\'ee\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ff\loch\f39 \hich\f39 \'ef\'fb\'f2\'e0\'eb\'f1\'ff\loch\f39 \hich\f39 \'f1\'f0\'e0\'e7\'f3\loch\f39 \hich\f39 \'ed -\'e0\'ef\'e8\'f1\'e0\'f2\'fc\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f7\'e8\'e9\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'f1\'ee\loch\f39 \hich\f39 \'e2\'f1\'e5\'ec\'e8\loch\f39 \hich\f39 \'eb\'e8\'ec\'e8\'f2\'e0\'ec\'e8\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'f2.\'e4\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'e0\'e6\'ed\'ee\loch\f39 \hich\f39 ! \'ca\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'e1\'f9\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5 -\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'ed\'e0\'f5\'ee\'e4\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'e9\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'e5\loch\f39 \hich\f39 \'f1\loch\f39 -\hich\f39 \'e8\'f1\'ef\'ee\'eb\'ed\'ff\'e5\'ec\'fb\'ec\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'ee\'ec\loch\f39 3proxy.exe \hich\af39\dbch\af31505\loch\f39 \hich\f39 (\'ef\'ee\loch\f39 \hich\f39 \'f3\'ec\'ee\'eb\'f7\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 -\'e2\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'e5\loch\f39 \hich\f39 bin). \'c8\'ed\'e0\'f7\'e5\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'f2\'fc\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'ed\'ff\'e5\'ec\'fb\'e9 -\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ef\'f3\'f2\'e8\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 90% \'f1\'eb\'f3\'f7\'e0\'ff\'f5\loch\f39 \hich\f39 \'fd\'f2\'ee\'f2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2 -\'e0\'f2\'fc\loch\f39 \hich\f39 . \'d0\'e0\'e7\'e1\'e5\'f0\'e5\'ec\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e5\'ec\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'ee\'e9\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'e5\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'fb\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e0 -\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'ff\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'f0\'e5\'e1\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 , \'e4\'ee\'f1\'f2\'f3\'ef -\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e0\'fe\'f2\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'fe\'e7\'e5\'f0\loch\af39\dbch\af31505\hich\f39 \'fb\loch\f39 \hich\f39 \'e1\'e5\'e7\loch\f39 \hich\f39 \'e8\'f1\'ea\'eb\'fe\'f7\'e5\'ed\'e8\'ff -\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e2\'fb\loch\f39 \hich\f39 \'ef\'ee\'ef\'fb\'f2\'e0\'e5\'f2\'e5\'f1\'fc\loch\f39 \hich\f39 \'e2\'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\'e9 -\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 \'ea\'e0\'ea\'e8\'e5-\'f2\'ee\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 -\hich\f39 \'ee\'ed\'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f0\'e0\'e1\'ee\'f2\'e0\'fe\'f2\loch\f39 \hich\f39 , \'ee\loch\f39 \hich\f39 \'f7\'e5\'ec\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f1\'ee\'ee\'e1\'f9\'e0\'e5\'f2\'f1\'ff -\loch\f39 \hich\f39 \'e2\loch\f39 FAQ. -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'ee\loch\f39 \hich\f39 \'e2\'f2\'ee\'f0\'ee\'e9\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e5\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e5\'ec\loch\f39 \hich\f39 \'e2\'e5\'e4\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'eb\'ee -\'e3\'e0\loch\f39 \hich\f39 , \'ef\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'fb\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 \'ef\'f3\'f2\'fc\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f4 -\'e0\'e9\'eb\'f3\loch\f39 \hich\f39 , \'f1\'eb\'e5\'e4\'ee\'e2\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 , \'eb\'ee\'e3\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e2\'ee\'e4\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'fd\loch\af39\dbch\af31505\hich\f39 \'ea\'f0\'e0\'ed\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c8\loch\f39 \hich\f39 , \'ed\'e0\'ea\'ee\'ed\'e5\'f6\loch\f39 \hich\f39 , \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'e5\'ec\loch\f39 \hich\f39 \'f1\'e0\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'e4\'e0\'f0\'f2\'ed\'ee\'ec\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'f3\loch\f39 3128. -\par \loch\af39\dbch\af31505\hich\f39 \'cc\'ed\'ee\'e3\'e8\'e5\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'fb\loch\f39 \hich\f39 \'ee\'ef\'f3\'f9\'e5\'ed\'fb\loch\f39 \hich\f39 , \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 -\hich\f39 , \'e4\'eb\'ff\loch\f39 \hich\f39 \'ed\'e8\'f5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'e2\'ee\'e7\'fc\'ec\'e5\'f2\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 -\'f3\'ec\'ee\'eb\'f7\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 . \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\'e5\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5 -\'eb\'fc\'f1\'ea\'e8\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\'f5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e8\'f2\'fc\loch\f39 \hich\f39 \'e2\'e0\'f8\loch\f39 \hich\f39 \'eb\'fe\'e1\'e8\'ec\'fb\'e9\loch\f39 \hich\f39 \'e1 -\'f0\'e0\'f3\'e7\'e5\'f0\loch\f39 \hich\f39 - \'ed\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'fe\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'e2\'e0\loch\af39\dbch\af31505\hich\f39 \'f1\loch\f39 \hich\f39 , \'e0\loch\f39 -\hich\f39 \'f3\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'ef\'ee\'f7\'e5\'f2\'ed\'ee\'e5\loch\f39 \hich\f39 \'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'eb\'e5\'f2\loch\f39 -\hich\f39 8 \'e7\'e0\'ed\'e8\'ec\'e0\'e5\'f2\loch\f39 \hich\f39 Opera - \'e2\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'f1\'e5\'f2\'e5\'e2\'fb\'f5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'ef\'ee\'f1 -\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e3\'e0\'eb\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 "\'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 ", \'e0\loch\f39 \hich\f39 \'e7\'e0\'f2\'e5 -\'ec\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'f0\'ee\'f2\'ee\'ea\'ee\'eb\'ee\'e2\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 IP \'e2\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 -\'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 3128. -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e2\'e0\'ec\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ed\'f3\'e6\'e5\'ed\loch\f39 \hich\f39 \'f3\'f7\'e5\'f2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ea\'ee -\'ed\'f2\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 , \'ec\'e0\'eb\'ee\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'e5\'f1\'f3\'e5\'f2\loch\f39 \hich\f39 \'e1\'e5\'e7\'ee\'ef\'e0\loch\af39\dbch\af31505\hich\f39 \'f1\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'f1\'e5 -\'f2\'e8\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'e2\'e0\'f1\loch\f39 \hich\f39 \'e1\'e5\'e7\'eb\'e8\'ec\'e8\'f2\'ed\'fb\'e9\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 -\'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'fd\'f2\'e8\'ec\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 , \'ef\'ee\loch\f39 \hich\f39 \'ea\'f0\'e0\'e9\'ed\'e5\'e9\loch\f39 \hich\f39 \'ec -\'e5\'f0\'e5\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'ee\'e5\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'ff\loch\f39 \hich\f39 . \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'f3\'e4\'e0\'eb\'e8\'f2\'fc -\loch\f39 \hich\f39 \'e2\'f2\'ee\'f0\'f3\'fe\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 , \'ee\'ed\'e0\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'e1\'ff\'e7\'e0\'f2\'e5\'eb\'fc\'ed\'e0\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e5\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e1\'fb\loch\f39 -\hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 service, \'e4\'eb\'ff\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb -\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'eb\'f1\'ff\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'e0\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 -\'ed\'e5\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'fb\'ec\loch\f39 \hich\f39 \'ef\'f0\'e8\'eb\'ee\'e6\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 -\hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'e2\'e0\'f0\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'ee\'e2\'e8\'f2\'fc\loch\f39 -\hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'f3\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 3proxy --install. -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'ef\'e5\'f8\'e8\'f2\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 ! \'c4\'e5\'eb\'ee\loch\f39 -\hich\f39 \'e2\loch\f39 \hich\f39 \'f2\'ee\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f7\'e8\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f9\'e5\'ed\loch\f39 \hich\f39 \'ef\'f0\'e8\'eb\'ee\'e6\'e5\'ed\'e8\'e5\'ec\loch\f39 -\hich\f39 , 3proxy \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f1\'f0\'e0\'e7\'f3\loch\f39 \hich\f39 \'e2\'fb\'e4\'e0\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'fd\'ea\'f0\'e0\'ed\loch\f39 \hich\f39 \'f1\'ee\'ee\'e1\'f9\'e5\'ed -\'e8\'ff\loch\f39 \hich\f39 \'ee\'e1\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'e5\'ec\'fb\'f5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'e0\'f5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1 -\'ea\'e0\'f5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'e0\'ec\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'e4\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'ec\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e5\'ea\'f1\'f2\'ee\'e2 -\'fb\'e5\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 . \'cf\'f0\'e8\'f7\'e5\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ee\'f1\'ee\'e1\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'f0\'e0\'e4\'f3\'e5\'f2\loch\f39 \hich\f39 , \'f1 -\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'e4\'e0\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1\'ea\'e8\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'ee\'ec\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e8 -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 , \'e3\'e4\'e5\loch\f39 \hich\f39 \'fd\'f2\'e0\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1\'ea\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8\'f1\'f3\'f2\'f1\'f2\'e2\'f3\'e5\'f2 -\loch\f39 \hich\f39 . \'c0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'e0\'e4\'e8\'e8\loch\f39 \hich\f39 \'ee\'e1\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'ef -\'ee\'ec\'ee\'e3\'e0\'e5\'f2\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'e0\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\loch\f39 \hich\f39 \'e2\'e0\'e6\'ed\'ee\'e5\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0 -\loch\af39\dbch\af31505\hich\f39 \'ed\'e8\'e5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f7\'e5\'f2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 - \'ed\'e8\'ea\'e0\'ea\'e8\'f5\loch\f39 \hich\f39 \'eb\'e8\'f8\'ed\'e8\'f5\loch\f39 \hich\f39 - \'ef\'f0\'ee\'e1\'e5\'eb\'ee\'e2\loch\f39 \hich\f39 , \'f2\'e0\'e1\'f3\'eb\'ff\'f6\'e8\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2.\'ef\loch\f39 \hich\f39 . \'e7\'ed\'e0\'ea\'ee\'e2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0 -\'eb\'e5\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e8\loch\f39 \hich\f39 , \'e8\'ed\'e0\'f7\'e5\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e0\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f1 -\'f7\'e8\'f2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'e7\'e0\'ea\'ee\'ec\'e5\'ed\'f2\'e8\'f0\'ee\'e2\'e0\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e8\'f2\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'e1\'f3\'e4 -\'e5\'f2\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 . -\par -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ce\'ef\'e8\'f8\'e5\'ec\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'ef\'ee\'eb\'e0\'e3\'e0\'e5\'ec\'f3\'fe\loch\f39 \hich\f39 \'f1\'e8\'f2\'f3\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 . \'cd\'e0\'e4\'ee\loch\f39 \hich\f39 "\'ef\'f3 -\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\loch\f39 \hich\f39 " \'ed\'e0\loch\f39 \hich\f39 3 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\hich\af39\dbch\af31505\loch\f39 \hich\f39 IP \'e0\'e4\'f0\'e5 -\'f1\'e0\'ec\'e8\loch\f39 \hich\f39 192.168.0.2,192.168.0.3,192.168.0.4, \'e2\loch\f39 \hich\f39 \'ea\'e0\'f7\'e5\'f1\'f2\'e2\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e2\'fb\'f1\'f2\'f3\'ef\'e0 -\'e5\'f2\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e4\'e2\'f3\'ec\'ff\loch\f39 \hich\f39 \'f1\'e5\'f2\'e5\'e2\'fb\'ec\'e8\loch\f39 \hich\f39 \'ea\'e0\'f0\'f2\'e0\'ec\'e8\loch\f39 \hich\f39 , -\'e2\'ed\'f3\'f2\'f0\'e5\'ed\'ed\'e8\'ec\loch\f39 \hich\f39 IP-\'e0\'e4\'f0\'e5\'f1\'ee\'ec\loch\f39 \hich\f39 192.168.0.1 \'e8\loch\f39 \hich\f39 "\'e2\'ed\'e5\'f8\'ed\'e8\'ec\loch\f39 \hich\f39 ", \'f2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc -\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'ed\'fb\'ec\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'ee\'ec\loch\f39 \hich\f39 211.80.11.12. \'ce\'f2\loch\f39 -\hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'fb\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\af39\dbch\af31505\hich\f39 \'e0\hich\af39\dbch\af31505\loch\f39 \hich\f39 - DNS-\'f1\'e5\'f0\'e2\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 : 213.153.100.1 \'e8\loch\f39 213.153.101.1. -\par \loch\af39\dbch\af31505\hich\f39 \'d3\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e5\'ed\loch\f39 \hich\f39 SMTP-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 smtp.provider.ru. -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e5\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'e0\'ec\'e8\loch\f39 \hich\f39 192.168.0.2-192.168.0.4 \'f0\'e0\'e1\'ee\'f2\'e0\'fe -\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e8\loch\f39 \hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2\loch\f39 \hich\f39 , \'cf\'e5\'f2\'f0\'ee\'e2\loch\f39 \hich\f39 , \'d1\'e8\'e4\'ee\'f0\'ee\'e2\loch\f39 \hich\f39 \'f1\'ee\'ee\'f2\'e2 -\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'ee\'e2\'e8\'ec\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'f3\loch\f39 c:\\\hich\f39 3proxy, \'f5 -\loch\af39\dbch\af31505\hich\f39 \'ee\'f2\'ff\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'ee\'e2\'e8\'ec\loch\f39 \hich\f39 - \'fd\'f2\'ee\loch\f39 \hich\f39 \'e3\'f0\'ee\'ec\'ea\'ee\loch\f39 \hich\f39 \'f1\'ea\'e0\'e7\'e0\'ed\'ee\loch\f39 \hich\f39 , -\'e4\'eb\'ff\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e0\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 \'f0\'e0\'f1\'ef\'e0\'ea\'ee\'e2\'e0\'f2\'fc\loch\f39 -\hich\f39 \'e8\'e7\loch\f39 \hich\f39 zip-\'e0\'f0\'f5\'e8\'e2\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'ed\'f3\'fe\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'f3\loch\f39 \hich\f39 , \'ef\'f3\'f1\'f2\'fc\loch\f39 \hich\f39 \'fd -\'f2\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 c:\\\hich\f39 3proxy (\'ef\'f0\'ee\loch\f39 \hich\f39 \'e8\'ed\'f1\'f2\'e0\'eb\'eb\'ff\'f6\'e8\'fe\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 -\hich\f39 \'f1\'ea\'e0\'e7\'e0\'ed\'ee\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\loch\f39 ). -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ee\'e2\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'e9\'ec\'e5\'ec\'f1\'ff\loch\f39 \hich\f39 \'e4\'e0\'eb\'fc\'ed\'e5\'e9\'f8\'e8\'ec -\loch\f39 \hich\f39 \'f3\'eb\'f3\'f7\'f8\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0 -\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'eb\'ff\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e0\loch\f39 \hich\f39 \'f3\'ea\'e0\'e6\'e5\'ec\loch\f39 \hich\f39 \'e2\'ed\'f3\'f2\'f0\'e5\'ed\'ed\'e8\'e9\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e2\'fb\loch\f39 \hich\f39 \'e2\'e5\'e4\'fc\loch\f39 \hich\f39 \'ef\'ee\'ed\'e8\'ec\'e0\'e5\'f2\'e5\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 \'e4\'ee\'eb -\'e6\'e5\'ed\loch\f39 \hich\f39 \'f1\'f2\'ee\'ff\'f2\'fc\loch\f39 \hich\f39 IP \'f1\'e5\'f2\'e5\'e2\'ee\'e9\loch\f39 \hich\f39 \'ea\'e0\'f0\'f2\'fb\loch\f39 \hich\f39 \'c2\'c0\'d8\'c5\'c3\'ce\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 -\hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 , \'ed\'e0\'f1\'f2\'f0\'ee\'e5\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'ee\'ea\'e0\'eb\'fc\'ed\'f3\'fe\loch\f39 \hich\f39 \'f1\'e5\'f2\'fc\loch\f39 \hich\f39 . \'dd -\'f2\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'e8\'ec\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'f2\'ee\'f2\loch\f39 \hich\f39 IP \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'e2 -\loch\f39 \hich\f39 \'eb\'ee\'ea\'e0\'eb\'fc\'ed\'ee\'e9\loch\f39 \hich\f39 \'f1\'e5\'f2\'e8\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'ee\'ec\'f3\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2\loch\f39 \hich\f39 \'ee -\loch\af39\dbch\af31505\hich\f39 \'e1\'f0\'e0\'f9\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'fb\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 , \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2 -\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 , \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'ef\'e8\'f1\'e0\'ed\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e0\'f5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'e0\'f7\'e5 -\'f1\'f2\'e2\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'ed\'e5\'f8\'ed\'e8\'e9\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\'fb\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0 -\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par }\pard \ltrpar\ql \fi-360\li360\ri0\nowidctlpar\tx360\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'fd\'f2\'ee\'f2\loch\f39 \hich\f39 IP \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'e2\'fb\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'fb\loch\f39 \hich\f39 \'e1 -\'fb\'eb\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'ee\loch\f39 -\hich\f39 , \'e2\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e2\'fb\'e4\'e5\'eb\'e5\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'eb\loch\af39\dbch\af31505\hich\f39 \'e8\'ed\'e8\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'f2 -\'e0\'ea\loch\f39 \hich\f39 \'ed\'e0\'e7\'fb\'e2\'e0\'e5\'ec\'fb\'e9\loch\f39 \hich\f39 "\'f0\'e5\'e0\'eb\'fc\'ed\'fb\'e9\loch\f39 \hich\f39 " IP, \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'e1\'fb\'f2 -\'fc\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e5\'ed\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\'e0\loch\f39 \hich\f39 (\'f5\'ee\'f2\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 -\hich\f39 \'ee\'e1\'ff\'e7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 ). -\par }{\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e6\'e5\loch\f39 -\hich\f39 \'f3\loch\f39 \hich\f39 \'e2\'e0\'f1\loch\f39 \hich\f39 \'ea\'ee\'ec\'ec\'f3\'f2\'e8\'f0\'f3\'e5\'ec\'fb\'e9\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 : dial-up \'e8\'eb\'e8\loch\f39 \hich\f39 vpn \'e8\loch\f39 -\hich\f39 \'e2\'e0\'f8\loch\f39 \hich\f39 \'e2\'ed\'e5\'f8\'ed\'e8\'e9\loch\f39 \hich\f39 IP \'f0\'e5\'e3\'f3\'eb\'ff\'f0\'ed\'ee\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc -\loch\f39 \hich\f39 2 \'f1\'ef\'ee\'f1\'ee\'e1\'e0\loch\f39 \hich\f39 \'f0\'e5\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'eb\'e5\'ec\'fb\loch\f39 \hich\f39 . \'cf\'e5\'f0\'e2\'fb\'e9\loch\f39 \hich\f39 \emdash \loch\f39 \hich\f39 \'ed -\'e0\'ef\'e8\'f1\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'ea\loch\af39\dbch\af31505\hich\f39 \'f0\'e8\'ef\'f2\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'e4\'f1\'f2\'e0\'e2\'eb\'ff -\'f2\'fc\loch\f39 \hich\f39 \'e2\'ed\'e5\'f8\'ed\'e8\'e9\loch\f39 \hich\f39 IP \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 include \'eb\'e8\'e1\'ee\loch\f39 \hich\f39 $ (\'fd\'f2\'ee\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'ee\'e1\'f1\'f3\'e4 -\'e8\'ec\loch\f39 \hich\f39 \'ef\'ee\'e7\'e6\'e5\loch\f39 \hich\f39 ). \'c2\'f2\'ee\'f0\'ee\'e9\loch\f39 \hich\f39 \emdash \loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 +{\rtf1\ansi\deff3\adeflang1025 +{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset204 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset204 Liberation Sans{\*\falt Arial};}{\f5\froman\fprq2\fcharset204 Calibri;}{\f6\froman\fprq2\fcharset204 Arial CYR;}{\f7\froman\fprq2\fcharset204 Arial;}{\f8\fnil\fprq2\fcharset204 Mangal;}{\f9\fnil\fprq2\fcharset204 Calibri;}{\f10\fnil\fprq2\fcharset204 Arial CYR;}{\f11\fnil\fprq2\fcharset204 Arial;}{\f12\fnil\fprq2\fcharset204 Times New Roman;}{\f13\fnil\fprq2\fcharset204 Liberation Serif{\*\falt Times New Roman};}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;} +{\stylesheet{\s0\snext0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049 Normal;} +{\*\cs15\snext15 Default Paragraph Font;} +{\*\cs16\snext16\cf2\ul\ulc0\langfe255\lang255 \u1048\'c8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2-\u1089\'f1\u1089\'f1\u1099\'fb\u1083\'eb\u1082\'ea\u1072\'e0;} +{\s17\sbasedon0\snext18\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb240\sa120\keepn\ltrpar\cf1\kerning1\dbch\af8\langfe1025\dbch\af13\afs24\loch\f4\fs28\lang1049 \u1047\'c7\u1072\'e0\u1075\'e3\u1086\'ee\u1083\'eb\u1086\'ee\u1074\'e2\u1086\'ee\u1082\'ea;} +{\s18\sbasedon0\snext18\sl288\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\loch\f5\fs22\lang1049 \u1054\'ce\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9 \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2;} +{\s19\sbasedon18\snext19\sl288\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af8\langfe1025\dbch\af13\afs24\loch\f5\fs22\lang1049 \u1057\'d1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea;} +{\s20\sbasedon0\snext20\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af8\langfe1025\dbch\af13\afs24\loch\f5\fs24\lang1049 \u1053\'cd\u1072\'e0\u1079\'e7\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5;} +{\s21\sbasedon0\snext21\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar\cf1\kerning1\dbch\af8\langfe1025\dbch\af13\afs24\loch\f5\fs22\lang1049 \u1059\'d3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc;} +{\s22\snext22\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049 DocumentMap;} +}{\*\generator LibreOffice/4.4.3.2$Windows_x86 LibreOffice_project/88805f81e9fe61362df02b9941de8e38a9b5fd16}{\info{\creatim\yr2011\mo7\dy9\hr1\min32}{\revtim\yr2015\mo5\dy25\hr12\min23}{\printim\yr0\mo0\dy0\hr0\min0}}\deftab720\deftab720 +\viewscale100 +{\*\pgdsctbl +{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1701\margrsxn850\margtsxn1134\margbsxn1134\pgdscnxt0 \u1041\'3f\u1072\'3f\u1079\'3f\u1086\'3f\u1074\'3f\u1099\'3f\u1081\'3f;}} +\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1701\margr850\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1701\margrsxn850\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc +{\*\ftnsep}\pgndec\pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +Kurmaeff Halit} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 -\par }{\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 external 0.0.0.0 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'e5\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 - \'ea\'ee\'ec\'e0\'ed\'e4\'e0\'ec\'e8\loch\f39 \hich\f39 external \'e8\loch\f39 \hich\f39 - internal \'ec\'fb\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e5\'ec\loch\f39 \hich\f39 \'e2\'ed\'f3\'f2\'f0\'e5\'ed\'ed\'e8\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'ed\'e5\'f8\'ed\'e8\'e5\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1 -\'fb\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'f1\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 , \'e3\'eb\'ee\'e1\'e0\'eb\'fc\loch\af39\dbch\af31505\hich\f39 \'ed\'ee\loch\f39 \hich\f39 , \'ed\'e0\loch\f39 \hich\f39 \'e2\'e5\'f1\'fc\loch\f39 -\hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 -\hich\f39 \'ed\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'fb\'f5\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e2\'e0\'f2\'fc -\loch\f39 \hich\f39 \'f1\'e2\'ee\'e8\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\'fb\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc -\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef\'ee\'ec\'ee\'f9\'fc\'fe\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'ee\'e2\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 -e \'e8\loch\f39 \hich\f39 -i, \'ed\'e0\'ef\'f0\'e8 -\'ec\'e5\'f0\loch\f39 \hich\f39 , \'e0\'ed\'e0\'eb\'ee\'e3\'ee\'ec\loch\f39 \hich\f39 \'f1\'ee\'e2\'ee\'ea\'f3\'ef\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\loch\f39 -\par -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 proxy -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e1\'f3\'e4\'e5\'f2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 proxy -i192.168.0.1 -e211.80.11.12 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f3\'f1\'ea\'ee\'f0\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee -\'f6\'e5\'f1\'f1\'e0\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e8\'ec\'e5\'ed\loch\f39 \hich\f39 \'f5\'ee\'f1\'f2\'ee\'e2\loch\f39 \hich\f39 \'f3\'ea\'e0\'e6\'e5\'ec\loch\f39 \hich\f39 DNS-\'f1\'e5\'f0\'e2\'e5 -\'f0\'e0\loch\f39 \hich\f39 - \'eb\'f3\'f7\'f8\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'ee\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 DNS-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e2\'e0\'f8\'e5\'e3\'ee\loch\f39 -\hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 - \'e8\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'ec\loch\f39 \hich\f39 \'ea\'fd\'f8\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'e5\loch\f39 DNS: -\par -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nsc\hich\af39\dbch\af31505\loch\f39 ache 65536 -\par \loch\af39\dbch\af31505\hich\f39 \'e3\'e4\'e5\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 65536 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e5\loch\f39 \hich\f39 , \'e6\'e5\'eb\'e0 -\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'f1\'f2\'e0\'e2\'eb\'ff\'fe\'f9\'e5\'e5\loch\f39 \hich\f39 \'f1\'f2\'e5\'ef\'e5\'ed\'fc\loch\f39 \hich\f39 \'f7\'e8\'f1\'eb\'e0\loch\f39 \hich\f39 2 \'e8\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2 -\'e0\'f2\'ee\'f7\'ed\'ee\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'ee\'e5\loch\f39 \hich\f39 . \'ca\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'ee\'f2\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 nscache \'ed\'e0\'ef\'f0\'ff\'ec -\'f3\'fe\loch\f39 \hich\f39 \'e7\'e0\'e2\'e8\'f1\'e8\'f2\loch\f39 \hich\f39 \'ea\'ee\'eb\'e8\'f7\'e5\'f1\'f2\'e2\'ee\loch\f39 \hich\f39 \'ee\'ef\'e5\'f0\'e0\'f2\'e8\'e2\'ed\'ee\'e9\loch\f39 \hich\f39 \'ef\'e0\'ec\'ff\'f2\'e8\loch\f39 \hich\f39 , \'e7 -\'e0\'ed\'e8\'ec\'e0\'e5\'ec\'ee\'e9\loch\f39 \hich\f39 3proxy. \'c8\'f2\'e0\'ea\loch\f39 \hich\f39 , \'ed\'e0\loch\f39 \hich\f39 \'e4\'e0\'ed\'ed\'ee\'ec\loch\f39 \hich\f39 \'fd\'f2\'e0\'ef\'e5\loch\f39 \hich\f39 \'ed\'e0\'f8\loch\f39 \hich\f39 \'ea -\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e8\'f2\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e8\'ec\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e7\'ee\'ec\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff -\loch\f39 1): -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 log -\par \hich\af39\dbch\af31505\loch\f39 auth none -\par \hich\af39\dbch\af31505\loch\f39 proxy -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'e6\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'ed\'e0\'ec\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f5\'e2\'e0\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'ee\'f6\'e5 -\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'ee\'e2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1\'ee\'ea\loch\f39 -\hich\f39 , \'e2\'e5\'e4\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'fd\'ea\'f0\'e0\'ed\'e5\loch\f39 \hich\f39 \'eb\'ee\'e3\loch\f39 \hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'e1\'fb\'f1\'f2\'f0\'ee\loch\f39 -\loch\af39\dbch\af31505\hich\f39 \'ef\'f0\'ee\'eb\'e5\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 ! \'cf\'ee\'ec\'e5\'ed\'ff\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 log \'ed\'e0\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5 -\loch\f39 \hich\f39 \'f0\'e0\'f1\'f8\'e8\'f0\'e5\'ed\'ed\'f3\'fe\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'e0\'ea\'e8\'ec\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e7\'ee\'ec\loch\f39 \hich\f39 , \'ec\'fb\loch\f39 \hich\f39 \'e4\'e0\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 \'f1\'ee\'f5\'f0 -\'e0\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'e5\loch\f39 c:\\3proxy\\\hich\f39 logs \'e8\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'fb\'e9\loch\f39 \hich\f39 \'e4\'e5\'ed\'fc -\loch\f39 \hich\f39 \'ed\'e0\'f7\'e8\'ed\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'ee\'e2\'fb\'e9\loch\f39 \hich\f39 \'eb\'ee\'e3\loch\f39 \hich\f39 (\'ee\'ef\'f6\'e8\'ff\loch\f39 \hich\f39 D). \'c5\'f9\'e5\loch\f39 \hich\f39 \'f0\'e0\'e7\loch\f39 -\hich\f39 \'ed\'e0\'ef\'ee\'ec\'ed\'fe\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'e0\'e4\'e8\'e8\loch\f39 \hich\f39 \'f2\'e5\'f1\'f2\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'eb\'f3\'f7\'f8 -\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e6\'e5\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\'fb\'e2\'ee\'e4\loch\f39 \hich\f39 \'eb\'ee\'e3\'ee\'e2\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'fd\'ea\'f0\'e0\'ed\loch\f39 \hich\f39 - \'f2\'e0\'ea\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1\'ed\'e5\'e5\loch\f39 \hich\f39 \'e8\'f1\'ea\'e0\'f2\'fc\loch\f39 \hich\f39 \'ee\'f8\'e8\'e1\'ea\'e8\loch\f39 \hich\f39 . \'c8\loch\f39 -\hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'e4\'ee\'e1\'e0\'e2\'e8\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par \loch\af39\dbch\af31505\hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'e5\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'eb\'ee\'e3\'e0 -\'ec\'e8\loch\f39 \hich\f39 \'f1\'ee\'f5\'f0\'e0\'ed\'ff\'eb\'e8\'f1\'fc\loch\f39 \hich\f39 \'eb\'e8\'f8\'fc\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ed\'e8\'e5\loch\f39 \hich\f39 30 \'f4\'e0\'e9\'eb\'ee\'e2\loch\f39 \hich\f39 , \'e0\loch\f39 -\hich\f39 \'f2\'ee\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 \hich\f39 \'e1\'fb\'f1\'f2\'f0\'ee\loch\f39 \hich\f39 \'f0\'e0\'f1\'f2\'f3\'f2\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'e4\'e8\'f1\'ea\loch\f39 -\hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f0\'e5\'e7\'e8\'ed\'ee\'e2\'fb\'e9\loch\f39 ! -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'f1\'ef\'ee\'ec\'e8\'ed\'e0\'e5\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 3proxy \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'e2\'e8\'e4 -\loch\af39\dbch\af31505\hich\f39 \'ee\'e8\'e7\'ec\'e5\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\loch\f39 \hich\f39 \'eb\'ee\'e3\'ee\'e2\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 -\hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'ec\loch\f39 \hich\f39 \'eb\'ee\'e3-\'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\'ee\'ec -\loch\f39 \hich\f39 . \'ca\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'ec\'ee\'e3\'f3\loch\f39 \hich\f39 \'ef\'ee\'f1\'ee\'e2\'e5\'f2\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f1 -\'e0\'e9\'f2\'e0\loch\f39 \hich\f39 www.wrspy.ru \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'eb\'e8\'f7\'ed\'fb\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'f1\'e5\'e9\'f7\'e0\'f1\loch\f39 -\hich\f39 \'ed\'e5\'ec\'e0\'eb\'ee\'e2\'e0\'e6\'ed\'ee\loch\f39 \hich\f39 , \'e1\'e5\'f1\'ef\'eb\'e0\'f2\'ed\'fb\'e9\loch\f39 \hich\f39 \'eb\'ee\'e3-\'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\loch\f39 \hich\f39 Wrspy \'ed\'e0\'f8\'e5\'e3\'ee\loch\f39 -\hich\f39 \'ee\'f2\'e5\'f7\'e5\'f1\'f2\'e2\'e5\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'e3\'f0\'e0\'ec\'ec\'e8\'f1\'f2\'e0\loch\f39 \hich\f39 . \'d2\'e5\'ec\loch\f39 \hich\f39 \'e1\loch\af39\dbch\af31505\hich\f39 \'ee -\loch\af39\dbch\af31505\hich\f39 \'eb\'e5\'e5\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\loch\f39 \hich\f39 \'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\'e0\loch\f39 \hich\f39 \'eb\'fe\'e1\'e5\'e7\'ed\'ee\loch\f39 \hich\f39 -\'ef\'ee\'f8\'e5\'eb\loch\f39 \hich\f39 \'ed\'e0\'e2\'f1\'f2\'f0\'e5\'f7\'f3\loch\f39 \hich\f39 \'ec\'ee\'e5\'e9\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'fc\'e1\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e0\'f7\'e8\'ed\'e0\'ff\loch\f39 -\hich\f39 \'f1\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 1.65 \'ef\'ee\'ff\'e2\'e8\'eb\'e0\'f1\'fc\loch\f39 \hich\f39 , \'ed\'e0\'ea\'ee\'ed\'e5\'f6\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'f1\'ea\'e0\'e7\'e0\'f2\'fc -\loch\f39 \hich\f39 , \'ee\'ef\'f2\'e8\'ec\'e8\'e7\'e8\'f0\'ee\'e2\'e0\'ed\'ed\'e0\'ff\loch\f39 \hich\f39 \'ef\'ee\'e4\'e4\'e5\'f0\'e6\'ea\'e0\loch\f39 \hich\f39 3proxy - \'e8\'ec\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'eb -\'ee\'e3\'ee\'e2\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'e5\'e4\'e5\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ed\'e8\'e6\'e5\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e0\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I\hich\af39\dbch\af31505\loch\f39 %O %N/%R:%r" +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8\u1102\'fe\u1085\'ed\u1100\'fc}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + 2006} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'f2\'fc\loch\f39 \hich\f39 -\'e2\loch\f39 \hich\f39 \'e2\'e8\'e4\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e4\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'f2 -\'fc\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e5\'e9\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 0.6. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'f3\'f2\loch\f39 \hich\f39 \'e2\'e8\'e4\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 192.168.0.4 - ivanov - [02/Jun/2006:11:13:56 +0500] -\par \hich\af39\dbch\af31505\loch\f39 "GET http://svalka.biz/uploads/posts/1147559374_00.jpg HTTP/1.0" 000 17\hich\af39\dbch\af31505\loch\f39 497 457 PROXY/http://svalka.biz:3128 -\par -\par }\pard \ltrpar\ql \fi-360\li360\ri0\nowidctlpar\tx360\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e3\'e4\'e5\loch\f39 \hich\f39 \'e8\'e4\'f3\'f2\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'ef\'ee\'f0\'ff\'e4\'ea\'f3\loch\f39 \hich\f39 : IP \'f0\'e0\'e1\'ee\'f7\'e5\'e9 -\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'f6\'e8\'e8\loch\f39 \hich\f39 - \'e8\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 - \'f7\'e8\'f1\'eb\'ee\loch\f39 \hich\f39 , \'ec\'e5\'f1\'ff\'f6\loch\f39 -\hich\f39 , \'e3\'ee\'e4\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'ff\loch\f39 \hich\f39 - \'e2\'e8\'e4\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'e0\loch\f39 \hich\f39 - URL - \'ed\'ee\'ec\'e5\'f0\loch\f39 \hich\f39 \'ee\'f8 -\'e8\'e1\'ea\'e8\loch\f39 \hich\f39 (\'e5\'f1\'eb\'e8\loch\f39 \hich\f39 000 - \'e7\'ed\'e0\'f7\'e8\'f2\loch\f39 \hich\f39 , \'ee\'f8\'e8\'e1\'ee\'ea\loch\f39 \hich\f39 \'ed\'e5\'f2\loch\f39 \hich\f39 ) - \'ef\'f0\'e8\'ed\'ff\'f2\'ee\loch\f39 -\hich\f39 \'e1\'e0\'e9\'f2\loch\f39 \hich\f39 - \'ee\'f2\'ef\'f0\'e0\'e2\'eb\'e5\'ed\'ee\loch\f39 \hich\f39 \'e1\'e0\'e9\'f2\loch\f39 \hich\f39 - \'f1\'e5\'f0\'e2\'e8\'f1\loch\f39 \hich\f39 - \'f5\'ee\'f1\'f2\loch\f39 \hich\f39 - \'ef\'ee\'f0\'f2 -\loch\f39 \hich\f39 , \'ef\'ee\loch\f39 \hich\f39 \'ea\loch\af39\dbch\af31505\hich\f39 \'ee\'f2\'ee\'f0\'ee\'ec\'f3\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\loch\f39 \hich\f39 \'f1\'e2\'ff\'e7\'e0\'eb\'f1\'ff\loch\f39 \hich\f39 \'f1\loch\f39 -\hich\f39 \'f1\'e5\'f0\'e2\'e8\'f1\'ee\'ec. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cd\'e5\'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e7\'e0\'e1\'e5 -\'e3\'e0\'ff\loch\f39 \hich\f39 \'e2\'ef\'e5\'f0\'e5\'e4\loch\f39 \hich\f39 , \'f1\'ea\'e0\'e6\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 3proxy \'ef -\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'f3\'e4\'ee\'e2\'eb\'e5\'f2\'e2\'ee\'f0\'ff\'f2\'fc\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'ee\'ee\'e1\'f0\'e0\'e7\'ed\'fb\'e5\loch\f39 \hich\f39 -\'e7\'e0\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 , , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'fb\'e5\loch\f39 -\hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'fb\'e5\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'e4 -\'eb\'ff\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'e9\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'fb\'ec\'e8\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e0\'ec\'e8. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'f3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e0\'ea\'ee\'ed\'e5\'f6\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e2\'fb\loch\f39 \hich\f39 \'f5\'ee\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 \'e5 -\'f9\'e5\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'e5\loch\f39 \hich\f39 \'f1\'fd\'ea\'ee\'ed\'ee\'ec\'e8\'f2\'fc\loch\f39 \hich\f39 \'ec\'e5\'f1\'f2\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e4\'e8\'f1\'ea\'e5\loch\f39 \hich\f39 \'ef\'ee -\'e4\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e0\'f0\'f5\'e8\'e2\'e8\'f0\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 - \'ef\'ee\'ec\'ee\'f9\'fc\'fe\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e3\'ee\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e0\'f0\'f5\'e8\'e2\'e0\'f2\'ee\'f0\'e0\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0 -\loch\f39 \hich\f39 , \'e2\'ee\'f2\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 -\loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94\hich\af39\dbch\af31505\loch\f39 " }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 (\'ef\'ee\'e4\'f1\'ea\'e0\'e7\'ea\'f3\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ee\'ef\'f6\'e8\'e9\loch\f39 \hich\f39 \'ea -\'ee\'ec\'e0\'ed\'e4\'ed\'ee\loch\af39\dbch\af31505\hich\f39 \'e9\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e8\loch\f39 \hich\f39 WinRAR \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ed\'e0\'e9\'f2\'e8\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e5\'e3 -\'ee\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 Help'\'e5\loch\f39 ) -\par \loch\af39\dbch\af31505\hich\f39 \'ce\'e1\'f0\'e0\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 \'e2\'ed\'e8\'ec\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f2\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ef\'f3\'f2\'fc -\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'f3\loch\f39 \hich\f39 \'e7\'e0\'ea\'eb\'fe\'f7\'e5\'ed\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ea\'ee\'e1\'ea\'e8\loch\f39 \hich\f39 . \'dd\'f2\'ee\loch\f39 \hich\f39 \'f1\'e2 -\'ff\'e7\'e0\'ed\'ee\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ed\'e0\'eb\'e8\'f7\'e8\'e5\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'e5\'eb\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'f3\'f2\'e8\loch\f39 \hich\f39 . \'c0\'ed\'e0\'eb\'ee\'e3 -\'e8\'f7\'ed\'ee\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e7\'e0\'ea\'eb\'fe\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'e0\'e2\'fb\'f7\'ea\'e8\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'e5\loch\f39 \hich\f39 \'ef\'f3 -\'f2\'e8\loch\f39 \hich\f39 Windows, \'f1\'ee\'e4\'e5\'f0\'e6\'e0\'f9\'e8\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'e1\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'e5\'eb\'fb\loch\f39 \hich\f39 \'eb\'e8\'e1\'ee\loch\f39 $. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'f1\'ee\'e1\'e8\'f0\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'e4\loch\af39\dbch\af31505\hich\f39 \'e2\'e8\'ed\'f3\'f2\'f3\'fe\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'fe -\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 \hich\f39 2) \'ed\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par \hich\af39\dbch\af31505\loch\f39 archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 -\'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 auth none -\par \hich\af39\dbch\af31505\loch\f39 proxy -t -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c7\'e0\'ef\'f3\'f1\'ea\'e0\'e5\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ee\'ef\'f6\'e8\'e5\'e9\loch\f39 \hich\f39 -t , \'ea\'ee\'f2\'ee\'f0\'e0\'ff\loch\f39 -\hich\f39 \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e2\'fb\'e2\'ee\'e4\'e8\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'eb\'ee\'e3\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e5\'e1\'ed\'fb\'e5\loch\f39 -\hich\f39 \'f1\'ee\'ee\'e1\'f9\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ee\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e5\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\loch\f39 \hich\f39 . \'dd\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'e3\'ee\'e4\'e8\'f2\'f1 -\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e4\'e0\'eb\'fc\'ed\'e5\'e9\'f8\'e5\'ec\loch\f39 \hich\f39 , \'ea\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0 -\'f2\'fb\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\loch\f39 \hich\f39 \'ea\loch\af39\dbch\af31505\hich\f39 \'e0\'ea\'e8\'ec-\'ed\'e8\'e1\'f3\'e4\'fc\loch\f39 \hich\f39 \'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\'ee\'ec. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'f1\'e5\loch\f39 \hich\f39 \'eb\'f3\'f7\'f8\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'f3\'f7\'f8\'e5\loch\f39 \hich\f39 ! \'cf\'f0\'ee\'e4\'ee\'eb\'e6\'e0\'e5\'ec\loch\f39 \hich\f39 . \'cf\'ee\'e4\'f3 -\'ec\'e0\'e5\'ec\loch\f39 \hich\f39 \'ee\loch\f39 \hich\f39 \'f2\'ee\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 , \'e0 -\loch\f39 \hich\f39 \'ea\'e0\'ed\'e0\'eb\loch\f39 \hich\f39 , \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'f2\'ee\'eb\'f1\'f2\'fb\'e9\loch\f39 \hich\f39 , \'f5 -\'ee\'f0\'ee\'f8\'ee\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f5\'ee\'f2\'ff\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 128 \'ea\'e1\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e4\'e8\'e0 -\'eb\'e0\'ef\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 33.6? \'cd\'e0\'f7\'e8\'ed\'e0\'e5\'ec\loch\f39 \hich\f39 \'f0\'e5\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 , \'f2\'ee\'e2\'e0\'f0\'e8\'f9\'e8\loch\f39 ! -\par -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 240000 * 192.168.0.2,192.168.0\hich\af39\dbch\af31505\loch\f39 .3 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'f0\'e0\'e7\'f0\'e5\'f8\'e0\'e5\'ec\loch\f39 \hich\f39 \'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\'ec\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 IP-\'e0\'e4\'f0 -\'e5\'f1\'e0\'ec\'e8\loch\f39 \hich\f39 192.168.0.2 \'e8\loch\f39 \hich\f39 192.168.0.3 \'f1\'ee\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'f1\'f2\'fc\'fe\loch\f39 \hich\f39 24 \'ea\'e1\'e8\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'ea -\'f3\'ed\'e4\'f3\loch\f39 \hich\f39 , \'ef\'f0\'e8\'f7\'e5\'ec\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 24 \'ea\'e1\'e8\'f2\loch\f39 \hich\f39 \'ef\'f0\'e8\'f5\'ee\'e4\'ff\'f2\'f1\'ff\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'fb\'e9\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'fd\'f2\'e8\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 -\'ee\'e1\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ee\'e2\'ee\'ea\'f3\'ef\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 , \'f2.\'e5\loch\f39 \hich\f39 . \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ee\'e1\'e0\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2 -\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'e2\'f0\'e5\'ec\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'fb\loch\f39 \hich\f39 \'f1 -\loch\f39 \hich\f39 \'e4\'ee\loch\af39\dbch\af31505\hich\f39 \'f1\'f2\'e0\'f2\'ee\'f7\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'f1\'f2\'f0\'fb\'f5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'ee\'e2\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4 -\'ee\'ec\'f3\loch\f39 \hich\f39 \'ef\'f0\'e8\'e4\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 12 \'ea\'e1\'e8\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'ea\'f3\'ed\'e4\'f3 -\loch\f39 \hich\f39 (\'e7\'e0\'ec\'e5\'f2\'fc\'f2\'e5\loch\f39 \hich\f39 , \'ea\'e8\'eb\'ee\'e1\'e8\'f2\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ea\'e8\'eb\'ee\'e1\'e0\'e9\'f2\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8 -\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'f1\'f7\'e8\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'e8\'eb\'ee\'e1\'e0\'e9\'f2\'fb\loch\f39 \hich\f39 , \'f0\'e0\'e7\'e4\'e5\'eb\'e8\'f2\'e5\loch\f39 -\hich\f39 \'f7\'e8\'f1\'eb\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 8) -\par -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e0\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\'f3\loch\f39 \hich\f39 \'f1\'f7\'e0\'f1\'f2\'eb\'e8\'e2\'f7\'e8\'ea\'f3\loch\f39 \hich\f39 \'e5\'e4\'e8\'ed\'ee\'eb\'e8\'f7\'ed\'ee\loch\f39 \hich\f39 \'f1\'ea\'ee -\'f0\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 48 \'ea\'e1\'e8\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'ea\'f3\'ed\'e4\loch\af39\dbch\af31505\hich\f39 \'f3\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e8\'f1\'f5\'ee\'e4\'ff\'f9\'f3\'fe\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'f2\'ee\'e6\'e5\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e8\'ec\loch\f39 \hich\f39 \'e2 -\'f1\'e5\'ec\loch\f39 \hich\f39 \'e4\'ee\loch\f39 \hich\f39 24 \'ea\'e8\'eb\'ee\'e1\'e8\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'ea\'f3\'ed\'e4\'f3\loch\f39 \hich\f39 (\'f1\'e5\'e9\'f7\'e0\'f1\loch\f39 \hich\f39 \'fd\'f2\'e0 -\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 devel 0.6) \'cd -\'f3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e0\'ea\'ee\'ed\'e5\'f6\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e2\'fb\loch\f39 \hich\f39 \'f5\'ee\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 -\'fd\'f2\'e8\loch\f39 \hich\f39 \'e6\'e5\'f1\'f2\'ea\'e8\'e5\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ea\'e0\'f1\'e0\'eb\'e8\'f1\'fc\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 -\'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'f1\'ea\'e0\'f7\'e8\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'f1\'ed\'e8\'ec\'e8\'f2\'e5\hich\af39\dbch\af31505\loch\f39 \hich\f39 -\'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 110: -\par -\par \hich\af39\dbch\af31505\loch\f39 nobandlimin * * * 110 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'e1\'f3\'e4\'fc\'f2\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'fd\'f2\'f3\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4 -\'f3\loch\f39 \hich\f39 \'cf\'c5\'d0\'c5\'c4\loch\f39 \hich\f39 \'ef\'f0\'ee\'f7\'e8\'ec\'e8\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\'ec\'e8\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0 -\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 - \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ee\'e2\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e4\'ee -\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'f3\'e4\'ee\'e2\'eb\'e5\'f2\'e2\'ee\'f0\'ff\'fe\'f9\'e5\'e3\'ee\loch\f39 \hich\f39 \'f3\'f1\'eb\'ee\'e2\'e8\'ff\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ea\'ee\'f0\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e8\'e2\'e0\'ed\'e8\'ff-\'e7\'e0\'ea\'e0\'f7\'e8\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 -\'e7\'e0\'e4\'e0\'eb\'e8\hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'ef\'f0\'ee\'e4\'ee\'eb\'e6\'e0\'e5\'ec\loch\f39 \hich\f39 \'e7\'e0\'ea\'f0\'f3\'f7\'e8\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e3\'e0\'e9\'ea\'e8\loch\f39 \hich\f39 . \'c2\loch\f39 -\hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'ef\'ee\'ec\'ee\'e3\'f3\'f2\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 deny \'e8\loch\f39 allow -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e7\'e0\'ef\'f0\'e5\'f9\'e0\'e5\'ec\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe -\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 IP .4 \'e2\loch\f39 \hich\f39 \'ed\'e5\'f0\'e0\'e1\'ee\'f7\'e5\'e5\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'ed\'ff\'ec\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'f0\'e0\'e7\'f0\'e5\'f8\'e0\'e5\'ec\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2 -\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 IP .4 \'e8\'f1\'ea\'eb\'fe\'f7\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef\'ee\'ed\'e5\'e4\'e5\'eb\'fc\'ed\'e8\'ea\'e0\loch\f39 \hich\f39 \'ef\'ee -\loch\f39 \hich\f39 \'ef\'ff\'f2\'ed\'e8\'f6\'f3\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 9 \'f7\'e0\'f1\'ee\'e2\loch\f39 \hich\f39 \'f3\'f2\'f0\'e0\loch\f39 \hich\f39 \'e4\'ee\loch\f39 \hich\f39 6 \'e2\'e5\'f7\'e5\'f0\'e0\loch\f39 \hich\f39 , -\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'f2\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'fb\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'e5\loch\f39 \hich\f39 \'ef\'ee\'f0 -\'f2\'fb\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 FTP-\'f1\'e5\'f0\'e2\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 \'ea\'e0 -\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 , \'e8\loch\f39 HTTP\hich\af39\dbch\af31505\loch\f39 \hich\f39 S, \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'e4\'eb\'ff\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'e4\'ee -\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 FTP \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'fe\'f9\'e5\'ec\loch\f39 -\hich\f39 \'ee\'ea\'ed\'e5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e5\'ea\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e0\loch\f39 \hich\f39 (\'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'fb\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2 -\'e5\'f0\'e0\loch\f39 \hich\f39 ) \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e3\'e0\'eb\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 \'ed\'e0\'ef\'f0\'ee\'f2\'e8\'e2\loch\f39 \hich\f39 FTP \'e8\loch\f39 -\hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 IP \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 -\hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 HTTP (\'e2\loch\f39 \hich\f39 \'ed\'e0\loch\af39\dbch\af31505\hich\f39 \'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3 -\'f7\'e0\'e5\loch\f39 \hich\f39 3128), \'e0\loch\f39 \hich\f39 \'e2\'ee\'e2\'f1\'e5\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 21, \'ea\'e0\'ea\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'ef -\'ee\'e4\'f3\'ec\'e0\'f2\'fc\loch\f39 \hich\f39 . \'c8\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\loch\f39 \hich\f39 \'e3\'f0\'f3\'f1\'f2\'ed\'ee\'e5\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 -. \'d2\'e5\'ea\'f3\'f9\'e0\'ff\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e0\loch\f39 \hich\f39 Opera \'ef\'ee\'e4\loch\f39 \hich\f39 \'ed\'ee\'ec\'e5\'f0\'ee\'ec\loch\f39 \hich\f39 9 \'ed\'e5\'ea\'ee -\'f0\'f0\'e5\'ea\'f2\'ed\'ee\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f4\'f2\'ef-\'f1\'e5\'f0\'e2\'e5\'f0\'e0 -\'ec\'e8\loch\f39 \hich\f39 , \'f2\'f0\'e5\'e1\'f3\'fe\'f9\'e8\'ec\'e8\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \hich\f39 \'eb\'e8\'e1\'ee\loch\f39 -\hich\f39 \'ef\'f0\'e8\'e4\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e2\'e5\'f0\'ed\'f3\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 8, \'eb\'e8\'e1\loch\af39\dbch\af31505\hich\f39 \'ee -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 IE \'e8\'eb\'e8\loch\f39 FireFox. -\par -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e0\loch\f39 \hich\f39 \'e7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e0\'e5\'ec\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 WEB-\'f1\'e5\'f0\'f4\'e8\'ed\'e3\loch\f39 -\hich\f39 , \'e7\'e0\'f2\'ee\loch\f39 \hich\f39 \'ea\'f0\'f3\'e3\'eb\'ee\'f1\'f3\'f2\'ee\'f7\'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e9\loch\f39 \hich\f39 \'e4\'e5\'ed\'fc\loch\f39 \hich\f39 \'ed\'e5\'e4\'e5\'eb\'e8 -\loch\f39 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 \'e2\'f1\'ef\'ee\'ec\'e8\'ed\'e0\'e5\'ec\loch\f39 \hich\f39 (\'e2\'fb\loch\f39 \hich\f39 \'e2\'e5\'e4\'fc\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'ec\'e5\'e4\'e8 -\'f2\'e8\'f0\'ee\'e2\'e0\'eb\'e8\loch\f39 \hich\f39 \'ed\'e0\'e4\loch\f39 \hich\f39 man, FAQ \'e8\loch\f39 \hich\f39 HowTO, \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e4\'e0\loch\f39 \hich\f39 \'eb\'e8\hich\af39\dbch\af31505\loch\f39 \hich\f39 -?), \'f7\'f2\'ee\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 auth none -\par \loch\af39\dbch\af31505\hich\f39 \'f1\'ee\'e1\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'ed\'e8\'ea\'e0\'ea\'f3\'fe\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e4\'e0\'e5\'f2 -\loch\f39 \hich\f39 , \'f2.\'ea\loch\f39 \hich\f39 . \'ee\'f2\'ea\'eb\'fe\'f7\'e0\'e5\'f2\loch\f39 \hich\f39 \'eb\'fe\'e1\'f3\'fe\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 \'f1\'ee\'e2\'f1\'e5\'ec\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 allow \'e8\loch\f39 \hich\f39 deny \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ed\'e5\'e5\loch\f39 \hich\f39 \'f2\'e5\'f0\'ff\'fe\'f2\loch\f39 \hich\f39 \'e2\'f1\'ff -\'ea\'e8\'e9\loch\f39 \hich\f39 \'f1\'ec\'fb\'f1\'eb\loch\f39 \hich\f39 . \'cf\'ee\'f0\'e0\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'e9\'f2\'e8\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f7\'f2\'ee-\'ed\'e8\'e1\'f3\'e4\'fc\loch\f39 \hich\f39 \'e1 -\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'ef\'ee\'e4\'f5\'ee\'e4\'ff\'f9\'e5\'e5\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'e0\'e2\'f2 -\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\loch\f39 IP: -\par -\par \hich\af39\dbch\af31505\loch\f39 -\par \hich\af39\dbch\af31505\loch\f39 auth ip\hich\af39\dbch\af31505\loch\f39 only -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ed\'ee\'e2\'e0\loch\f39 \hich\f39 \'f1\'ee\'e1\'e8\'f0\'e0\'e5\'ec\loch\f39 \hich\f39 \'ee\'f7\'e5\'f0\'e5\'e4\'ed\'f3\'fe\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'fe\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3 -\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f3\'f7\'e5\'f2\'ee\'ec\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\'ed\'e0\'ef\'e8\'f1\'e0\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 3): -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 l\hich\af39\dbch\af31505\loch\f39 og c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0\pararsid3764488 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -nobandlimin * * * 110 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 24000 * 192.168.0.2,192.168.0.3 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 deny * -\par \hich\af39\dbch\af31505\loch\f39 proxy -t -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 ACL (access client list \hich\f39 \emdash \loch\f39 \hich\f39 \'f1\'ef\'e8\'f1 -\'ee\'ea\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ea\'eb\'e8\loch\af39\dbch\af31505\hich\f39 \'e5\'ed\'f2\'ee\'e2\loch\f39 \hich\f39 ), \'f2.\'e5\loch\f39 \hich\f39 . \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 allow \'e8\loch\f39 -\hich\f39 deny \'e4\'ee\'e1\'e0\'e2\'e8\'eb\'e8\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 deny * - \'fd\'f2\'ee\loch\f39 \hich\f39 \'ef\'ee\'e7\'e2\'ee\'eb\'e8\'f2\loch\f39 \hich\f39 \'e8\'e7\'e1\'e0\'e2 -\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\'e5\'e4\'eb\'e8\'e2\'fb\'f5\loch\f39 \hich\f39 \'ee\'ea\'ee\'ed\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'e0\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'ed\'e0\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'ff\loch\f39 \hich\f39 , \'e2\'fb\'f1\'ea\'e0\'ea\'e8\'e2\'e0\'fe\'f9\'e8\'f5\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'ef\'ee\'ef\'fb\'f2\'ea\'e5\loch\f39 \hich\f39 \'e7\'e0\'e3\'f0 -\'f3\'e7\'ea\'e5\loch\f39 \hich\f39 \'ea\'e0\'ea\'ee\'e3\'ee-\'ed\'e8\'e1\'f3\'e4\'fc\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5\'f9\'e5\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'f0 -\'e5\'f1\'f3\'f0\'f1\'e0. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'ee\'e4\'ee\'eb\'e6\'e8\'ec\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\loch\f39 \hich\f39 \'f3\'e2\'eb\'e5\'ea\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'e5\loch\f39 \hich\f39 \'e7\'e0\'ed\'ff\'f2\'e8\'e5\loch\f39 \hich\f39 . \'d3 -\'f7\'e5\'f2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ea\'ee\loch\af39\dbch\af31505\hich\f39 \'ed\'f2\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 - \'e2\'ee\'f2\loch\f39 \hich\f39 \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'ee\'f1 -\'ed\'ee\'e2\'ed\'fb\'f5\loch\f39 \hich\f39 \'ed\'e0\'f8\'e8\'f5\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'f6\'e8\'ef\'ee\'e2\loch\f39 \hich\f39 . \'c0\loch\f39 \hich\f39 \'ea\'e0\'ea\'ee\'e9\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'f3\'f7\'e5\'f2 -\loch\f39 \hich\f39 \'e1\'e5\'e7\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'ee\'e2\loch\f39 \hich\f39 ? \'ce\'ed\'e8\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'ff\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\'ec\'e8 -\loch\f39 \hich\f39 counter, countin \'e8\loch\f39 nocountin. -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'fd\'f2\'e8\'ec\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e5\'ec\loch\f39 \hich\f39 , \'e3\'e4\'e5\loch\f39 -\hich\f39 \'f3\loch\f39 \hich\f39 \'ed\'e0\'f1\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f5\'f0\'e0\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'ee\'e1\'f9\'e8\'e9\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'f5\'f0\'e0\'ed -\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'ee\'e2\loch\f39 \hich\f39 . \'ce\'ed\loch\f39 \hich\f39 \'ef\'f0\loch\af39\dbch\af31505\hich\f39 \'e5\'e4\'f1\'f2 -\'e0\'e2\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'f1\'ee\'e1\'ee\'e9\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e4\'e2\'ee\'e8\'f7\'ed\'ee\'ec\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e5\loch\f39 \hich\f39 , \'ef -\'f0\'e8\'f7\'e5\'ec\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'e4\'e0\loch\f39 \hich\f39 \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'dd\'f2\'f3\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'f2\'fc -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e5\loch\f39 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf" -\par }\pard \ltrpar\ql \fi-360\li360\ri0\nowidctlpar\tx360\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'f2\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'fb\'e9\loch\f39 \hich\f39 \'e4\'e5\'ed\'fc\loch\f39 \hich\f39 (\'f7\'e0\'f1\'f2\'ee\'f2\'e0\loch\f39 \hich\f39 \'e7\'e0\'e4 -\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e4\'e0\'ed\'ed\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'ee\'ec\loch\f39 \hich\f39 D(\'e5\'e6\'e5\'e4\'ed\'e5\'e2\'ed\'ee -\loch\f39 \hich\f39 ) - \'ed\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'ec\'e5\'f1\'f2\'e5\loch\f39 \hich\f39 D \'ec\'ee\'e3\'eb\'e8\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 W(\'e5\'e6\'e5\'ed\'e5\'e4\'e5\'eb\'fc\'ed\'ee -\loch\f39 \hich\f39 ), M(\'e5\'e6\'e5\'ec\'e5\'f1\'ff\'f7\'ed\'ee\loch\f39 \hich\f39 ) \'e8\'eb\'e8\loch\f39 \hich\f39 H(\'e5\'e6\'e5\'f7\'e0\'f1\'ed\'ee\loch\f39 \hich\f39 )) \'e2\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'e5\loch\f39 C:\\3proxy\\traf\\ -\hich\f39 traf \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e3\'e5\'ed\'e5\'f0\'e8\'f0\'ee\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'ee\'f2\'f7\'e5\'f2\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f2\'e5\'ea -\'f1\'f2\'ee\'e2\'ee\'ec\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'e5\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'ef\'ee\'e7\'e2\'ee\'eb\'e8\'f2\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 -\hich\f39 \'ed\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'ee\'f1\'ec\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'f3\loch\f39 \hich\f39 \'e7\'e0\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e9 -\loch\f39 \hich\f39 \'e4\'e5\'ed\'fc\loch\f39 \hich\f39 . \'cf\'ee\'f1\'ec\'ee\'f2\'f0\'e8\'f2\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e0\'e5\'ec\'fb\'e5\loch\f39 \hich\f39 \'ee\'f2\'f7\'e5\'f2\'fb\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e2 -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e1\'eb\'ee\'ea\'ed\'ee\'f2\'e5\loch\f39 \hich\f39 , \'f2\'e0\'ec\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'ef\'ee\'ed\'ff\'f2\'ed\'ee. -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d3\'f7\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 , \'f7\'f2\'ee -\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'ee\'f2\'f7\'e5\'f2\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 -\'e3\'e5\'ed\'e5\'f0\'e8\'f0\'ee\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e5\loch\f39 \hich\f39 \'f1\'f3\'f2\'ee\'ea\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'f1\'f2\'ee\'e8\'f2\loch\f39 \hich\f39 -\'e6\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'ff\'e2\'eb\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'f1\'f0\'e0\'e7\'f3\loch\f39 . -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 countin "1/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\loch\af39\dbch\af31505\hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 50 * 192.168.0.2 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "2/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f2\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 80 * 192.168.0.3 * * * -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 countin "3/\'d1\'e8\'e4\'ee\'f0\'ee\'e2\hich\af39\dbch\af31505\loch\f39 " M 30 * 192.168.0.4 * * * -\par }\pard \ltrpar\ql \fi-360\li360\ri0\nowidctlpar\tx360\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'fd\'f2\'e8\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'fe\'f2\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'fb\'e5\loch\f39 -\hich\f39 \'ec\'e5\'f1\'ff\'f7\'ed\'fb\'e5\loch\f39 \hich\f39 (M) \'eb\'e8\'ec\'e8\'f2\'fb\loch\f39 \hich\f39 \'e2\'f5\'ee\'e4\'ff\'f9\'e5\'e3\'ee\loch\f39 \hich\f39 (\'f1\'f7\'e5\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e8 -\'f1\'f5\'ee\'e4\'ff\'f9\'e8\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 , \'ea\'f1\'f2\'e0\'f2\'e8\loch\f39 \hich\f39 , \'e0\'e2\'f2\'ee\'f0\loch\f39 \hich\f39 \'ef\'f0\'ee\'e3\'f0\'e0\'ec\'ec\'fb\loch\f39 \hich\f39 \'f2\'ee\'e6 -\'e5\loch\f39 \hich\f39 \'ee\'e1\'e5\'f9\'e0\'e5\'f2\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 ) \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ec\'e5\'e3\'e0\'e1\'e0\'e9\'f2\'e0\'f5\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'fb\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 IP-\'e0\'e4\'f0\'e5\'f1\'e0\'ec\'e8\loch\f39 \hich\f39 192.168.0.2-192.168.0.4, \'ef\'f0\'e8\'f7\'e5\'ec\loch\f39 \hich\f39 -\'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\loch\af39\dbch\af31505\hich\f39 \'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'f1\'f7\'e8\'f2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'e0\'f5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'f0\'ee\'f2\'ee\'ea\'ee\'eb\'ee\'e2. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8\'ed\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee -\loch\f39 \hich\f39 \'ea\'e0\'ea\'ee\'ec\'f3-\'f2\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e5\'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'ed\'fb\'e9\loch\f39 -\hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'f3\'f7\'e5\'f2\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8 -\'ea\'e0\loch\f39 \hich\f39 . \'d7\'f2\'ee\loch\f39 \hich\f39 \'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 ? \'d1\'e0\'ec\'ee\'e5\loch\f39 -\hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\'e5\loch\f39 \hich\f39 \'f0\'e5\'f8\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \emdash \loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'f2\'e0 -\'ea\'ee\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'ee\'e5\loch\f39 \hich\f39 \'ee\loch\af39\dbch\af31505\hich\f39 \'ed\loch\f39 \hich\f39 \'ed\'e5 -\loch\f39 \hich\f39 \'f1\'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'e2\'f1\'e5\'ec\loch\f39 \hich\f39 \'e6\'e5\'eb\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8 -\'ec\'e5\'f0\loch\f39 \hich\f39 , \'ef\'e0\'f0\'f3\loch\f39 \hich\f39 \'f2\'e5\'f0\'e0\'e1\'e0\'e9\'f2\loch\f39 \hich\f39 . \'c8\'eb\'e8\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc -\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'e5\'ed\'ed\'f3\'fe\loch\f39 \hich\f39 \'ea\'e2\'ee\'f2\'f3\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 , \'ed\'ee -\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ed\'e5\'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'ef\'e5\'f0\'e8\'ee\'e4\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'e5\'ed\'e8\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'f2\'e0 -\'ea\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef -\'e5\'f0\'e8\'ee\'e4\'ee\'ec\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'e8\'ff\loch\f39 \hich\f39 N (\'ed\'e8\'ea\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 ) \'eb\'e8\'e1\'ee\loch\f39 \hich\f39 Y(\'e3\'ee\'e4\loch\f39 ). -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'e0\'e6\'ed\'ee\loch\f39 \hich\f39 - \'ed\'ee\'ec\'e5\'f0\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'ee\'e2\loch\f39 \hich\f39 (\'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5 -\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 1,2,3) \'ed\'e5\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'fb\loch\f39 \hich\f39 \'f1\'ee\'e2\'ef\'e0\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 . \'c8\'ec\'e5\'ed\'e0\loch\f39 \hich\f39 , \'e2 -\'e5\'f0\'ed\'e5\'e5\loch\f39 \hich\f39 , \'f4\'e0\'ec\'e8\'eb\'e8\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\'e0\loch\f39 \hich\f39 , \'e8\'e4\'f3\'f9\'e8\'e5 -\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ea\'ee\'f1\'ee\'e9\loch\f39 \hich\f39 \'f7\'e5\'f0\'f2\'fb\loch\f39 \hich\f39 - \'ef\'f0\'e8\'e2\'e5\'e4\'e5\'ed\'fb\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1 -\'f1\'f2\'e2\'e0\loch\f39 \hich\f39 , \'e8\'ec\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'ee\'ed\'e8\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2\loch\f39 \hich\f39 \'f7\'e8\'f2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0 -\'ed\'e8\'f6\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'e8\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'ef\'ee\'e7\'e6\'e5\loch\f39 ... -\par \loch\af39\dbch\af31505\hich\f39 \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'e2\'e0\'f1\loch\f39 \hich\f39 \'ef\'ee\'ff\'e2\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 \'e6\'e5\'eb\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'f2\'fc -\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'f2\'e5\'ea\'f3\'f9\'e8\'e9\loch\f39 \hich\f39 \'ee\'e1\'f9\'e8\'e9\loch\f39 \hich\f39 \'e8\'e7\'f0\'e0\'f1\'f5\'ee\'e4\'ee\'e2\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 -\hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'ef\'e5\'f8\'e8\'f2\'e5\loch\f39 -\hich\f39 \'e2\'ee\'ee\'f0\'f3\'e6\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ea\'e0\'eb\'fc\'ea\'f3\'eb\'ff\'f2\'ee\'f0\'ee\'ec\loch\f39 \hich\f39 , \'fd\'f2\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc -\loch\f39 \hich\f39 \'f1\'f0\'e5\'e4\'f1\'f2\'e2\'e0\'ec\'e8\loch\f39 \hich\f39 3proxy. \'c4\'ee\'f1\'f2\'e0\'f2\'ee\'f7\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 , \'f3\'f7 -\'e8\'f2\'fb\'e2\'fe\'f9\'e8\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 -\hich\f39 , \'f2\'e0\'ea\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 countin 100/month M 1000000 * -\par \hich\af39\dbch\af31505\loch\f39 coun\hich\af39\dbch\af31505\loch\f39 tin 101/day D 1000000 * -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f0\'e2\'e0\'ff\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'e0\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'ee\'e1\'f9\'e8\'e9\loch\f39 \hich\f39 \'ec\'e5\'f1\'ff\'f7\'ed\'fb\'e9\loch\f39 -\hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 , \'e2\'f2\'ee\'f0\'e0\'ff\loch\f39 \hich\f39 \'ee\'e1\'f9\'e8\'e9\loch\f39 \hich\f39 \'e4\'ed\'e5\'e2\'ed\'ee\'e9\loch\f39 \hich\f39 . \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f7\'ea\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'e8\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5 -\'eb\'ff\loch\f39 \hich\f39 (\'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e0\'f2\'ee\'f0\'e0\loch\f39 \hich\f39 ) \'ef\'ee\'ff\'e2\'ff\'f2\'f1\'ff\loch\f39 -\hich\f39 \'e4\'e2\'e5\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'e8\loch\f39 \hich\f39 , \'f3\'ea\'e0\'e7\'fb\'e2\'e0\'fe\'f9\'e8\'e5\loch\f39 \hich\f39 \'f2\'e5\'ea\'f3\'f9\'e8\'e5\loch\f39 \hich\f39 \'ec\'e5\'f1\'ff\'f7\'ed\'fb\'e9\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'ed\'e5\'e2\'ed\'ee\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e8\loch\f39 \hich\f39 , \'ef\'f0\'ee\'f5\'ee\'e4\'ff\'f9\'e8\'e5\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 -\hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 nocountin, \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 , \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'ed\'e5\loch\f39 -\hich\f39 \'f1\'f7\'e8\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'ed\'ee\'ec\'f3\loch\f39 \hich\f39 \'f0\'ff\'e4\'f3\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5 -\'f2\'f0\'ee\'e2\loch\f39 \hich\f39 . \'cd\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 nocountin * 192.168.0.4 * 110 * -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'ec\'e5\'f9\'e5\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'cf\'c5\'d0\'c5\'c4\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'e0\'ec\'e8\loch\f39 \hich\f39 countin, \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ee\'f2 -\'ea\'eb\'fe\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'e4\'f1\'f7\'e5\'f2\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\loch\f39 - \hich\af39\dbch\af31505\loch\f39 \hich\f39 IP .4 \'ef\'f0\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'e8\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 110 \'ef\'ee\'f0\'f2\'f3\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\'e4\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e8\'e4\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'ef\'ee -\'f1\'eb\'e5\loch\f39 \hich\f39 \'e8\'f1\'f7\'e5\'f0\'ef\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 \'f1\'f3\'f9\'e5\'f1\'f2\'e2\'f3\'fe\'f9\'e8\'e5\loch\f39 \hich\f39 \'f1\'ee\'e5\'e4\'e8\'ed\'e5\'ed\'e8\'ff -\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'e1\'f0\'fb\'e2\'e0\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'e0\'f1\'fc\'ea -\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'e8\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'e4\'ee\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e0\loch\f39 -\hich\f39 \'e4\'ed\'ff\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'ef\'f0\'e5\'e2\'fb\'f8\'e5\'ed\'e8\'e8\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 . \'c8\'eb\'e8\loch\f39 -\hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'ea\'e0\'f7\'e0\'f2\'fc\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'ee\'e9\loch\f39 \hich\f39 -\'f4\'e0\'e9\'eb\loch\f39 \hich\f39 , \'e7\'ed\'e0\'f7\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'e5\'e2\'fb\'f8\'e0\'fe\'f9\'e8\'e9\loch\f39 \hich\f39 \'e2\'fb\'e4\'e5\'eb\'e5\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea -\loch\f39 \hich\f39 \emdash \loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'f3\'f1\'eb\'ee\'e2\'e8\'e8\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'ec\'ee -\'e6\'e5\'f2\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'e8\'f2\'fc\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'ec\'e5\'f0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee -\'f6\'e5\'f1\'f1\'e0\loch\f39 \hich\f39 \'e7\'e0\'ea\'e0\'f7\'ea\'e8\loch\f39 \hich\f39 . \'c0\loch\f39 \hich\f39 \'e2\'ee\'f2\loch\f39 \hich\f39 \'f1\'ee\'e7\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'ee\'e2\'ee\'e5\loch\f39 \hich\f39 \'f1\'ee\'e5\'e4 -\'e8\'ed\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ef\'f0\'e5\'e2\'fb\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'ed\'e5\loch\f39 -\hich\f39 \'f3\'e4\'e0\'f1\'f2\'f1\'ff. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ed\'ee\'e2\'e0\loch\f39 \hich\f39 \'f1\'ee\'e1\'e8\'f0\'e0\'e5\'ec\loch\f39 \hich\f39 \'ee\'f7\'e5\'f0\'e5\'e4\'ed\'f3\'fe\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'fe\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3 -\'e0\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f3\'f7\'e5\'f2\'ee\'ec\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\'ed\'e0\'ef\'e8\'f1\'e0\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 4): -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0\pararsid3764488 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -nobandlimin * * * 110 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 24000 * 192.168.0.2,192.168.0.3 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf" -\par \hich\af39\dbch\af31505\loch\f39 nocountin * 192.168.0.4\hich\af39\dbch\af31505\loch\f39 * 110 * -\par \hich\af39\dbch\af31505\loch\f39 countin "1/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 50 * 192.168.0.2 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "2/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f2\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 80 * 192.168.0.3 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "3/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d1\'e8\'e4\'ee\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 30 * 192.168.0.4 * * * -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 allow * 192.168.200.4 * * * 1-5 \hich\af39\dbch\af31505\loch\f39 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 proxy -t -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'f3\loch\f39 \hich\f39 \'e2\'ee\'f2\loch\f39 \hich\f39 , \'ec\'fb\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0 -\'ee\'e8\'eb\'e8\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'e2\'e5\'e4\'fc\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\loch\f39 \hich\f39 - \'fd\'f2\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 -\hich\f39 WEB-\'f1\'e5\'f0\'f4\'e8\'ed\'e3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 FTP. \'dd\'eb\'e5\'ea\'f2\'f0\'ee\'ed\'ed\'e0\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'e0\loch\f39 \hich\f39 ! \'c2\'ee\'f2\loch\f39 \hich\f39 \'e5\'e9\loch\f39 -\hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e7\'e0\'e9\'ec\'e5\'ec\'f1\'ff\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e0\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e8\'ec\loch\f39 \hich\f39 \'ef -\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\hich\af39\dbch\af31505\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ee\'f1\'f2\'e0\'e2\'e5\loch\f39 -\hich\f39 3proxy \'e8\'ec\'e5\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'e2\'ee\'e9\loch\f39 \hich\f39 pop3-\'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 : -\par -\par -\par \hich\af39\dbch\af31505\loch\f39 pop3p -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e8\'f2\'fc -\loch\f39 \hich\f39 \'e2\'e0\'f8\'e8\loch\f39 \hich\f39 \'ec\'fd\'e9\'eb-\'ea\'eb\'e8\'e5\'ed\'f2\'fb\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'e4\'eb\'ff -\loch\f39 \hich\f39 \'ff\'f9\'e8\'ea\'e0\loch\f39 \hich\f39 vasya.pupkin@mail.ru \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'ec\'ee\'e5\'e3\'ee\loch\f39 \hich\f39 \'eb\'fe\'e1\'e8\'ec\'ee\'e3\'ee\loch\f39 -\hich\f39 TheBat! \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'e0\'e2\'ea\'e8\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 (\'e7\'e0\'ea\'eb\'e0\'e4\'ea\'e0\loch\f39 \hich\f39 -\'d2\'f0\'e0\'ed\'f1\'ef\'ee\'f0\'f2\loch\f39 \hich\f39 ) \'f0\'e0\'ed\'fc\'f8\loch\af39\dbch\af31505\hich\f39 \'e5\loch\f39 \hich\f39 \'f1\'f2\'ee\'ff\'eb\'e8\loch\f39 \hich\f39 \'f2\'e0\'ea\'e8\'e5\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0 -\'fb\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : pop.mail.ru -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 : vasya.pupkin -\par -\par \loch\af39\dbch\af31505\hich\f39 \'f2\'ee\loch\f39 \hich\f39 \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'f3\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea -\'f1\'e8\loch\f39 \hich\f39 , \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'ef\'ee\'ec\'e5\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e8\'e5 -\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : 192.168.0.1 -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 : vasya.pupkin@pop.mail.ru -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e2\'ed\'e8\'ec\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 , \'e8\'ec\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ee\'e2\'e0\'f2\loch\af39\dbch\af31505\hich\f39 \'e5\'eb\'fc\'ed\'ee\'f1\'f2\'fc -\loch\f39 \hich\f39 "\'e8\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 "@"POP3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 \'e2\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'ff\'f9\'e8\'ea\'e0\loch\f39 -\hich\f39 ", \'e0\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e2\'e0\'f8\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'eb\'ff\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'e5\'e9\loch\f39 \hich\f39 \'ed\'e0\'e3\'eb\'ff\'e4\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'f0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec\loch\f39 \hich\f39 \'e5\'f9\'e5 -\loch\f39 \hich\f39 \'e2\'e0\'f0\'e8\'e0\'ed\'f2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e8\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'e0\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : mail.example.com -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 : vasya.pupkin@example.com -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0 -\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\af39\dbch\af31505\hich\f39 \'f8\'eb\'ee\'f1\'fc\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'ef\'ee\'ec\'e5\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e8\loch\f39 -\hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e8\'e5\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : 192.168.0.1 -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 : vasya.pupkin@example.com@mail.example.com -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ea\'e0\'f7\'e5\'f1\'f2\'e2\'e5\loch\f39 \hich\f39 \'f0\'e0\'e7\'e4\'e5\'eb\'e8\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'e7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 \'e2\'fb\'f1\'f2\'f3\'ef\'e0\'e5\'f2 -\loch\f39 \hich\f39 @, \'ed\'ee\loch\f39 \hich\f39 \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee\loch\f39 \hich\f39 , \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e4\'f0\'f3 -\'e3\'ee\'e9\loch\f39 \hich\f39 \'f1\'e8\'ec\'e2\'ee\'eb\loch\f39 \hich\f39 , \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'ff\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 d -\hich\af39\dbch\af31505\loch\f39 elimchar: -\par -\par \hich\af39\dbch\af31505\loch\f39 delimchar # -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d7\'f2\'ee\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ea\'e0\'f1\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ee\'f2\'ef\'f0\'e0\'e2\'ea\'e8\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 , \'f2\'ee -\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e0\'e1\'ee\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5 -\'f0\'e0\loch\f39 \hich\f39 \'f0\'e5\'ea\'ee\'ec\'e5\'ed\'e4\'f3\'e5\'f2\loch\f39 \hich\f39 \'e2\'ee\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef -\'ee\'f0\'f2\'ec\'e0\'ef\'ef\'e8\'ed\'e3\'ee\'ec\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 25 smtp.provider.ru 25 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'f2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'ec\'f3\'e4\'f0\'f1\'f2\'e2\'f3\'ff\loch\f39 -\hich\f39 \'eb\'f3\'ea\'e0\'e2\'ee\loch\f39 \hich\f39 , \'ec\'fb\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\loch\af39\dbch\af31505\hich\f39 \'fb\loch\f39 \hich\f39 \'ef\'ee -\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'f3\loch\f39 \hich\f39 25, \'ef\'ee\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'ee\'ec\'f3\loch\f39 \hich\f39 , \'f1\'ee\'e1\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 \'ee\'f2\'ef\'f0 -\'e0\'e2\'eb\'ff\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'fb\'e5\loch\f39 \hich\f39 \'f1\'ee\'ee\'e1\'f9\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 , \'ef\'e5\'f0\'e5\'ea\'e8\'e4\'fb\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 25-\'fb\'e9\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9\'e4\'e5\'f0\'e0 -\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'e2\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'e0 -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f3\'ef\'ee\'ec\'ff\'ed\'f3\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\loch\f39 -\hich\f39 \'ff\'f9\'e8\'ea\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'e1\'f9\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'ee\'ec\'e5\'ed\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e7\'e0\'ef\'e8\'f1\'fc -\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 SMTP-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 SMTP-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : 192.168.0.1 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'e5\'ec\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'ec -\'e0\'ef\'ef\'e8\'ed\'e3\'ee\'ec\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 -\'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee -\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 2110 pop.mail.ru 110 -\par \loch\af39\dbch\af31505\hich\f39 \'c5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'e2\'e0\'f0\'e8\'e0\'ed\'f2\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'e0\loch\f39 \hich\f39 \'ed\'e5\'ef\'f0\'e8\'ff\'f2\'ed -\'e0\'ff\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'f1\'f2\'ee\'f0\'ee\'ed\'e0\loch\f39 \hich\f39 - \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e8\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2\loch\f39 \hich\f39 \'ef -\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ff\'f9\'e8\'ea\'e0\'ec\'e8\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'fb\'f5\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'fb\'f5\loch\f39 \hich\f39 \'f1\'e5\'f0 -\'e2\'e5\'f0\'e0\'f5\loch\f39 \hich\f39 , \'e1\'eb\'e0\'e3\'ee\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'e2\'e5\'eb\'ee\'f1\'fc\loch\f39 \hich\f39 - (yandex, rambler,newmail...), \'f2\'ee\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'ef -\'f0\'e8\'e4\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e7\'e0\'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ed\'ee\'e2\'f3\'fe\loch\f39 \hich\f39 \'e7\'e0\'ef\'e8\'f1\'fc\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'ec\'e0\'ef\'ef\'e8\'ed\'e3\'e0\loch\f39 \hich\f39 -\'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 tcppm \hich\af39\dbch\af31505\loch\f39 -i192.168.0.1 3110 pop.yandex.ru 110 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c2\'ef\'f0\'ee\'f7\'e5\'ec\loch\f39 \hich\f39 , \'e2\'f0\'ff\'e4\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'f7 -\'e8\'f1\'eb\'ee\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'ee\'ec\loch\f39 \hich\f39 \'ee\'f4\'e8\'f1\'e5\loch\f39 \hich\f39 \'ef\'f0\'e5\'e2\'fb\'f1\'e8\'f2\loch\f39 10-15. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'fb\loch\f39 \hich\f39 \'ff\'f9\'e8\'ea\'e0\loch\f39 \hich\f39 \'e2\loch\f39 -\hich\f39 \'ec\'fd\'e9\'eb-\'ea\'eb\'e8\'e5\'ed\'f2\'e5\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e8\'e5\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 : 192.168.0.1 -\par \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 : vasya.pupkin -\par -\par \loch\af39\dbch\af31505\hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'ee\'ef\'ee\'eb\'ed\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'ec\'e5\'ed\'ff\'f2\'fc -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 2110 \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'e1\'fb\'f2\'fc\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef -\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\'ec\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'fd\'f2\'ee\'f2\loch\f39 \hich\f39 \'ed\'e5\'f1\'f2\'e0\'ed\'e4\'e0\'f0\'f2\'ed\'fb\'e9 -\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 2110,25,110 * 1-5 00:00:00-20:00:00 -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'ea\'ee\'e9\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'f1\'ef\'ee\'f1\'ee\'e1\'ee\'e2\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 -\'e2\'fb\'e1\'e8\'f0\'e0\'f2\'fc\loch\f39 \hich\f39 - \'e4\'e5\'eb\'ee\loch\f39 \hich\f39 \'e2\'ea\'f3\'f1\'e0\loch\f39 \hich\f39 , \'ec\'ed\'e5\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'fb\'f7\'e5\'ed\loch\f39 -\hich\f39 \'ef\'ee\'f0\'f2\'ec\'e0\'ef\'ef\'e8\'ed\'e3\loch\f39 \hich\f39 , \'e5\'e3\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'ec\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc -\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'ef\'f0\'ee\'f7\'e5\'ec\loch\f39 \hich\f39 , \'ef\'f0\'ee\'e3\'f0\'e5\'f1\'f1\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f2\'ee\'e8\'f2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ec\'e5\'f1\'f2\'e5 -\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ee\'f2\'ef\'f0\'e0\'e2\'ea\'e8\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 - smtp-\'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 , \'f0\'e0\'e1\'ee\'f2\'e0\'fe\'f9\'e8\'e9\loch\f39 \hich\f39 \'e0\'ed\'e0\'eb\'ee\'e3\'e8\'f7\'ed\'ee\loch\f39 pop3p: -\par -\par \hich\af39\dbch\af31505\loch\f39 smtpp -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'ee\'f7\'f2\'ee\'e2\'fb\'e5\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'fb\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'e0\'e8\'e2\'e0\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'e0\'ed\'e0\'eb\'ee\'e3\'e8\'f7\'ed\'ee -\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e5\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 pop3p: \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 \'ee\'f1\'f2\'e0\'fe\'f2\'f1\'ff -\loch\f39 \hich\f39 \'e1\'e5\'e7\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 , \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 pop3-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'f3\loch\af39\dbch\af31505\hich\f39 \'ea -\'e0\'e7\'fb\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 IP \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'ee\'eb\'e5\loch\f39 \hich\f39 \'e8\'ec\'e5\'ed\'e8\loch\f39 \hich\f39 -\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'e7\'e0\'e1\'e8\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 \'e8\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 @POP_SERVER. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'e5\loch\f39 \hich\f39 \'ff\'f9\'e8\'ea\'e0\loch\f39 }{\field{\*\fldinst {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 -HYPERLINK "mailto:ivan@mail.ru"}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid3764488 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b400000006d00610069006c0074006f003a006900760061006e0040006d00610069006c002e00720075000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt {\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\ul\cf9\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ivan@mail.ru}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\hich\af39\dbch\af31505\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ef\'ee\'eb\'e5\loch\f39 \hich\f39 \'ab\'d3\'f7\'e5\'f2\'ed\'e0\'ff\loch\f39 \hich\f39 \'e7\'e0\'ef\'e8\'f1\'fc\'bb\loch\f39 \hich\f39 \'e2\'ed\'ee\'f1\'e8\'ec\loch\f39 }{\field{\*\fldinst { -\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "mailto:ivan@smtp.mail.ru"}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid3764488 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a0000006d00610069006c0074006f003a006900760061006e00400073006d00740070002e006d00610069006c002e00720075000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt { -\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\ul\cf9\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ivan@smtp.mail.ru}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 25 \'ee\'f1\'f2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e1\'e5\'e7\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 . \'c0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'ee\'eb\'e5\loch\f39 \hich\f39 \'ab\'d1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 \'e8\'f1\'f5\'ee\'e4\'ff\'f9\'e5\'e9 -\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\'bb\loch\f39 \hich\f39 \'e7\'e0\'e1\'e8\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 IP \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ee\'e1\'e8\'f0\'e0\'e5\'ec\loch\f39 \hich\f39 \'ee\'f7\'e5\'f0\'e5\'e4\'ed\'f3\'fe\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'fe\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'f1\loch\f39 -\hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 pop3p (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 5): -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.10\hich\af39\dbch\af31505\loch\f39 0.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0\pararsid3764488 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 nobandlimin * * * 110 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 24000 * \hich\af39\dbch\af31505\loch\f39 192.168.0.2,192.168.0.3 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf" -\par \hich\af39\dbch\af31505\loch\f39 nocountin * 192.168.0.4 * 110 * -\par \hich\af39\dbch\af31505\loch\f39 countin "1/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 50 * 192.168.0.2 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "2/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f2\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 80 * 192.168.0.3 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin \hich\af39\dbch\af31505\loch\f39 "3/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d1\'e8\'e4\'ee\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 30 * 192.168.0.4 * * * -\par -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 proxy -\par -\par \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'ce\'d7\'d2\'c0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 25}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 00}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 smtp.provider.ru 25 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 pop3p -\par \hich\af39\dbch\af31505\loch\f39 smtpr -\par \loch\af39\dbch\af31505\hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'fb\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ef\'ee\'f0 -\'f2\'ec\'e0\'ef\'ef\'e8\'ed\'e3\loch\f39 \hich\f39 \'f1\'e5\'ea\'f6\'e8\'ff\loch\f39 \hich\f39 \'ea\'ee\'ed\loch\af39\dbch\af31505\hich\f39 \'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'e8\'e4\'f3\'f9\'e0\'ff\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5 -\loch\f39 \hich\f39 \'ea\'ee\'ec\'e5\'ed\'f2\'e0\'f0\'e8\'ff\loch\f39 \hich\f39 # \'cf\'ce\'d7\'d2\'c0\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'eb\'e0\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'ed\'e5\'ec\'ed\'ee\'e3\'ee\loch\f39 -\hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'ec\'f3\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\loch\af39\dbch\af31505\hich\f39 \'cf\'ce\'d7\'d2\'c0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192\hich\af39\dbch\af31505\loch\f39 .168.0.1 25}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 00}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 smtp.provider.ru 25 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 2110 pop.mail.ru 110 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 3110 pop.yandex.ru 110 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c2\'fb\loch\f39 \hich\f39 , \'ed\'e0\'e2\'e5\'f0\'ed\'ee\'e5\loch\f39 \hich\f39 , \'e7\'e0\'ec\'e5\'f2\'e8\'eb\'e8\loch\f39 \hich\f39 \'ed\'ee\'e2 -\'f3\'fe\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 flush. \'cc\'fb\loch\f39 \hich\f39 \'e5\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'ed\'e8\'eb\'e8\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f1\'e1\'f0\'ee\'f1 -\'e0\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e0\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 -\'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\loch\af39\dbch\af31505\hich\f39 \'ff\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0 -\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 . \'c7\'e0\'ec\'e5\'f7\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'f1\'e1\'f0\'ee\'f1\loch\f39 \hich\f39 \'ed -\'e5\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'ee -\'e5\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 . \'c8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0 -\'e1\'fb\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'ed\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'ef\'ee\'f1\'ee -\'e1\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e8\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d3\'f7\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 smtpr}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f3\'ec\'ee\'eb\'f7\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'e7\'e0\'ed\'e8\'ec\'e0\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 - 25, \'ef\'ee\'fd\'f2\'ee\'ec\'f3\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'f3\loch\f39 \hich\f39 \'ed\loch\af39\dbch\af31505\hich\f39 \'e5\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'fb -\loch\f39 \hich\f39 \'e2\'e8\'f1\'e5\'f2\'fc\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8\'e5\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c8\loch\f39 \hich\f39 \'ed\'e0\'ea\'ee\'ed\'e5\'f6\loch\f39 \hich\f39 , \'f0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec\loch\f39 \hich\f39 \'e2\'e0\'e6\'ed\'f3\'fe\loch\f39 \hich\f39 \'f1\'ee\'f1\'f2\'e0\'e2\'eb\'ff\'fe\'f9 -\'f3\'fe\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 - WEB-\'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\loch\f39 \hich\f39 \'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 -. \'c4\'eb\'ff\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ed\'e5\'ec\'f3\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec -\'e0\'ed\'e4\'f3\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 admin -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'eb\'ff\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'ef\'e8\'f8\'e8\'f2\'e5\loch\f39 -\hich\f39 \'e2\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'ed\'ee\'e9\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e5\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e8\'e9\loch\f39 \hich\f39 \'e0\'e4 -\'f0\'e5\'f1\hich\af39\dbch\af31505\loch\f39 \hich\f39 : http://192.168.0.1:80, \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'e1\'fb\'e2\loch\f39 \hich\f39 , \'ea\'ee\'ed\'e5\'f7\'ed\'ee\loch\f39 \hich\f39 , \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0 -\'e5\'f8\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'e4\'e0\'f0\'f2\'ed -\'ee\'e3\'ee\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 admin \'ef\'ee\'f0\'f2\'e0\loch\f39 \hich\f39 80. \'c2\loch\f39 \hich\f39 \'ee\'f2\'ea\'f0\'fb\'e2\'f8\'e5\'ec\'f1\'ff\loch\f39 \hich\f39 -\'ee\'ea\'ed\'e5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'e8\'ed\'f4 -\'ee\'f0\'ec\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 \'ee\loch\f39 \hich\f39 \'ec\'e0\'ea\'f1\'e8\'ec\'e0\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e4\'ee\'ef\'f3\'f1\'f2\'e8\'ec\'ee\'ec\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e5\loch\f39 \hich\f39 \'e8 -\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'f2\'e5\'ea\'f3\'f9\'e5\'ec\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'e8\loch\f39 \hich\f39 , \'ef\'ee\'f1\'ec\'ee\'f2\'f0\'e5\loch\af39\dbch\af31505\hich\f39 \'f2 -\loch\af39\dbch\af31505\hich\f39 \'fc\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'f6\'e5\'eb\'e8\'ea\'ee\'ec\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'e7\'e0\'ef\'f3\'f1\'f2 -\'e8\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 . \'cf\'ee\'fd\'f2\'ee\'ec\'f3\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'fd\'f2\'f3 -\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'f3\loch\f39 \hich\f39 \'f0\'e0\'e7\'e4\'e0\'e2\'e0\'e9\'f2\'e5\loch\f39 \hich\f39 \'ea\'f0\'e0\'e9\'ed\'e5\loch\f39 \hich\f39 \'e2\'ed\'e8\'ec\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 ! \'c2\'ef\'f0\'ee -\'f7\'e5\'ec\loch\f39 \hich\f39 , \'f3\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 admin \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'ea\'eb\'fe\'f7\loch\f39 \hich\f39 -s, \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'ed\'e5\loch\f39 -\hich\f39 \'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'ed\'e8\'f7\'e5\'e3\'ee\loch\f39 \hich\f39 \'ed\'e5\'e4\'ee\'e7\'e2\'ee\'eb\'e5\'ed\'ed\'ee -\'e3\'ee. -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\'e4\'ee\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e8\'e4\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 -\'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'ec\'ee\'f2\'f0\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'e8\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e5\loch\f39 -\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e3\'e0\'eb\'ee\'f7\'ea\'f3 -\loch\f39 \hich\f39 \'cd\'e5\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e8\'e6\'e5\'f1\'f2\'ee\'ff\'f9\'e5\'ec\loch\f39 \hich\f39 \'ef\'ee\'eb\'e5\loch\f39 \hich\f39 \'e0\'e9-\'ef\'e8\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8- -\'f1\'e5\'f0\'e2\'e5\'f0\'e0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \u8203\'3f}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 -\hich\f39 , \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 \'d1\'f7\'e8\'f2\'e0\'fe\loch\f39 \hich\f39 \'f1\'e2\'ee\'e8\'ec\loch\f39 \hich\f39 \'e4\'ee\'eb\'e3\'ee\'ec\loch\f39 \hich\f39 \'f3\'ef\'ee\'ec\'ff\'ed\'f3\'f2\'fc\loch\f39 \hich\f39 \'ee\loch\f39 -\hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e5\loch\f39 \hich\f39 writable, \'ea\'ee\'f2\'ee\'f0\'e0\'ff\loch\f39 \hich\f39 , \'e1\'f3\'e4\'f3\'f7\'e8\loch\f39 \hich\f39 \'f0\'e0\'e7\'ec\'e5\loch\af39\dbch\af31505\hich\f39 \'f9\'e5\'ed\'e0\loch\f39 \hich\f39 -\'e2\loch\f39 \hich\f39 \'f1\'e0\'ec\'ee\'ec\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e5\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'fc\loch\f39 -\hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f7\'e8\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 WEB-\'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9 -\'f1\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 ! \'c0\'e2\'f2\'ee\'f0\loch\f39 \hich\f39 \'ef\'f0\'ee\'e3\'f0\'e0\'ec\'ec\'fb\loch\f39 -\hich\f39 \'ef\'f0\'e5\'e4\'eb\'e0\'e3\'e0\'e5\'f2\loch\f39 \hich\f39 \'e4\'e2\'e0\'e6\'e4\'fb\loch\f39 \hich\f39 \'ef\'ee\'e4\'f3\'ec\'e0\'f2\'fc\loch\f39 \hich\f39 , \'ef\'f0\'e5\'e6\'e4\'e5\loch\f39 \hich\f39 \'f7\'e5\'ec\loch\f39 \hich\f39 \'e2 -\'ea\'eb\'fe\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'fd\'f2\'f3\loch\f39 \hich\f39 \'ee\'ef\'f6\'e8\'fe\loch\f39 \hich\f39 . \'d7\'f2\'ee\loch\f39 \hich\f39 \'ea\'e0\'f1\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 -\hich\f39 , \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'e0\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'e0\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 , \'ec\'e8\'ec -\'ee\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'ee\'e9\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ff\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'e9\'f2\'e8\loch\f39 \hich\f39 -. \'dd\'f2\'ee\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 monitor, \'ea\'ee\'f2\'ee\'f0\'e0\'ff\loch\f39 \hich\f39 \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'f3 -\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'e8\'f2\'fc\loch\f39 \hich\f39 \'e7\'e0\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'ee\'ec\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 (\'e8\loch\f39 \hich\f39 \'ed\'e5 -\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'fb\'ec\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'ee\'ec\loch\f39 \hich\f39 3proxy.cfg, \'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'ec -\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8\'ec\loch\f39 \hich\f39 , \'e2\'ea\'eb\'fe\'f7\'e0\'e5\'ec\'fb\'ec\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 ) \'e8\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1 -\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ee\'e1\'ed\'e0\'f0\'f3\'e6\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e5\'e9\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 \'ed\'e5\'e7\'e0\'ec\'e5\'e4\'eb -\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 (\'ef\'ee\loch\f39 \hich\f39 \'ec\'ee\'e8\'ec\loch\f39 \hich\f39 \'ed\'e0\'e1\'eb\'fe\'e4\'e5\loch\af39\dbch\af31505\hich\f39 \'ed\loch\af39\dbch\af31505\hich\f39 \'e8\'ff\loch\f39 \hich\f39 , \'f7\'e5 -\'f0\'e5\'e7\loch\f39 \hich\f39 2-3 \'f1\'e5\'ea\'f3\'ed\'e4\'fb\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'f1\'ee\'f5\'f0\'e0\'ed\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 ) \'e7\'e0\'e3\'f0\'f3\'e6\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'ee -\'e2\'f3\'fe\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 . \'cf\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 \'ee\'f2\'eb\'e8\'f7\'ed\'e0\'ff\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'fc\loch\f39 -\hich\f39 , \'ea\'ee\'f2\'ee\'f0\'ee\'e9\loch\f39 \hich\f39 \'ec\'ed\'e5\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f5\'e2\'e0\'f2\'e0\'eb\'ee\loch\f39 \hich\f39 \'e2\loch\f39 ES Proxy! -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e8\'e4\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 -\'fd\'f2\'e8\loch\f39 \hich\f39 \'e4\'e2\'e5\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 \emdash \loch\f39 \hich\f39 writable \'e8\loch\f39 \hich\f39 monitor - \'ed\'e5\'eb\'fc\'e7\'ff\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5 -\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'e5. -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 monitor "c:\\3proxy\\bin\\\hich\af39\dbch\af31505\loch\f39 3proxy.cfg" -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d0\'e0\'e7\'f3\'ec\'e5\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 \'ec\'ee\'ed\'e8\'f2\'ee\'f0\loch\f39 -\hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'fb\'ec\loch\f39 -\hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'ee\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 . \'c4\'e5\'eb\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f2\'ee\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e2\'ea\'eb\'fe\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'fb\'e5\loch\f39 \hich\f39 \'f2\'e5\'ea -\'f1\'f2\'ee\'e2\'fb\'e5\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'fb\loch\f39 \hich\f39 \'f1\'ee\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e0\'ec\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 , \'f1\'e5\'f2 -\'e5\'e9\loch\f39 \hich\f39 , \'ef\'e0\'f0\'ee\'eb\'e5\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2.\'e4\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1 -\'ff\loch\f39 \hich\f39 \'ec\'e0\'ea\'f0\'ee\'f1\loch\f39 \hich\f39 $. \'cd\'e0\'ef\'f0\'e8\'ec\loch\af39\dbch\af31505\hich\f39 \'e5\'f0\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'e8\'f1\'fb -\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'ee\'e9\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'ee\'e9\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 \hich\f39 - IP \'e0\'e4\'f0\'e5\'f1\'ee\'e2\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 , \'e8\'ec\'e5\'fe\'f9\'e8\'f5\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2 -\'e5\loch\f39 \hich\f39 , \'ec\'fb\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'ec\loch\f39 \hich\f39 \'f1\'ee\'e7\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'f2\'e5\'ea\'f1\'f2\'ee\'e2\'ee\'e9\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 IP_list.txt, -\'e2\loch\f39 \hich\f39 \'ed\'e5\'e3\'ee\loch\f39 \hich\f39 \'e2\'ed\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'e7\'e0\'ef\'ff\'f2\'f3\'fe\loch\f39 \hich\f39 (\'e1\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'e5\'eb -\'ee\'e2\loch\f39 \hich\f39 !) \'e2\'f1\'e5\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'fb\'e5\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 IP, \'f2\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 , \'e7\'e0\'e4\'e0 -\'fe\'f9\'e0\'ff\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ef\loch\af39\dbch\af31505\hich\f39 \'ee\loch\af39\dbch\af31505\hich\f39 \'f7\'f2\'e5\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'ff\'f9\'e0\'ff\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 2110,25,110 * 1-5 -\par \hich\af39\dbch\af31505\loch\f39 00:00:00-20:00:00 -\par \loch\af39\dbch\af31505\hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'ed\'e5\'ed\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 allow * $"c:\\3proxy\\IP_list.txt" * 2110,25,110 * 1-5 00:00:00-20:00:00 -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'ec\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'eb\'e5\'e6\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'e8 -\loch\f39 \hich\f39 \'e7\'e0\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'ee\'ec\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\loch\af39\dbch\af31505\hich\f39 \'f1\'ee\'e2\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'e0\loch\f39 \hich\f39 - IP_list.txt \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 monitor "c:\\3proxy\\bin\\IP_list.txt" -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'e0\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'e0\'ff\loch\f39 \hich\f39 \'ee -\'f1\'ee\'e1\'e5\'ed\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 - \'ef\'f0\'e8\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 \'ea\'ee\'ec -\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 monitor \'ec\'fb\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'ec\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ea\'ee\'f0\'f0\'e5\'ea\'f2\'e8\'f0\'ee\'e2\'e0\'f2\'fc\loch\f39 -\hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e1\'f3\'e4\'f3\'f2\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'e8\'ec\'e0\'f2\'fc\'f1 -\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'e5\'f2\'f3\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\loch\af39\dbch\af31505\hich\f39 \'f3\loch\f39 \hich\f39 , -\'ef\'ee\'e4\'ec\'e5\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8\'ec\loch\f39 \hich\f39 \'e2\'e0\'f0\'e8\'e0\'ed\'f2\'ee\'ec\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 -\hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e1\'eb\'ee\'ea\'e8\'f0\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'ee\'ec\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 -\hich\f39 \'ee\'f2\'f1\'eb\'e5\'e6\'e8\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ed\'e0\'eb\'e8\'f7\'e8\'e5\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 . \'dd\'f2\'ee\loch\f39 \hich\f39 -\'e1\'fb\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'ee\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1\'ed\'ee\loch\f39 \hich\f39 . \'cd\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'f3\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff\loch\f39 \hich\f39 \'e5 -\'f1\'f2\'fc\loch\f39 \hich\f39 \'e4\'e2\'e0\loch\f39 \hich\f39 \'e3\'ee\'f2\'ee\'e2\'fb\'f5\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 - \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee -\'f2\'fb\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 ADSL, \'e2\'f2\'ee\'f0\'ee\'e9\loch\f39 \hich\f39 - \'e4\'eb\'ff\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'fb\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'f3\'f1\'ea -\'ee\'f0\'e8\'f2\'e5\'eb\'fc\loch\f39 \hich\f39 \'f1\'ef\'f3\loch\af39\dbch\af31505\hich\f39 \'f2\loch\af39\dbch\af31505\hich\f39 \'ed\'e8\'ea\'ee\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\'e0\loch\f39 \hich\f39 , \'ea\'ee\'ed -\'f4\'e8\'e3\'e8\loch\f39 \hich\f39 \'ee\'f2\'eb\'e8\'f7\'e0\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 . \'cf\'f0\'e8\loch\f39 \hich\f39 \'ed -\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ea\'eb\'fe\'f7\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'e9\loch\f39 \hich\f39 \'ea\'e0\'ed\'e0\'eb\loch\f39 -\hich\f39 \'ff\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'e8\'ec\'e5\'ed\'ee\'e2\'fb\'e2\'e0\'fe\loch\f39 \hich\f39 (\'e8\'eb\'e8\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ed\'ee\'f8\'f3\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'f3\'fe -\loch\f39 \hich\f39 \'ef\'e0\'ef\'ea\'f3\loch\f39 \hich\f39 ) \'e8\'f1\'f5\'ee\'e4\'ed\'fb\'e9\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 , \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'ed\'e5\'e3\'ee\loch\f39 \hich\f39 \'f1\'f2 -\'e0\'e2\'eb\'fe\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'e9\loch\f39 \hich\f39 - \'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e8\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'ed\'e8\'f7\'e5\'e3\'ee\loch\f39 -\hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f3\'f1\'ef\'e5\'e2\'e0\'fe\'f2\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 , \'f2\'e0\'ea\loch\f39 \hich\f39 \'ea\loch\af39\dbch\af31505\hich\f39 \'e0\loch\af39\dbch\af31505\hich\f39 -\'ea\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee\loch\f39 \hich\f39 \'ed\'e8\loch\f39 \hich\f39 \'ee\'f1\'f2\'e0\'ed\'e0\'e2\'eb\'e8\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 , \'ed\'e8 -\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'e0\'f3\'e7\'f3\loch\f39 \hich\f39 . \'ce\'f2\'eb\'e8\'f7\'ed\'e0\'ff\loch\f39 \hich\f39 \'f4\'e8\'f7\'e0 -\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'fe\loch\f39 \hich\f39 \'ed\'e8\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2 -\'e5\'f0\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f2\'e0\'ea\'ee\'e9\loch\f39 \hich\f39 ! \'cd\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'e5\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 : \'fd\'f2\'e0\loch\f39 \hich\f39 - \'f4\'e8\'f7\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e8\'e7\'ec\'e5\'ed\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'e5\'f2\'f3\loch\f39 \hich\f39 \'ed\'e5 -\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ee\'f7\'e5\'f2\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 \'f1\loch\f39 writable. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'e0\loch\f39 \hich\f39 , \'f7\'f3\'f2\'fc\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'e1\'fb\'eb\'e8\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'e4\'e2\'e5\loch\f39 \hich\f39 \'f1\'eb\'f3 -\loch\af39\dbch\af31505\hich\f39 \'e6\'e1\'fb\loch\f39 \hich\f39 - FTP-\'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 SOCKS-\'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 , \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'e5\'ec\'fb\'e5\loch\f39 -\hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\'ec\'e8\loch\f39 -\par -\par \hich\af39\dbch\af31505\loch\f39 ftppr -\par \hich\af39\dbch\af31505\loch\f39 socks -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'ee\loch\f39 \hich\f39 \'f3\'ec\'ee\'eb\'f7\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'ee\'ed\'e8\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'e0\'e2\'eb\'e8\'e2\'e0\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 \'ef\'ee\'f0\'f2\'fb\loch\f39 \hich\f39 21 \'e8\loch\f39 \hich\f39 1080 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee. -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 \'d1\'eb\'f3\'e6\'e1\'e0\loch\f39 \hich\f39 ftppr \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5\'f2\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 "\'ed\'e0\'f1\'f2\'ee\'ff\'f9\'e8\'e9 -\loch\f39 \hich\f39 " FTP-\'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 , \'f1\loch\f39 \hich\f39 \'ef\'ee\'e4\'e4\'e5\'f0\'e6\'ea\'ee\'e9\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'ee\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'e4\'e0\'f0\'f2\'ed\'ee\'e3\'ee -\loch\f39 \hich\f39 \'ed\'e0\'e1\'ee\'f0\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\loch\f39 \hich\f39 \'ef\'f0\'ee\'f2\'ee\'ea\'ee\'eb\'e0\loch\f39 FTP,\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e7\'e0\'e1\'f3\'e4 -\'fc\'f2\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'e2\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 FTP-\'ea\'eb\'e8\'e5\'ed\'f2\'e0\loch\f39 \hich\f39 (\'e2\loch\f39 \hich\f39 \'ec\'ee\'e5 -\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 FAR) \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 192.168.0.1 \'ed\'e0 -\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'f3\loch\f39 \hich\f39 21. \'c0\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'e0\loch\f39 \hich\f39 SOCKS \'ef\'ee\'e7\'e2\'ee\'eb\'e8\'f2\loch\f39 \hich\f39 \'e2\'e0\'ec\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee -\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'e2\'e0\'f8\'e5\'e9\loch\f39 \hich\f39 \'eb\'fe\'e1\'e8\'ec\'ee\'e9\loch\f39 \hich\f39 \'e0\'f1\'fc\'ea\'ee\'e9\loch\f39 \hich\f39 -, \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e5\'e5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2 -\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'f3\loch\f39 SOCKS5,\hich\af39\dbch\af31505\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 192.168.0.1 \'e8\loch\f39 -\hich\f39 \'ef\'ee\'f0\'f2\loch\f39 1080. -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'ee\loch\f39 \hich\f39 ICQ \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f7\'e5\'f0 -\'e5\'e7\loch\f39 \hich\f39 SOCKS, \'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'f1\'ef\'e5\'f6\'e8\'e0\'eb\'fc\'ed\'fb\'e9\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 icqpr. \'cd -\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 -\hich\f39 \'ed\'ee\'ec\'e5\'f0\loch\f39 \hich\f39 ICQ 123456789, \'f2\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 -\'ed\'e0\'ef\'e8\'f1\'e0\'f2\'fc\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth useronly -\par \hich\af39\dbch\af31505\loch\f39 allow 123456789 -\par \hich\af39\dbch\af31505\loch\f39 icqpr 5190 login.icq.com 5190 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ce\'e1\'f0\'e0\'f2\'e8\'f2\'e5\loch\f39 \hich\f39 \'e2\'ed\'e8\'ec\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'ef\'e5 -\'f6\'e8\'e0\'eb\'fc\'ed\'fb\'e9\loch\f39 \hich\f39 \'e2\'e8\'e4\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 useronly. \'d2\'e5\loch\f39 \hich\f39 , \'ea\'ee\'ec\'f3\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2 -\loch\f39 \hich\f39 \'eb\'e5\'ed\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ef\'e8\'f1\'fb\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'ee\'ec\'e5\'f0\'e0\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef -\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 , \'e2\'f2\'ee\'f0\'f3\'fe\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'ef\'e8\'f1\'e0\'f2\'fc\loch\f39 -\hich\f39 \'f2\'e0\'ea\loch\f39 : -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 icqpr, \'f2\'ee\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed -\'f2\'e0\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f1\'ef\'e5\loch\af39\dbch\af31505\hich\f39 \'f6\'e8\'f4\'e8\'f7\'e5\'f1\'ea\'ee\'e9\loch\f39 \hich\f39 . \'cd\'e5\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'f1\'f2\'e0 -\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e3\'e0\'eb\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 \'ab\'c8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\'bb\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'e2\'ee\'f2 -\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'eb\'e0\'e3\'e0\'fe\'f9\'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f3\'ec\'ee\'eb\'f7\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0 -\loch\f39 \hich\f39 login.icq.com \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'ed\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 IP \'ed\'e0\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0 -\'e0.\'ce\'f1\'f2\'e0\'eb\'ee\'f1\'fc\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e8\'e2\'f8\'e8\'e9\'f1\'ff\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f7\'e8\'e9\loch\f39 \hich\f39 \'e2\'e0\'f0\'e8\'e0\'ed -\'f2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 6): -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 service -\par \hich\af39\dbch\af31505\loch\f39 internal 192.16\hich\af39\dbch\af31505\loch\f39 8.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 65536 -\par \hich\af39\dbch\af31505\loch\f39 monitor "c:\\3proxy\\bin\\3proxy.cfg" -\par \hich\af39\dbch\af31505\loch\f39 monitor "c:\\3proxy\\IP_list.txt" -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 r\hich\af39\dbch\af31505\loch\f39 otate 30 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0\pararsid3764488 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 nobandlimin * * * 110 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 24000 * 192.168.0.2,192.168.0.3 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf" -\par \hich\af39\dbch\af31505\loch\f39 nocountin * 192.168.0.4 * 110 * -\par \hich\af39\dbch\af31505\loch\f39 countin "1/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 50 * 192.168.0.2 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "2/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f2\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 80 * 192.168.0.3 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "3/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d1\'e8\'e4\'ee\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 30 * 192.168.0.4 * * * -\par -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168\hich\af39\dbch\af31505\loch\f39 .0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 proxy -\par -\par \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'ce\'d7\'d2\'c0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 2500 smtp.provider\hich\af39\dbch\af31505\loch\f39 .ru 25 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 2110 pop.mail.ru 110 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 3110 pop.yandex.ru 110 -\par \hich\af39\dbch\af31505\loch\f39 pop3p -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 21,1080 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 ftppr -\par \hich\af39\dbch\af31505\loch\f39 socks -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par \hich\af39\dbch\af31505\loch\f39 icqpr -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 admin -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'e5\'ec\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 -\hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'eb\'ee\'e6\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'f3\loch\f39 \hich\f39 , \'e4\'eb\'ff -\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 service. \'cd\'e0\'ef\'ee\'ec\'e8\'ed\'e0\'fe\loch\f39 \hich\f39 , \'f7\'f2 -\'ee\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'ee\'e2\'ea\'e0\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 \'ef\'f0\'ee\'e8\'e7\'e2\'ee\'e4\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 \hich\f39 \'e8 -\'e7\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ed\'ee\'e9\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e8\loch\f39 \hich\f39 Windows \'eb\'e8\'e1\'ee\loch\f39 \hich\f39 \'eb\'fe\loch\af39\dbch\af31505\hich\f39 \'e1\'ee\'e3\'ee\loch\f39 \hich\f39 \'f4 -\'e0\'e9\'eb-\'ec\'e5\'ed\'e5\'e4\'e6\'e5\'f0\'e0\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 3proxy --install -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'e1\'ff\'e7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'fb\loch\f39 \hich\f39 \'e2\'e8\'f1\'e5\'f2\'fc\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'e4\'e0\'f0\'f2\'ed\'fb\'f5\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'e0\'f5\loch\f39 \hich\f39 , \'eb\'fe\'e1\'f3\'fe\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'ed\'e8\'f5\loch\f39 \hich\f39 -\'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'f1\'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e8\'f0\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'e9\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\loch\f39 \hich\f39 \'ee\'ef\'f6\'e8 -\'e5\'e9\loch\f39 \hich\f39 -p\'cd\'ce\'cc\'c5\'d0\loch\f39 \hich\f39 _\'cf\'ce\'d0\'d2\'c0\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 proxy -p8080 -\par \hich\af39\dbch\af31505\loch\f39 ftppr -p2121 -\par \hich\af39\dbch\af31505\loch\f39 admin -p8081 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d5\'ee\'f7\'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'ff\'f1\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0 -\'e0\'f5\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ee\'e4\'e8\'ed\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'ff\loch\f39 \hich\f39 \'f1\'e0\'ec -\loch\f39 \hich\f39 \'ef\'ee\'ed\'ff\'eb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f0\'e0\'e7\'f3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'ed\'e8\'ec\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'ee\'e3\'ee -\loch\f39 \hich\f39 , \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 , \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e7\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'eb\'e5\'ec\'fb\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f3 -\loch\f39 \hich\f39 \'e2\'e0\'f1\loch\f39 \hich\f39 . \'dd\'f2\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 auth strong. \'cf\'f0\'e5\'e4 -\'ef\'ee\'eb\'ee\'e6\'e8\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'f5\'ee\'f7\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea -\loch\f39 \hich\f39 WEB-\'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'e1\'fb\'eb\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e5\'ed\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f1 -\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 192.168.0\hich\af39\dbch\af31505\loch\f39 \hich\f39 .4, \'ef\'f0\'e8\'f7\'e5\'ec\loch\f39 \hich\f39 \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec -\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e0\'f8\'e8\'e2\'e0\'eb\'f1\'ff\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 -\'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'fe\'f9\'e0\'ff\loch\f39 \hich\f39 \'f1\'e5\'ea\'f6\'e8\'ff\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 -\hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth strong -\par \hich\af39\dbch\af31505\loch\f39 allow Administrator 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 deny * -\par \hich\af39\dbch\af31505\loch\f39 admin -\par \loch\af39\dbch\af31505\hich\f39 \'c8\loch\f39 \hich\f39 \'f0\'e0\'e7\'f3\'ec\'e5\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'ef\'f0\'e5\'e6\'e4\'e5\loch\f39 \hich\f39 \'f7\'e5\'ec\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\'f1\'ff -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e5\'e9\loch\f39 \hich\f39 strong, \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e7\'e0\'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff -\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 Administrator: -\par -\par \hich\af39\dbch\af31505\loch\f39 users Administrator:CL:password -\par \loch\af39\dbch\af31505\hich\f39 \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'ef\'ee\'ef\'fb\'f2\'ea\'e5\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0 -\'ed\'e8\'f6\'f3\loch\f39 \hich\f39 WEB-\'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 \hich\f39 \'d1\'e8\'e4\'ee\'f0\'ee\'e2\'e0 -\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e0\'f8\'e8\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8 -\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\loch\af39\dbch\af31505\hich\f39 \'ef\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'ee\'f1\'f2\'fc\'fe\loch\f39 -\hich\f39 \'e7\'e0\'ea\'f0\'fb\'f2\loch\f39 \hich\f39 . \'ca\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 deny * \'e2\'f1\'e5\'e3\'e4\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8\'f1\'f3\'f2\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'ed\'e5\'ff\'e2\'ed\'ee -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e5\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e3\'ee\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e0\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 , \'e8\loch\f39 \hich\f39 -\'e5\'e5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'fb\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 -\'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e5\'e5\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 -\'e7\'e0\'ef\'f0\'e0\'f8\'e8\'e2\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f1\loch\f39 -\hich\f39 \'eb\'fe\'e1\'ee\'e9\loch\f39 \hich\f39 \'ec\'e0\'f8\'e8\'ed\'fb\loch\f39 \hich\f39 , \'f5\'ee\'f2\'ff\loch\f39 \hich\f39 \'ef\'f3\'f1\'f2\'ff\'f2\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'f0\'e0\'e2\'ed\'ee\loch\f39 \hich\f39 -\'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e0\loch\af39\dbch\af31505\hich\f39 \'e4\loch\af39\dbch\af31505\hich\f39 \'f0\'e5\'f1\'e0\loch\f39 \hich\f39 192.168.0.4. \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e6\'e5\loch\f39 -\hich\f39 \'f2\'f0\'e5\'f2\'fc\'ff\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'e5\'e4\'e5\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\loch\f39 \hich\f39 \'f1\'e5\'ea\'f6\'e8 -\'e8\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 allow Administrator * * 80 * 1-5 00:00:00-20:00:00 -\par \loch\af39\dbch\af31505\hich\f39 \'f2\'ee\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e8\'f0\'ee\'e2\'e0\'ed\'e8\'fe\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 -\hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e3\'ee\loch\f39 \hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8 -\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'fa\'ff\'e2\'eb\'e5\'ed\'e8\'e8\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'ff\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\loch\af39\dbch\af31505\hich\f39 \'f2\'e5\'eb\'ff -\loch\f39 Administrator. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'e6\'e4\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 -\hich\f39 , \'ef\'ee\loch\f39 \hich\f39 \'e2\'f1\'e5\'e9\loch\f39 \hich\f39 \'e2\'e8\'e4\'e8\'ec\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 , \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'e5\'f1\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f2\'f0 -\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 , \'e8\'e7\'f0\'e0\'f1\'f5\'ee\'e4\'ee\'e2\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'e8\'ec\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f2\'e5\'ea\'f3\'f9\'e8\'e9\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2 -\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'f2\'e0\'ea -\'f3\'fe\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 , \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'ee\loch\f39 \hich\f39 \'eb\'e8\'f8\'fc\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'e5\'ec -\'f3\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\'f3\loch\f39 \hich\f39 WEB-\'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e8\'f0\'ee\loch\af39\dbch\af31505\hich\f39 \'e2\'e0\'ed\'e8 -\'ff\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'ed\'fb\'ec\'e8\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e0\'ec\'e8\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ee\'ed -\loch\f39 \hich\f39 \'ec\'ee\'e3\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'ec\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e5\'ea\'f3\'f9\'e8\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'ff\loch\f39 -\hich\f39 \'f1\'e2\'ee\'e5\'e3\'ee\loch\f39 \hich\f39 (\'e8\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'f1\'e2\'ee\'e5\'e3\'ee\loch\f39 \hich\f39 !) \'e8\'e7\'f0\'e0\'f1\'f5\'ee\'e4\'ee\'e2\'e0\'ed\'ed\'ee\'e3\'ee\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'ec\'e0\'ea\'f1\'e8\'ec\'e0\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e4\'ee\'ef\'f3\'f1\'f2\'e8\'ec\'ee\'e3\'ee\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd -\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'f3\loch\f39 \hich\f39 admin \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 - \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'f0\'e0\'e7\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'ee\'ec\loch\f39 \hich\f39 \'ef\'ee -\'f0\'f2\'f3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f1\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ea\loch\af39\dbch\af31505\hich\f39 \'eb\'fe\'f7\'ee\'ec\loch\f39 \hich\f39 -s (\'f1\'ee\'ea\'f0\'e0\'f9\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ee -\'f2\loch\f39 \hich\f39 \'f1\'eb\'ee\'e2\'e0\loch\f39 \hich\f39 security), \'e4\'eb\'ff\loch\f39 \hich\f39 \'f7\'e5\'e3\'ee\loch\f39 \hich\f39 \'e4\'ee\'ef\'e8\'f1\'fb\'e2\'e0\'e5\'ec\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8 -\'e3\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'f7\'ea\'e8\loch\f39 : -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par \hich\af39\dbch\af31505\loch\f39 admin -p8081 -s -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ea\'e0\'e6\'e4\'fb\'e9\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\loch\f39 -\hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'ee\'f2\'ea\'f0\'fb\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e5\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\'f3\loch\f39 \hich\f39 - http://192.168.0.1:8081/C \'e8\loch\f39 \hich\f39 \'f3\'e2\'e8\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e0\'ec\loch\f39 \hich\f39 \'f1\'e2\'ee\'fe\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'f3\loch\f39 \hich\f39 . \'c0\loch\f39 -\hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fc\hich\af39\dbch\af31505\loch\f39 \hich\f39 Administrator \'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\'e5\loch\f39 \hich\f39 http://192.168.0.1:8080/C \'ec\'ee\'e6\'e5\'f2\loch\f39 -\hich\f39 \'ef\'ee\'f1\'ec\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'f3\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 . \'cf\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec -\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'e5\'ed\'ed\'e0\'ff\loch\f39 \hich\f39 \'f5\'e8\'f2\'f0\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 : \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2 -\'e5\'eb\'fc\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 IP-\'e0\'e4\'f0\'e5\'f1\'f3\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5 -\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 , \'f2\'ee\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 \'e2\'e8\'e4 -\'e5\'eb\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'e8\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'f1\'e2\'ee\'fe\loch\f39 \hich\f39 \'f1\'f2\'e0\'f2\'e8\'f1\'f2\'e8\'ea\'f3\loch\f39 \hich\f39 , \'ed\'e5\'ee\loch\af39\dbch\af31505\hich\f39 \'e1 -\loch\af39\dbch\af31505\hich\f39 \'f5\'ee\'e4\'e8\'ec\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'e1\'f0\'e0\'f3\'e7\'e5\'f0\'e0\loch\f39 -\hich\f39 (\'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 Internet Explorer) \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 http://192.168.0.1 \'ef\'f0\'ee\'e8\'f1\'f5\'ee\'e4\'e8\'eb\loch\f39 \hich\f39 \'e1\'e5\'e7 -\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 . \'c8\'ed\'e0\'f7\'e5\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'e0\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'e0 -\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'e0\loch\f39 \hich\f39 admin \'f3\'e2\'e8\'e4\'e8\'f2\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'f1\'e0\'ec\'ee\'e3\'ee\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 , -\'f2.\'ea\loch\f39 \hich\f39 . \'ea\'eb\'e8\'e5\'ed\'f2\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'f2\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'ed\'e5\'e9\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1 -\'e8\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ee\'f2\'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'ed\'e5\'ef\'f0\'e0\'e2\'e8\loch\af39\dbch\af31505\hich\f39 \'eb\loch\af39\dbch\af31505\hich\f39 \'fc\'ed\'ee\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c8\'e7\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'e5\'e4\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'ee\'e2\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 \'ff\'f1\'ed -\'ee\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'ff\loch\f39 \hich\f39 strong \'ef\'f0\'e5\'e4\'ef\'ee\'eb\'e0\'e3\'e0\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e5\'f0\'ea\'f3\loch\f39 \hich\f39 -\'ef\'ee\loch\f39 \hich\f39 \'ed\'e0\'e8\'e1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'ee\'ec\'f3\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'f3\loch\f39 \hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'ee\'e2\loch\f39 \hich\f39 : IP \'f0\'e0\'e1 -\'ee\'f7\'e5\'e9\loch\f39 \hich\f39 \'f1\'f2\'e0\'ed\'f6\'e8\'e8\loch\f39 \hich\f39 , \'e8\'ec\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'e0\'f0\'ee\'eb\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 -\hich\f39 , \'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'f5\'ee\'f1\'f2\'ee\'e2\loch\f39 \hich\f39 , \'ef\'ee\'f0\'f2\'ee\'e2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2.\'e4 -\loch\f39 \hich\f39 ., \'e2\loch\f39 \hich\f39 \'ee\'f2\'eb\'e8\'f7\'e8\'e5\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 iponly, \'ea\'ee\loch\af39\dbch\af31505\hich\f39 \'e3\'e4\'e0 -\loch\f39 \hich\f39 \'e8\'ec\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e5\'f0\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 - \'ed\'ee\loch\f39 \hich\f39 \'e7 -\'e2\'e5\'e7\'e4\'ee\'f7\'ea\'f3\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'ed\'e8\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed -\'e4\'e5\loch\f39 \hich\f39 allow \'ec\'fb\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'e2\'fb\'ed\'f3\'e6\'e4\'e5\'ed\'fb\loch\f39 \hich\f39 \'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 -\hich\f39 \'f1\'ee\'e2\'ec\'e5\'f1\'f2\'e8\'ec\'ee\'f1\'f2\'e8\loch\f39 ! -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c0\loch\f39 \hich\f39 \'f2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'ef\'ee\'eb\'ee\'e6\'e8\'ec\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee -\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f0\'ff\'e4\'f3\loch\f39 \hich\f39 \'ef\'f0\'e8\'f7\'e8\'ed\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'fb\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'ee\'e1\'f9\'e5\'e8\'e7\'e2\'e5\'f1\'f2\'ed\'fb\'e9\loch\f39 ww -\hich\af39\dbch\af31505\loch\f39 \hich\f39 w.anekdot.ru. \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 nsrecord: -\par -\par \hich\af39\dbch\af31505\loch\f39 nsrecord www.anekdot.ru 127.0.0.3 -\par \loch\af39\dbch\af31505\hich\f39 \'f2\'e5\'ec\loch\f39 \hich\f39 \'f1\'e0\'ec\'fb\'ec\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ed\'e0\'ef\'f0\'e0\'e2\'eb\'ff\'e5\'ec\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'fb -\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e0\'ed\'e5\'ea\'e4\'ee\'f2\'e0\'ec\'e8\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'ee\'ea\'e0\'eb\'fc\'ed\'fb\'e9\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1 -\loch\f39 \hich\f39 . \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'fd\'f2\'f3\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5 -\'e5\loch\f39 \hich\f39 \'e8\'e7\'ee\'f9\'f0\'e5\'ed\'ed\'ee\'ec\loch\f39 \hich\f39 \'e2\'e0\'f0\'e8\'e0\'ed\'f2\'e5\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 , -\par -\par \hich\af39\dbch\af31505\loch\f39 nsrecord www.ane\hich\af39\dbch\af31505\loch\f39 kdot.ru 87.250.251.11 -\par \loch\af39\dbch\af31505\hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'e0\loch\f39 \hich\f39 www.anekdot.ru \'ef\'e5\'f0\'e5\'ed\'e0\'ef\'f0\'e0\'e2\'eb\'ff\'f2\'fc\loch\f39 \hich\f39 -\'ed\'e0\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\loch\f39 \hich\f39 www.yandex.ru. \'c2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'ff\'ed\'e4\'e5\'ea\'f1\'e0\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 \hich\f39 -\'e1\'fb\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ed\'e0\'ef\'f0\'e0\'e2\'eb\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'ed\'e0\loch\f39 -\hich\f39 \'ea\'ee\'f0\'ef\'ee\'f0\'e0\'f2\'e8\'e2\'ed\'fb\'e9\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'ef\'f0\'ee\'f7\'e5\'ec\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 0.6 \'ef\'ee\'ff\'e2\'e8\'eb\'e0\'f1\'fc\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2 -\'fc\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1\'ed\'ee\loch\f39 \hich\f39 \'f3\'ef\'f0\'e0\'e2\'eb\'ff\'f2\'fc\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'ee\loch\af39\dbch\af31505\hich\f39 \'ec\loch\f39 \hich\f39 \'e4 -\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'fb\loch\f39 \hich\f39 . \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc -\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'f5\'ee\'f0\'ee\'f8\'ee\loch\f39 \hich\f39 \'e7\'ed\'e0\'ea\'ee\'ec\'f3\'fe\loch\f39 \hich\f39 \'ed\'e0\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 -\hich\f39 deny \'f1\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'f8\'e0\'e1\'eb\'ee\'ed\'ee\'e2\loch\f39 \hich\f39 , \'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 deny * * www.anekdot.ru * -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'e1\'e5\'e7\'f3\'f1\'eb\'ee\'e2\'ed\'ee\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5\'f9\'e0\'e5\'f2\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2 -\loch\f39 }{\field{\*\fldinst {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "http://www.anekdot.ru/"}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid3764488 -{\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4600000068007400740070003a002f002f007700770077002e0061006e0065006b0064006f0074002e00720075002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}} -}{\fldrslt {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\ul\cf9\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 www.anekdot.ru}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 -\par -\par \hich\af39\dbch\af31505\loch\f39 deny * * anekdot* * -\par -\par }\pard \ltrpar\ql \fi-360\li360\ri0\nowidctlpar\tx360\wrapdefault\hyphpar0\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af1\afs18 \ltrch\fcs0 \f1\fs18\kerning1\insrsid11355186\charrsid3764488 -\tab }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e7\'e0\'ef\'f0\'e5\'f9\'e0\'e5\'f2\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'fb -\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'ed\'e0\'e7\'e2\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 \'ea\'ee\'f2\'ee\'f0\'fb\'f5\loch\f39 \hich\f39 \'e2\'f1\'f2\'f0\'e5\'f7\'e0\'e5\'f2\'f1\'ff\loch\f39 anekdot. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'ef\'f0\'ee\'f7\'e5\'ec\loch\f39 \hich\f39 , \'ef\'f0\'ee\'e4\'e2\'e8\'ed\'f3\'f2\'fb\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e8\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\'f2\loch\f39 -\hich\f39 \'ee\'e1\'ee\'e9\'f2\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'f2\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5\'f2\loch\f39 \hich\f39 , \'ee\'e1\'f0\'e0\'f9\'e0\'ff\'f1\'fc\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'f3\loch\f39 -\hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'e5\'e3\'ee\loch\f39 \hich\f39 IP \'e8\'eb\'e8\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'ff\loch\f39 \hich\f39 \'e0\'ed\'ee\'ed\'e8\'ec\'ed\'fb\'e5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'fb. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d3\loch\f39 \hich\f39 \'f1\'e5\'e1\'ff\loch\f39 \hich\f39 \'ff\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'fe\loch\f39 \hich\f39 \'f6\'e5\'eb\'fb\'e9\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 -\hich\f39 \'f8\'e0\'e1\'eb\'ee\'ed\'ee\'e2,\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 , \'ea\'ee\'ec\'f3-\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\'e3\'ee\'e4\'e8\'f2\'f1\'ff\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 -deny * * *sex*,*porn*,*adult*,*xxx*,*gamepark*,*vagina*,*mpp3*,*seks*,*virgin*,*pipisk*,*pastushka*,*1xuk.ru*,*teens*,*zaycev*,*lubovmorkov*,*mp3*,*bannerbank*,*yadro*,*dosug.nu*,*lesbo*,*lesbian*,*eroti*,*viporg.ru*,*intim* -\hich\af39\dbch\af31505\loch\f39 -,*erohost*,*eross*,*teenfant*,*nudist*,*pimpserver*,*banner*,*ads.sup.com*,*rb.mail.ru*,*counter.rambler.ru*,*carol.ru*,*video.mail.ru*,*pelotka*,*akadostream*,*media.kino-govno.com*,*odnoklassniki.ru*,*vkontakte.ru*,*zhuki.mail.ru*,*fishki.net*,*dofiga.n -\hich\af39\dbch\af31505\loch\f39 e\hich\af39\dbch\af31505\loch\f39 t* -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d7\'f2\'ee\'e1\'fb\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e7\'e0\'e3\'f0\'ee\'ec\'ee\'e6\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e4\'eb\'e8\'ed\'ed\'fb\'ec\'e8 -\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e0\'ec\'e8\loch\f39 \hich\f39 , \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 \hich\f39 include \'e8 -\loch\f39 \hich\f39 \'ec\'e0\'ea\'f0\'ee\'f1\loch\f39 \hich\f39 $. \'cd\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'ef\'f0\'e5\'e4\'fb\'e4\'f3\'f9\'e0\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 \'ec\'ee\'e3\'eb\'e0 -\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par \hich\af39\dbch\af31505\loch\f39 deny * * $c:\\3proxy\\ban.txt -\par -\par \loch\af39\dbch\af31505\hich\f39 \'e3\'e4\'e5\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 ban.txt \hich\f39 \emdash \loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'f2\'e5\'ea\'f1\'f2\'ee\'e2\'fb\'e9\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb -\loch\f39 \hich\f39 , \'f1\'ee\'e4\'e5\'f0\'e6\'e0\'f9\'e8\'e9\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5\'f2\'ed\'fb\'f5\loch\f39 \hich\f39 \'f0\'e5\'f1\'f3\'f0\'f1\'ee\'e2\hich\af39\dbch\af31505\loch\f39 -\hich\f39 (\'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'e7\'e0\'ef\'ff\'f2\'f3\'fe\loch\f39 \hich\f39 , \'e1\'e5\'e7\loch\f39 \hich\f39 \'ef\'f0\'ee\'e1\'e5\'eb\'ee\'e2\loch\f39 ) -\par -\par \loch\af39\dbch\af31505\hich\f39 \'eb\'e8\'e1\'ee}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'f2\'e0\'ea}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 include c\\3proxy\\ban\-include.txt -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e3\'e4\'e5\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 ban_include.txt \'f1\'ee\'e4\'e5\'f0\'e6\'e0\'eb\loch\f39 \hich\f39 \'e1\'fb -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'e5\'e1\'e5\loch\f39 \hich\f39 \'e2\'f1\'fe\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'f3\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'e5 -\'f2\'e0\'ec\'e8. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c6\'e5\'eb\'e0\'fe\'f9\'e8\'e5\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\'f2\loch\f39 \hich\f39 \'ed\'e0\'e9\'f2\'e8\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e8\loch\f39 \hich\f39 \'e1\'e0\'ed-\'eb\'e8\'f1\'f2\'ee\'e2 -\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'e0\'e4\'e0\'ef\'f2\'e8\'f0\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\'f3 -\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 3proxy, \'e1\'eb\'e0\'e3\'ee\loch\f39 \hich\f39 \'f7\'f2\'ee\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'f0\'e0\'e7\'ec\'e5\'f0\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 \'ed\'e5\'f2\loch\f39 \hich\f39 . \'d2\'e0\'ea\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ed\'e5 -\'f2\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e9\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'fb\loch\f39 \hich\f39 , \'e2\'ea\'eb\'fe\'f7\'e5\'ed\'ed\'fb\'e5\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 -\hich\f39 include. \'cd\'e0\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'fb\loch\f39 \hich\f39 , \'e2\'ea\'eb\'fe\'f7\'e5\'ed\'ed\'fb\'e5\loch\f39 \hich\f39 \'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'ec\'e0\'ea\'f0\'ee\'f1\loch\f39 \hich\f39 $, \'f1\'f3\'f9 -\'e5\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 64 \'ea\'e8\'eb\'ee\'e1\'e0\'e9\'f2\'e0. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'eb\'ff\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1\'f1\'f2\'e2\'e0\loch\f39 \hich\f39 \'e4\'e0\'eb\'fc\'ed\'e5\'e9\'f8\'e5\'e3\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'ea -\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'e1\'e8\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'f7\'e5\'f1\'ea\'e8\'e5\loch\f39 \hich\f39 \'f0\'e0\'e7\'e4\'e5\'eb\'fb -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'ef\'ee\'eb\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec\'ec\'e5\'ed\'f2\'e0\'f0\'e8\'ff\'ec\'e8\loch\f39 \hich\f39 . \'df\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 -\hich\f39 \'e4\'e5\'eb\'e0\'fe\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef\'ee\'ec\'ee\'f9\'fc\loch\f39 \hich\f39 \'f1\'e8\'ec\'e2\'ee\'eb\'e0\loch\f39 \hich\f39 #. \'cd\'e0\'ef\'ee\'ec\'ed\'fe\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 -\hich\f39 \'eb\'fe\'e1\'e0\'ff\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e0\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'ed\'e0\'f7\'e8\'ed\'e0\'fe\'f9\'e0\'ff\'f1\'ff\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'ef\'f0\'ee -\'e1\'e5\'eb\'e0\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f1\'e8\'ec\'e2\'ee\'eb\'e0\loch\f39 \hich\f39 #, \'e2\'ee\'f1\'ef\'f0\'e8\'ed\'e8\'ec\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'ee -\'ec\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ea\'ee\'ec\'ec\'e5\'ed\'f2\'e0\'f0\'e8\'e9\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ee\'ea\'ee\'ed\'f7 -\'e0\'f2\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 "\'e2\'fb\'eb\'e8\'e7\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 " \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 -\'f2\'e0\'ea\loch\f39 \hich\f39 (\'e2\'e5\'f0\'f1\'e8\'ff\loch\f39 7):\hich\af39\dbch\af31505\loch\f39 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ce\'c1\'d9\'c8\'c5}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'c0\'d0\'c0\'cc\'c5\'d2\'d0 -\'db}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 service -\par \hich\af39\dbch\af31505\loch\f39 internal 192.168.0.1 -\par \hich\af39\dbch\af31505\loch\f39 external 211.80.11.12 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.100.1 -\par \hich\af39\dbch\af31505\loch\f39 nserver 213.153.101.1 -\par \hich\af39\dbch\af31505\loch\f39 nscache 655\hich\af39\dbch\af31505\loch\f39 36 -\par \hich\af39\dbch\af31505\loch\f39 deny * * anekdot* *monitor "c:\\3proxy\\bin\\3proxy.cfg" -\par \hich\af39\dbch\af31505\loch\f39 monitor "c:\\3proxy\\IP_list.txt" -\par \hich\af39\dbch\af31505\loch\f39 logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r" -\par \hich\af39\dbch\af31505\loch\f39 log c:\\3proxy\\logs\\3proxy.log D -\par \hich\af39\dbch\af31505\loch\f39 rotate 30 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0\pararsid3764488 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 -archiver }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \hich\af39\dbch\af31505\loch\f39 rar \loch\af39\dbch\af31505\hich\f39 \'93\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "c:\\Program Files\\WinRAR\\rar.exe}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'94\loch\af39\dbch\af31505\hich\f39 \'94}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid3764488\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 a -df -inul %A %F -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 # \'c7\'c0\'c4\'c0\'c5\'cc\loch\f39 \hich\f39 \'cf\'ce\'cb\'dc\'c7\'ce\'c2\'c0\'d2\'c5\'cb\'c5\'c9\loch\f39 \hich\f39 , \'ce\'c3\'d0\'c0\'cd\'c8\'d7\'c5\'cd\'c8\'df\loch\f39 \hich\f39 \'d1\'ca\'ce\'d0\'ce\'d1 -\'d2\'c8\loch\f39 \hich\f39 \'c8\loch\f39 \hich\f39 \'d1\'d7\'c5\'d2\'d7\'c8\'ca\'c8 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 users Administrator:CL:password -\par \hich\af39\dbch\af31505\loch\f39 nobandlimin * * * 110 -\par \hich\af39\dbch\af31505\loch\f39 bandli\hich\af39\dbch\af31505\loch\f39 min 24000 * 192.168.0.2,192.168.0.3 -\par \hich\af39\dbch\af31505\loch\f39 bandlimin 48000 * 192.168.0.4 -\par \hich\af39\dbch\af31505\loch\f39 bandlimout 24000 * -\par \hich\af39\dbch\af31505\loch\f39 counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf" -\par \hich\af39\dbch\af31505\loch\f39 nocountin * 192.168.0.4 * 110 * -\par \hich\af39\dbch\af31505\loch\f39 countin "1/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8\'e2\'e0\'ed\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 50 * 192.168.0.2 * * * -\par \hich\af39\dbch\af31505\loch\f39 countin "2/}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'e5\'f2\'f0\'ee\'e2}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 " M 80 * 192.168.0.3 * * * -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 countin "3/\'d1\'e8\'e4\'ee\'f0\'ee\'e2\loch\f39 " M 30 * 192.168.0.4 * * * -\par -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 # \'d0\'c0\'c7\'c4\'c0\'c5\'cc\loch\f39 WEB -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * * *sex*,*porn*,*adul\hich\af39\dbch\af31505\loch\f39 -t*,*xxx*,*gamepark*,*vagina*,*mpp3*,*seks*,*virgin*,*pipisk*,*pastushka*,*1xuk.ru*,*teens*,*zaycev*,*lubovmorkov*,*mp3*,*bannerbank*,*yadro*,*dosug.nu*,*lesbo*,*lesbian*,*eroti*,*viporg.ru*,*intim*,*erohost*,*eross*,*teenfant*,*nudist*,*pimpserver*,*banne -\hich\af39\dbch\af31505\loch\f39 r\hich\af39\dbch\af31505\loch\f39 -*,*ads.sup.com*,*rb.mail.ru*,*counter.rambler.ru*,*carol.ru*,*video.mail.ru*,*pelotka*,*akadostream*,*media.kino-govno.com*,*odnoklassniki.ru*,*vkontakte.ru*,*zhuki.mail.ru*,*fishki.net*,*dofiga.net* -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.4 * * * 1-5 09:00:00-18:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow *\hich\af39\dbch\af31505\loch\f39 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59 -\par \hich\af39\dbch\af31505\loch\f39 proxy \hich\f39 \endash \loch\f39 a -t -\par -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d0\'c0\'c7\'c4\'c0\'c5\'cc}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'ce\'d7\'d2\'d3}{ -\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 deny * 192.168.200.4 *\hich\af39\dbch\af31505\loch\f39 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00 -\par \hich\af39\dbch\af31505\loch\f39 allow * $"c:\\3proxy\\IP_list.txt" * 3110,25,110 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 25 smtp.provider.ru 25 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 2110 pop.mail.ru 110 -\par \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 3110 pop.yandex.ru 110 -\par -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 # }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d0\'c0\'c7\'c4\'c0\'c5\'cc}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 FTP }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c8}{\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c0\'d1 -\'dc\'ca\'d3}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * 192.168.0.2,192.168.0.3 * 2110,25,110 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 ftppr -\par \hich\af39\dbch\af31505\loch\f39 socks -\par -\par \hich\af39\dbch\af31505\loch\f39 flu\hich\af39\dbch\af31505\loch\f39 sh -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 icqpr -\par -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 # \'c0\'c4\'cc\'c8\'cd\'c8\'d1\'d2\'d0\'c0\'d2\'c8\'c2\'cd\'db\'c9\loch\f39 \hich\f39 \'c4\'ce\'d1\'d2\'d3\'cf -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth strong -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 allow Administrator 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00 -\par \hich\af39\dbch\af31505\loch\f39 admi\hich\af39\dbch\af31505\loch\f39 n -\par -\par \hich\af39\dbch\af31505\loch\f39 flush -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par \hich\af39\dbch\af31505\loch\f39 admin -p8081 -s -\par \hich\af39\dbch\af31505\loch\f39 dnspr -\par -\par \hich\af39\dbch\af31505\loch\f39 end -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 # \'ca\'ce\'cd\'c5\'d6\loch\f39 \hich\f39 \'ca\'ce\'cd\'d4\'c8\'c3\'c0 -\par \hich\af39\dbch\af31505\loch\f39 ############################################################### -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ee\'e3\'eb\'e0\'f1\'e8\'f2\'e5\'f1\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'ed\'e0\'ec\'ed\'ee\'e3\'ee\loch\f39 -\hich\f39 \'e8\'ed\'f4\'ee\'f0\'ec\'e0\'f2\'e8\'e2\'ed\'e5\'e5\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'e5\'e3\loch\af39\dbch\af31505\hich\f39 \'f7\'e5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'ee\'f1\'ef\'f0\'e8\'ff\'f2\'e8\'e8 -\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'eb\'fe\'f7\loch\f39 \hich\f39 -\'e0\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'ef\'ee\'e7\'e2\'ee\'eb\'ff\'e5 -\'f2\loch\f39 \hich\f39 \'f1\'ea\'f0\'fb\'f2\'fc\loch\f39 \hich\f39 \'e2\'ed\'f3\'f2\'f0\'e5\'ed\'ed\'e8\'e9\loch\f39 \hich\f39 IP \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'f7\'e5\'ec\loch\f39 -\hich\f39 \'eb\'e5\'e3\'ea\'ee\loch\f39 \hich\f39 \'f3\'e1\'e5\'e4\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 \hich\f39 , \'e7\'e0\'e9\'e4\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 2ip.ru +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +halit_at_mail_dot_ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1077\'e5\u1084\'ec\u1100\'fc \u1089\'f1\u1083\'eb\u1086\'ee\u1077\'e5\u1074\'e2 \u1084\'ec\u1072\'e0\u1090\'f2\u1088\'f0\u1077\'e5\u1096\'f8\u1082\'ea\u1080\'e8, \u1080\'e8\u1083\'eb\u1080\'e8 \u1053\'cd\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0 3proxy \u1076\'e4\u1083\'eb\u1103\'ff \u1095\'f7\u1072\'e0\u1081\'e9\u1085\'ed\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +(\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 1.}{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1033\loch\f6 +4}{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +, \u1080\'e8\u1089\'f1\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff \u1080\'e8 \u1076\'e4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1077\'e5\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff, \u1084\'ec\u1072\'e0\u1081\'e9, 2015 \u8212\'97 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1077\'e5 }{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1033\loch\f6 +c }{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1081\'e9 \u1085\'ed\u1072\'e0 }{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1033\loch\f6 +mail.ru }{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +\u1080\'e8 }{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1033\loch\f6 +yandex.ru}{\cf1\b\kerning1\dbch\af10\langfe1025\afs18\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +) } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\b\kerning1\dbch\af12\langfe1049\dbch\af10\afs18\alang1025\ab\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +(\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 1.3, \u1080\'e8\u1089\'f1\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff \u1080\'e8 \u1076\'e4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1077\'e5\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff, \u1084\'ec\u1072\'e0\u1088\'f0\u1090\'f2, 2010 \u8212\'97 }{\b\kerning1\dbch\af12\langfe1049\dbch\af10\afs18\alang1025\ab\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +\u1076\'e4\u1086\'ee\u1073\'e1\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed }{\b\kerning1\dbch\af12\langfe1049\dbch\af10\afs18\alang1025\ab\rtlch \ltrch\loch\fs18\lang1033\loch\f6 +FAQ}{\b\kerning1\dbch\af12\langfe1049\dbch\af10\afs18\alang1025\ab\rtlch \ltrch\loch\fs18\lang1049\loch\f6 +) } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'eb\'e8\loch\f39 \hich\f39 \'ed\'e5\'ee\'e1\'ff\'e7\'e0\'f2\'e5\'eb\'fc\'ed\'f3\'fe\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed -\'e4\'f3\loch\f39 \hich\f39 end. \'c2\'f1\'e5\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ed\'e0\'f5\'ee\'e4\'e8\'f2\'f1\'ff\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ed\'e5\'e5\loch\f39 \hich\f39 , \'f1\'e5\'f0\'e2\'e5 -\'f0\'ee\'ec\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 . \'ca\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 en\hich\af39\dbch\af31505\loch\f39 \hich\f39 d - \'fd\'f2\'ee\loch\f39 -\hich\f39 \'f1\'e2\'ee\'e5\'e3\'ee\loch\f39 \hich\f39 \'f0\'ee\'e4\'e0\loch\f39 \hich\f39 \'e7\'ed\'e0\'ea\loch\f39 \hich\f39 \'e3\'eb\'ee\'e1\'e0\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 , \'e4\'ee\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e0\loch\f39 -\hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'ea\'ee\'ec\'ec\'e5\'ed\'f2\'e0\'f0\'e8\'ff\loch\f39 \hich\f39 . \'c1\'fb\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'e8\'ed\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'f3\'e4\'ee\'e1\'ed\'ee\loch\f39 -\hich\f39 \'ee\'f2\'ea\'eb\'fe\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'f3\'fe\loch\f39 \hich\f39 \'f7\'e0\'f1\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 -\'ef\'ee\'f1\'f2\'e0\'e2\'e8\'e2\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'e4\loch\f39 \hich\f39 \'ed\'e5\'e9\loch\f39 \hich\f39 \'fd\'f2\'f3\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 . -\par \loch\af39\dbch\af31505\hich\f39 \'ca\'f0\'ee\'ec\'e5\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'eb -\'e8\loch\f39 \hich\f39 \'ea\'fd\'f8\'e8\'f0\'f3\'fe\'f9\'e8\'e9\loch\f39 \hich\f39 dns \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 dnspr, \'f2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'f1\'ea\'e8\'f5\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ea\'ee\'ec\'ef\'fc\'fe\'f2\'e5\'f0\'e0\'f5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e9\'ea\'e0\'f5\loch\f39 \hich\f39 \'f1\'e5 -\'f2\'e8\loch\f39 \hich\f39 \'ed\'e0\'e7\'ed\'e0\'f7\'e8\'f2\'fc\loch\f39 \hich\f39 IP \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 DNS \'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 -. -\par \loch\af39\dbch\af31505\hich\f39 \'d0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec\loch\f39 \hich\f39 \'f2\'e5\'ef\'e5\'f0\'fc\loch\f39 \hich\f39 \'ed\'e5\'f0\'e5\'e4\'ea\'e8\'e9\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e9\loch\f39 \hich\f39 , \'ea\'ee\'e3\'e4 -\'e0\loch\f39 \hich\f39 \'ed\'f3\'e6\'ed\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed\'e5\'f2\loch\f39 \hich\f39 , \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'e2\'e0\'e9 -\'e4\'e5\'f0\'e0\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\loch\f39 \hich\f39 , \'f2.\'e5\loch\f39 \hich\f39 . \'f1\'eb\'f3\'f7\'e0\'e9\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\'f1\'f2\'ee\'ff\'f9\'e5\'e3\'ee -\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 . \'ca\'f0\'ee\'ec\'e5\loch\f39 \hich\f39 \'f2\'ee\'e3\'ee\loch\f39 \hich\f39 , \'fd\'f2\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'e8\'e3\'ee\'e4\'e8\'f2 -\'fc\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\loch\af39\dbch\af31505\hich\f39 \'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 -\'f7\'e5\'f0\'e5\'e7\loch\f39 \hich\f39 \'f3\'f1\'ea\'ee\'f0\'e8\'f2\'e5\'eb\'fc\loch\f39 \hich\f39 \'f1\'ef\'f3\'f2\'ed\'e8\'ea\'e0\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'fd\'f2\'ee\loch\f39 \hich\f39 \'e1\'fb\'eb\'ee\loch\f39 -\hich\f39 \'f3\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1 -\'e2\'ff\'e7\'ea\'e0\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ed\'e0\'ef\'f0\'e0\'e2\'eb\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 parent \'e8\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 allow. \'d0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec -\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'ea\'ee\'e3\'e4\'e0\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f9\'e5\'ed\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'eb\'ee\'ea\'e0\'eb\'fc -\'ed\'ee\'ec\loch\f39 \hich\f39 \'f5\'ee\'f1\'f2\'e5\loch\f39 \hich\f39 127.0.0.1, \'ef\'ee\'f0\'f2\loch\f39 3128 \hich\f39 \emdash \loch\f39 \hich\f39 \'f2\'e8\'ef\'e8\'f7\'ed\'fb\'e9\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e9\loch\f39 \hich\f39 -\'e4\'eb\'ff\loch\f39 \hich\f39 \'f3\'f1\'ea\'ee\'f0\'e8\'f2\'e5\'eb\'ff\loch\f39 \hich\f39 \'f1\'ef\'f3\'f2\'ed\'e8\loch\af39\dbch\af31505\hich\f39 \'ea\loch\af39\dbch\af31505\hich\f39 \'ee\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'ed -\'e5\'f2\'e0\loch\f39 \hich\f39 . \'c2\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'e5\'e9\'f8\'e8\'e9\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e1 -\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'e3\'eb\'ff\'e4\'e5\'f2\'fc\loch\f39 \hich\f39 \'f2\'e0\'ea\loch\f39 : -\par -\par \hich\af39\dbch\af31505\loch\f39 fakeresolve -\par \hich\af39\dbch\af31505\loch\f39 auth iponly -\par \hich\af39\dbch\af31505\loch\f39 allow * -\par \hich\af39\dbch\af31505\loch\f39 parent 1000 http 127.0.0.1 3128 -\par \hich\af39\dbch\af31505\loch\f39 proxy -p8080 -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 fakeresolve, \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'ec\'e0\'ff -\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e8\'ec\'e5\'ed\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'eb\'f3\'f7\'e0\'e5\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ed\'e0\'ef\'f0 -\'e0\'e2\'eb\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'ee\'e2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\'f1\'f2\'ee\'ff\'f9\'e8\'e9\loch\f39 \hich\f39 - \'ef\'f0\'ee\'ea\'f1\'e8. -\par -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e5\'ee\'e1\'f5\'ee\'e4\'e8\'ec\'ee\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'f1\'eb\'ee\'e2\'e8\'e5 -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'e8\'e2\'e5\'e4\'e5\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'e2\'fb\'f8\'e5\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e1\'eb\'e8\'e7\'ee -\'ea\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f2\'ee\'ec\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ff\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'fe\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'f4\'e8\'f1\'e5 -\loch\f39 \hich\f39 , \'e7\'e0\loch\f39 \hich\f39 \'e8\'f1\'ea\'eb\'fe\'f7\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 \'ea\'ee\'eb\'e8\'f7\'e5\'f1\'f2\'e2\'e0\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 \'e8 -\loch\f39 \hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'f5\loch\f39 \hich\f39 \'f1\'ef\'e5\'f6\'e8\'f4\'e8\'f7\'ed\'fb\'f5\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\'ee\'e2\loch\f39 \hich\f39 . \'cf\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec -\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'e8\'ec\'e5\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e8\'e4\'f3\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'f7\'e0\'f1\'f2\'fc\loch\f39 \hich\f39 \'f4\'f3\'ed\'ea -\'f6\'e8\'e9\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'f0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'e0\'f5\loch\f39 \hich\f39 , -\'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e2\'e5\'f0\'f1\'e8\'e8\loch\f39 \hich\f39 0.6, \'f3\'f2\'ee\'f7\'ed\'e8\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 -\'ea\'ee\'ed\'ea\'f0\'e5\'f2\'ed\'fb\'ec\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\'ec\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e2\loch\f39 changelog: http://3proxy.ru/current/Changelog.txt -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'ef\'f0\'e8\'e7\'ed\'e0\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'ec\'fb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f0\'e0\'f1\'f1\'ec\'ee -\'f2\'f0\'e5\'eb\'e8\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2\'f0\'e5\'f2\'e8\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'fb\'f5\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e5\'ea\loch\f39 \hich\f39 -\'f1\'e5\'f0\'e2\'e5\'f0\'e0\loch\f39 \hich\f39 . \'c5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'fb\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\loch\af39\dbch\af31505\hich\f39 \'e0 -\'ed\'e4\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'e2\'e0\'ec\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\'f2\loch\f39 \hich\f39 \'ef\'ee\'ed\'e0\'e4\'ee\'e1\'e8\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 - dialer, maxconn, system, i, -\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'ee\'f1\'f2\'e0\'eb\'e8\'f1\'fc\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e5\'ed\'ed\'fb\'ec\'e8\loch\f39 \hich\f39 \'e2\'ee\'ee\'e1\'f9\'e5\loch\f39 \hich\f39 , -\'e4\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f0\'e0\'e7\'ed\'ee\'ee\'e1\'f0\'e0\'e7\'e8\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'ec\'ee\'e7\'ec\'ee\'e6\'ed\'fb\'f5\loch\f39 \hich\f39 \'f1\'ee\'f7\'e5\'f2\'e0\'ed\'e8\'e9\loch\f39 \hich\f39 \'f0 -\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\loch\f39 \hich\f39 \'ed\'e0\'ec\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e1\'ee\'e3\'e0\'f7\'e5\loch\f39 \hich\f39 . \'cd\'ee\loch\f39 \hich\f39 \'ff\loch\f39 -\hich\f39 \'e8\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'e2\'e8\'eb\loch\f39 \hich\f39 \'f1\'e5\'e1\'e5\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'f7\'f3\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5-\'ec -\'e5\'ed\'e5\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'ed\'ee\'e5\loch\f39 \hich\f39 \'ee\'ef\'e8\'f1\'e0\'ed\'e8\'e5\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\loch\af39\dbch\af31505\hich\f39 \'e3\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 , \'ee -\'e3\'f0\'e0\'ed\'e8\'f7\'e8\'e2\'f8\'e8\'f1\'fc\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'f1\'ea\'f0\'ee\'ec\'ed\'ee\'e9\loch\f39 \hich\f39 - \'f0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\loch\f39 -\hich\f39 \'f0\'ff\'e4\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'ee\'e2\loch\f39 \hich\f39 , \'ef\'ee\'f1\'f2\'f0\'ee\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'ea\'e0\'ea\loch\f39 \hich\f39 \'ec\'e0\'f2\'f0\'e5\'f8\'ea\'e0\loch\f39 \hich\f39 - -\'ee\'f2\loch\f39 \hich\f39 \'f1\'e0\'ec\'ee\'e3\'ee\loch\f39 \hich\f39 \'ec\'e0\'eb\'e5\'ed\'fc\'ea\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'e4\'ee\loch\f39 \hich\f39 \'e4\'ee\'f1 -\'f2\'e0\'f2\'ee\'f7\'ed\'ee\loch\f39 \hich\f39 \'f1\'eb\'ee\'e6\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 "\'ef\'f0\'e0\'e2\'e8\'eb\'fc\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 " - \'ea\'ee\'ed\'f4\'e8\'e3\loch\f39 \hich\f39 , \'f7\'f2\'ee -\'e1\'fb\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'e5\loch\f39 \hich\f39 \'ef\'ee\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'fb\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'f6\'e8 -\'ef\'fb\loch\f39 \hich\f39 . \'cd\'e5\'f1\'ec\'ee\'f2\'f0\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ea\'e0\'e6\'f3\'f9\'f3\'fe\'f1\'ff\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'fb\'e9\loch\f39 \hich\f39 \'e2\'e7\'e3 -\'eb\'ff\'e4\hich\af39\dbch\af31505\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'f1\'eb\'ee\'e6\'ed\'ee\'f1\'f2\'fc\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'ea\'e8\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'ed\'e0\'e4\'e5\'fe\'f1 -\'fc\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'ef\'f0\'ee\'f6\'e5\'f1\'f1\'e5\loch\f39 \hich\f39 \'f7\'f2\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'f2\'e5\'ea\'f1\'f2\'e0\loch\f39 \hich\f39 \'e2\'fb\loch\f39 -\hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'f3\'e1\'e5\'e4\'e8\'eb\'e8\'f1\'fc\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e5\'ec\loch\f39 \hich\f39 \'e2\'f1\'e5\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed -\'ee\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'e3\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'f7\'ed\'ee\loch\f39 \hich\f39 . \'ce\'ef\'ff\'f2\'fc\loch\f39 \hich\f39 \'e6\'e5\loch\f39 \hich\f39 \'e0\'e2\'f2\'ee\'f0\loch\f39 \hich\f39 - \'ef\'f0\'ee\'e3\'f0\'e0\'ec\'ec\'fb\loch\f39 \hich\f39 \'ee\'e1\'e5\'f9\'e0\'e5\'f2\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f0\'e5\'eb\'e8\'e7\'f3\loch\f39 \hich\f39 \'f1\'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3 -\loch\f39 \hich\f39 \'e1\'ee\'eb\'e5\'e5\loch\f39 \hich\f39 \'f7\'e8\'f2\'e0\'e5\'ec\'fb\'ec\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'ee\'ed\'ff\'f2\'ed\'fb\'ec\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'e0\'e6\'ed\'ee\loch\f39 \hich\f39 \'ef\'ee\'ed\'ff\'f2\'fc\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'ee\'f2\'f7\'e8\'ea -\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\hich\af39\dbch\af31505\loch\f39 \hich\f39 . \'ce\'f7\'e5\'ed\'fc\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 - \'e2\loch\f39 \hich\f39 \'ef\'ee\'f0\'ff\'e4\'ea\'e5\loch\f39 \hich\f39 - \'f1\'eb\'e5\'e4\'ee\'e2\'e0\'ed\'e8\'ff\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f1\'e5\'f0\'e2\'e5\'f0\'f3 -\loch\f39 \hich\f39 \'ed\'e0\'e4\'ee\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'e8\'f2\'fc\loch\f39 \hich\f39 , \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'f2\'ee\'f2\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'e8\'ed\'ee\'e9\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\loch\f39 \hich\f39 - \'ee\'ed\loch\f39 \hich\f39 \'e8\'f9\'e5\'f2\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2 -\'ee\'e5\loch\f39 \hich\f39 \'f3\'e4\'ee\'e2\'eb\'e5\'f2\'e2\'ee\'f0\'ff\'fe\'f9\'e5\'e5\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'ee\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'f1\'ef\'e8\'f1\'ea\'e0\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3 -\'ef\'e0\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'ee\'e2\loch\f39 \hich\f39 (ACL) \'e8\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'e8\'e8\loch\f39 -\hich\f39 \'f1\loch\f39 \hich\f39 \'ed\'e8\'ec\loch\f39 \hich\f39 , \'e4\'e0\'e6\'e5\loch\f39 \hich\f39 \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ed\'e5\'e3\loch\af39\dbch\af31505\hich\f39 \'ee -\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e4\'f0\'f3\'e3\'e8\'e5\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'e0\loch\f39 \hich\f39 . \'c8\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee -\loch\f39 \hich\f39 - \'e2\'f1\'e5\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'fb\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'fb\loch\f39 \hich\f39 \'e2 -\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'c4\'ce\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\loch\f39 \hich\f39 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'fe\'f9\'e5\'e9\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb -\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e5\'f1\'f2\'fc\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 - \'e4\'ee\'e1\'f0\'ee\loch\f39 \hich\f39 \'ef\'ee\'e6\'e0\'eb\'ee\'e2\'e0\'f2\'fc\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'f4\'ee\'f0\'f3\'ec\loch\f39 \hich\f39 http://3proxy.ru/board.html. \'c2\'ef\'f0\'ee\'f7\'e5\'ec\loch\f39 \hich\f39 , \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'f3\'ef\'f0\'e5\'e4\'e8\'f2\'fc -\loch\f39 \hich\f39 , \'f7\'f2\'ee\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 \'f2\'e8\'ef\'e0\loch\f39 \hich\f39 "\'e0\loch\f39 \hich\f39 \'ef\'ee\'f7\'e5\'ec\'f3\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'ec\'e5\'ed\'ff -\loch\f39 \hich\f39 \'ed\loch\af39\dbch\af31505\hich\f39 \'e8\'f7\'e5\'e3\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'e5\'f2\loch\f39 \hich\f39 ?" \'e7\'e4\'e5\'f1\'fc\loch\f39 \hich\f39 , \'ea\'e0\'ea\loch\f39 -\hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'ee\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'e2\'e0\'f0\'e8\'f2\'e5\'eb\'fc\'ed\'ee\'e5 -\loch\f39 \hich\f39 \'f7\'f2\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'f5\'ee\'f2\'ff\loch\f39 \hich\f39 \'e1\'fb\loch\f39 \hich\f39 FAQ \'e8\loch\f39 \hich\f39 HowTO \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8 -\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ff\'e2\'eb\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'ee\'e1\'ff\'e7\'e0\'f2\'e5\'eb\'fc\'ed\'fb\'ec\loch\f39 \hich\f39 . \'cd\'e0 -\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 \'f1\'ee\'e1\'f1\'f2\'e2\'e5\'ed\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 \'ee\'ef\'fb\'f2\'e0\loch\f39 \hich\f39 \'ec\'ee\'e3\'f3\loch\f39 \hich\f39 \'ef\'ee\'f1\'ee\'e2\'e5\'f2 -\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'f0\'f3\'f1\'f1\'ea\'ee\'ff\'e7\'fb\'f7\'ed\'fb\'f5\loch\f39 \hich\f39 FAQ \'e8\loch\f39 \hich\f39 HowTO, \'e7\'e0\'f2\'e5\'ec\loch\f39 -\hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'f1\'f0\loch\af39\dbch\af31505\hich\f39 \'e0\loch\af39\dbch\af31505\hich\f39 \'e2\'ed\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'f7\'e8\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e0\'ed\'e3\'eb\'ee\'ff\'e7 -\'fb\'f7\'ed\'fb\'e5\loch\f39 \hich\f39 FAQ \'e8\loch\f39 \hich\f39 HowTO, \'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'e8\'f5\loch\f39 \hich\f39 \'ed\'e0\'f8\'e5\'eb\loch\f39 \hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 -\hich\f39 \'e2\'e7\'e0\'e8\'ec\'ee\'e4\'ee\'ef\'ee\'eb\'ed\'ff\'fe\'f9\'e8\'e5\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\'fb\loch\f39 \hich\f39 . \'cd\'f3\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f0\'e0\'e7\'f3\'ec\'e5\'e5\'f2\'f1\'ff\loch\f39 -\hich\f39 , \'ec\'e5\'e4\'e8\'f2\'e0\'f6\'e8\'ff\loch\f39 \hich\f39 \'ed\'e0\'e4\loch\f39 \hich\f39 man (\'f3\'e2\'fb\loch\f39 \hich\f39 , \'ee\'ed\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e0\'ed -\'e3\'eb\'e8\'e9\'f1\'ea\'ee\'ec\loch\f39 \hich\f39 ) \'e4\'e0\'f1\'f2\loch\f39 \hich\f39 \'e2\'e0\'ec\loch\f39 \hich\f39 \'ee\'f2\'e2\'e5\'f2\'fb\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'e8\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'f1\'e5 -\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\'f3\loch\f39 \hich\f39 \'e7\'e0\'ec\'e5\'f7\'e0\'f2\'e5\'eb\'fc\'ed\'ee\'ec\'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0 -\'e2\'e5\'f0\'f3\loch\f39 \hich\f39 . \'cc\'ee\'e3\'f3\loch\f39 \hich\f39 \'f3\'f2\'e2\'e5\'f0\'e6\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'fd\'f2\loch\af39\dbch\af31505\hich\f39 \'ee\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 -\'f1\'ee\'e1\'f1\'f2\'e2\'e5\'ed\'ed\'ee\'ec\'f3\loch\f39 \hich\f39 \'ee\'ef\'fb\'f2\'f3\loch\f39 \hich\f39 . \'cd\'e0\loch\f39 \hich\f39 \'ee\'f1\'f2\'e0\'e2\'f8\'e8\'e5\'f1\'ff\loch\f39 \hich\f39 \'e5\'f9\'e5\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee -\'f1\'fb\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\'e9\'f2\'e8\loch\f39 \hich\f39 \'ee\'f2\'e2\'e5\'f2\'fb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 changelog, \'ed\'f3\loch\f39 -\hich\f39 \'e0\loch\f39 \hich\f39 \'e5\'f1\'eb\'e8\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'f2\'e0\'ec\loch\f39 \hich\f39 \'e2\'fb\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ed\'e0\'e9\'e4\'e5\'f2\'e5\loch\f39 \hich\f39 \'ee\'f2\'e2\'e5 -\'f2\'e0\loch\f39 \hich\f39 - \'e7\'ed\'e0\'f7\'e8\'f2\loch\f39 \hich\f39 , \'f3\'e6\'e5\loch\f39 \hich\f39 \'ef\'ee\'f0\'e0\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\loch\f39 \hich\f39 \'ed\'e0 -\loch\f39 \hich\f39 \'f4\'ee\'f0\'f3\'ec\'e5\loch\f39 . -\par -\par -\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'c4\'ee\'ef\'ee\'eb\'ed\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 30 \'ec\'e0\'f0\'f2\'e0\loch\f39 \hich\f39 2010 \'e3 -\'ee\'e4\'e0. -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \loch\af39\dbch\af31505\hich\f39 \'d0\'e0\'f1\'f1\'ec\'ee\'f2\'f0\'e8\'ec\loch\f39 \hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'f7 -\'e0\'f9\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\loch\af39\dbch\af31505\hich\f39 \'ee\loch\f39 \hich\f39 \'e2\'ee\'e7\'ed\'e8\'ea\'e0\'fe\'f2\loch\f39 \hich\f39 \'f3\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 }{ -\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 3}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 proxy -}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 . \'c0\loch\f39 \hich\f39 \'f2\'e0\'ea\'e6\'e5\loch\f39 \hich\f39 \'ed\'e5\'ea\'ee\'f2\'ee\'f0\'fb\'e5\loch\f39 \hich\f39 \'e8\'ed\'f2 -\'e5\'f0\'e5\'f1\'ed\'fb\'e5\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 \hich\f39 \'ed\'e5\'ee\'f7\'e5\'e2\'e8\'e4\'ed\'fb\'e5\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8-\'f1\'e5\'f0\'e2\'e5 -\'f0\'e0. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 1. \'ca\'e0\'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'ff\'e7\'e0\'f2\'fc\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 -\hich\af1\dbch\af31505\loch\f1 MAC}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 -}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e0\'e4\'f0\'e5\'f1 -\loch\f39 \hich\f39 \'f1\'e5\'f2\'e5\'e2\'ee\'e9\loch\f39 \hich\f39 \'ea\'e0\'f0\'f2\'fb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'eb\'ff\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 - }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 system}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 -\hich\af1\dbch\af31505\loch\f1 : -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 system arp -s 1.2.3.4 AA:BB:CC:DD:EE:FF}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'fd\'f2\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\loch\af39\dbch\af31505\hich\f39 \'f7\'ea\'e0\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed -\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'e4\'e0\'e5\'f2\loch\f39 \hich\f39 \'ee\'f2\'f1\'fb\'eb\'ea\'f3\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f1\'e8\'f1\'f2\'e5\'ec\'ed\'ee\'e9\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e5}{\rtlch\fcs1 -\af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 arp}{\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'e0\'ff\loch\f39 \hich\f39 \'ef\'f0\'e8\'e2\'ff\'e7\'fb\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'ed\'ed\'fb\'e9 -\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 IP}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 -}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'ed\'ed\'ee\'ec\'f3\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 MAC}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 -}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 -\loch\af39\dbch\af31505\hich\f39 \'e0\'e4\'f0\'e5\'f1\'f3. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 2. \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'f6\'e5\'eb\'fb -\'e5\loch\f39 \hich\f39 \'f1\'e5\'f2\'ea\'e8\loch\f39 \hich\f39 , \'f2.\'e5\loch\f39 \hich\f39 . \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ec\'e0\'f1\'ea\'f3\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 192.168.100.* }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e2\'ec\'e5\'f1\'f2\'ee\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5 -\'f7\'e8\'f1\'eb\'e5\'ed\'e8\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 IP}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e0\'e4\'f0\'e5\'f1\'ee\'e2\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'c4\'e0\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e8\loch\af39\dbch\af31505\hich\f39 \'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2 -\'fc\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 CIDR}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 -\hich\f39 , \'ea\loch\f39 \hich\f39 \'ef\'f0\'e8\'ec\'e5\'f0\'f3\loch\f39 : -\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 allow}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 - * 192.168.100/32 -\par -\par \hich\af1\dbch\af31505\loch\f1 3}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 . \'c5\'f1\'f2\'fc\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e4\'e8\'ed\'e0\'ec\'e8\'f7\'e5\'f1\'ea\'e8 -\'e9\loch\f39 \hich\f39 \'f8\'e5\'e9\'ef\'e5\'f0\loch\f39 \hich\f39 \'e2\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 3}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 proxy}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'f2.\'e5\loch\f39 \hich\f39 . \'ec\'ee\'e6 -\'ed\'ee\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'f0\'e8\'ee\'f0\'e8\'f2\'e5\'f2\'fb\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f1\'ea\'ee\'f0\'ee\'f1\'f2\'e8\loch\f39 \hich\f39 -\'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\loch\f39 \hich\f39 \'e4\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\loch\f39 \hich\f39 (\'ec\'e0\'f0\'f2\loch\f39 \hich\f39 2010) \'ed\'e5\'f2\loch\f39 \hich\f39 , \'ed\'ee\loch\f39 -\hich\f39 \'e0\'e2\'f2\'ee\'f0\loch\f39 \hich\f39 \'ee\'e1\'e5\'f9\'e0\'eb\loch\f39 \hich\f39 \'ef\'f0\'e8\'ea\'f0\'f3\'f2\'e8\'f2\'fc. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 4. \'c5\'f1\'f2\'fc\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e0\'ed\'f2\'e8\'e2\'e8\'f0\'f3\'f1\'ed\'fb\'e9\loch\f39 \hich\f39 \'ec\'ee\'e4\'f3\'eb\'fc\loch\f39 \hich\f39 \'e2\loch\f39 }{\rtlch\fcs1 -\af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 3}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 proxy}{\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'ec\'ee\'f2\'f0\'e8\loch\f39 \hich\f39 \'ee\'f2\'e2\'e5\'f2\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e2\'ee\'ef\'f0\'ee\'f1\loch\f39 3. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 5. \'c3\'e4\'e5\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e0\'ed\'e0\'eb\'e8\'e7\'e0\'f2\'ee\'f0\loch\f39 \hich\f39 \'eb\'ee\'e3\'ee\'e2\loch\f39 }{\rtlch\fcs1 \af1\afs20 -\ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 WRSpy}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 : -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 http://www.wrspy.ru/download/WrSpySetup.rar - \'f1\'f1\'fb\'eb\'ea\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'e8\'ed\'f1\'f2\'e0\'eb -\'eb\'ff\'f2\'ee\'f0 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 http://www.wrspy.ru/download/WrSpyUp166.rar - \'f1\'f1\'fb\'eb\'ea\'e0\loch\f39 \hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ed\'e5\'e5\loch\f39 \hich\f39 \'ee\'e1\'ed\'ee\'e2\'eb\'e5\'ed -\'e8\'e5. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 6. \'ca\'e0\'ea\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e3\'eb\'ee\'e1\'e0\'eb\'fc\'ed\'fb\'e5\loch\f39 -\loch\af39\dbch\af31505\hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'fb\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0\loch\f39 \hich\f39 , \'ee\'f2\'ed\'ee\'f1\'ff\'f9\'e8\'e5\'f1\'ff\loch\f39 \hich\f39 \'ea\'ee\loch\f39 \hich\f39 \'e2\'f1\'e5\'ec -\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\'e5\'ec\'fb\'ec\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'e0\'ec\loch\f39 ? -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'ee\'ec\'e0\'ed\'e4\'fb\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e0 -\loch\f39 \hich\f39 \'e2\'fb\'ef\'ee\'eb\'ed\'ff\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'ed\'e5\'ef\'ee\'f1\'f0\'e5\'e4\'f1\'f2\'e2\'e5\'ed\'ed\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e8\'ff\loch\f39 -\hich\f39 , \'f2.\'e5\loch\f39 \hich\f39 . \'ea\'e0\'ea\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e5\'ed\'e0\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 "proxy" - \'f1\'eb\'f3\'e6\'e1 -\'e0\loch\f39 \hich\f39 \'f1\'f2\'e0\'f0\'f2\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'ed\'ed\'ee\'e9\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6\'e8\'e5\'e9\loch\f39 \hich\f39 \'e8\loch\f39 -\hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'fd\'f2\'ee\'e3\'ee\loch\f39 \hich\f39 \'f1\'f7\'e8\'f2\'fb\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e0\'ff\loch\f39 -\hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 . \'cf\'ee\'fd\'f2\'ee\'ec\'f3\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'e4 -\'e0\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\'e4\'ed\'e5\'e9\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 \hich\f39 , \'ef\'ee\'f1\'eb\'e5\loch\f39 -\hich\f39 \'ed\'e5\'e3\'ee\loch\f39 \hich\f39 \'ed\'e8\'f7\'e5\'e3\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'ed\'ee\loch\f39 \hich\f39 \'e1\'fb\'f2\'fc\loch\f39 \hich\f39 , \'ea\'f0\'ee\'ec\'e5\loch\f39 \hich\f39 \'ea\'ee -\'ed\'f4\'e8\'e3\'f3\'f0\'e0\'f6\'e8\'e8\loch\f39 \hich\f39 \'f1\'eb\'e5\'e4\'f3\'fe\'f9\'e5\'e9\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 \hich\f39 . \'c5\'f1\'eb\'e8\loch\f39 \hich\f39 \'f7\'f2\'ee-\'f2\'ee\loch\f39 \hich\f39 \'e8 -\loch\f39 \hich\f39 \'ef\'ee\'eb\'f3\'f7\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f3\'ea\'e0\'e7\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e0\loch\f39 \hich\f39 \'f1\'eb\'f3\'e6\'e1\'fb\loch\f39 -\hich\f39 - \'fd\'f2\'ee\loch\f39 \hich\f39 \'ef\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 \'f1\'ee\'e2\'ef\'e0\'e4\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 , \'e2\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee\'e9\loch\f39 \hich\f39 \'ec\'ee\'ec\'e5\'ed\'f2\loch\f39 -\hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'f1\'f2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f0\'e0\'e1\'ee\'f2\'e0\'f2\'fc. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 7. \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'ed\'e5\'f1\'ea\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'e2\'ed\'e5 -\'f8\'ed\'e8\'f5\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\'ee\'e2\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8\loch\f39 ? -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'ee\'ec\'e0\'ed\'e4\'e0\loch\f39 \hich\f39 parent \'f1\loch\f39 \hich\f39 -\'ed\'f3\'eb\'e5\'e2\'fb\'ec\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'ee\'ec\loch\f39 \hich\f39 \'f3\'f1\'f2\'e0\'ed\'e0\'e2\'eb\'e8\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'ec\'ee -\'e3\'ee\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\'e0\loch\f39 \hich\f39 . \'cd\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 -\par \hich\af39\dbch\af31505\loch\f39 allow vasya -\par \hich\af39\dbch\af31505\loch\f39 parent 1000 http 192.168.1.1 0 -\par \hich\af39\dbch\af31505\loch\f39 allow petya -\par \hich\af39\dbch\af31505\loch\f39 parent 1000 http 192.168.2.1 0 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'f3\'f1\'f2\'e0\'ed\'e0\'e2\'eb\'e8\'e2\'e0 -\loch\af39\dbch\af31505\hich\f39 \'e5\'f2\loch\f39 \hich\f39 \'e2\'ed\'e5\'f8\'ed\'e8\'e9\loch\f39 \hich\f39 \'e8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1\loch\f39 \hich\f39 192.168.1.1 \'e4\'eb\'ff\loch\f39 \hich\f39 vasya \'e8\loch\f39 \hich\f39 - 192.168.2.1 \'e4\'eb\'ff\loch\f39 petya -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 8. \'ca\'e0\'ea\loch\f39 \hich\f39 \'ed\'e0\'f1\'f2\'f0\'ee\'e8\'f2\'fc\loch\f39 \hich\f39 \'f4\'e8\'eb\'fc\'f2\'f0\'e0\'f6\'e8\'fe\loch\f39 \hich\f39 \'ed\'e5\'e6\'e5\'eb\'e0\'f2\'e5\'eb\'fc\'ed\'fb\'f5 -\loch\f39 \hich\f39 \'f0\'e5\'f1\'f3\'f0\'f1\'ee\'e2\loch\f39 \hich\f39 (\'ed\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'e4\'eb\'ff\loch\f39 \hich\f39 \'f8\'ea\'ee\'eb\'fb\loch\f39 )? -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'ee\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e9\'f2\'e5\'f1\'fc\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 DNS}{\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 \'d1\'e8\'f1\'f2\'e5\'ec\'fb\loch\f39 \hich\f39 \'ea\'ee\'ed\'f2\'e5\'ed\'f2\'ed\'ee\'e9\loch\f39 \hich\f39 \'f4\'e8\'eb\'fc\'f2\'f0\'e0\'f6\'e8\'e8 -\loch\f39 : -\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 nserver}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 - 81.176.72.82 -\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 nserver}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 - 81.176.72.83}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \loch\af39\dbch\af31505\hich\f39 \'c2\'f1\'e5\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'fb\loch\f39 \hich\f39 \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\loch\af39\dbch\af31505\hich\f39 \'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'f1\'e8\'f1\'f2\'e5\'ec\'ee -\'e9\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'f0\'e0\'ea\'f2\'e8\'f7\'e5\'f1\'ea\'e8\loch\f39 \hich\f39 \'ed\'e8\loch\f39 \hich\f39 \'ee\'e4\'ed\'e0\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\'e0\loch\f39 \hich\f39 \'f1\loch\f39 -\hich\f39 \'ef\'ee\'f0\'ed\'ee\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'ed\'e0. -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'e0\'e2\'e4\'e0\loch\f39 \hich\f39 , \'f1\'e8\'f1\'f2\'e5\'ec\'e0\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'e6\'e5\'f1\'f2\'ea\'ee\loch\f39 \hich\f39 \'f4\'e8\'eb\'fc\'f2\'f0\'f3 -\'e5\'f2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f2\'e5\'ed\'f2\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'ef\'e5\'f0\'e5\'ea\'f0\'fb\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'e4\'ee\'e2\'ee\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ec\'ed\'ee\'e3\'ee\loch\f39 -\hich\f39 \'f1\'f0\'e0\'e2\'ed\'e8\'f2\'e5\'fc\'ed\'ee\loch\f39 \hich\f39 \'e1\'e5\'e7\'ee\'ef\'e0\'f1\'ed\'fb\'f5\loch\f39 \hich\f39 \'f1\'e0\'e9\'f2\'ee\'e2. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 9. \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 \hich\f39 \'f0\'e0\'e7\'e4\'e5\'eb\'e8\'f2\'e5\'eb\'fc\loch\f39 \hich\f39 \'e2 -\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\'ee\'e2\'ee\'ec\loch\f39 \hich\f39 \'ea\'eb\'e8\'e5\'ed\'f2\'e5\loch\f39 \hich\f39 , \'ee\'f2\'eb\'e8\'f7\'ed\'fb\'e9\loch\f39 \hich\f39 \'ee\'f2\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\kerning1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 #}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'c8\loch\af39\dbch\af31505\hich\f39 \'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e9\'f2\'e5\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 delimchar}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 -\par -\par \hich\af1\dbch\af31505\loch\f1 10. }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'ea\loch\f39 \hich\f39 \'e7\'e0\'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2 -\'e5\'eb\'fe\loch\f39 \hich\f39 \'e1\'e5\'e7\'eb\'e8\'ec\'e8\'f2\'ed\'fb\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'c8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e9\'f2\'e5\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'ee\'e5\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 \'ed\'e5\loch\f39 -\hich\f39 \'f1\'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'e2\'fb\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'f0\'e8\'ed\'f6\'e8\'ef\'e5. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 11. \'ca\'e0\'ea\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'fe\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \hich\f39 \'ee\'ef\'f0\'e5\'e4\'e5\'eb\'e5\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 -\'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 , \'ea\'ee\'f2\'ee\'f0\'fb\'e9\loch\f39 \hich\f39 \'ee\'ed\loch\f39 \hich\f39 \'ec\'ee\'e6\'e5\'f2\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e0\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'eb\'fe\'e1\'ee -\'e5\loch\f39 \hich\f39 \'e2\'f0\'e5\'ec\'ff\loch\f39 \hich\f39 , \'e0\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f2\'ee\'eb\'fc\'ea\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'e4\'e0\'ed\'ed\'fb\'e9\loch\f39 \hich\f39 \'ec\'e5\'f1\'ff -\'f6\hich\af39\dbch\af31505\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'e4\'e5\'ed\'fc\loch\f39 ? -\par \loch\af39\dbch\af31505\hich\f39 \'c8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e9\'f2\'e5}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 -\af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 Y - }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ed\'e0}{ -\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e3 -\'ee\'e4}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 , N - }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 -\loch\af39\dbch\af31505\hich\f39 \'ed\'e8\'ea\'ee\'e3\'e4\'e0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'e4\'eb\'ff}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ef\'e0\'f0\'e0\'ec\'e5\'f2\'f0\'e0}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 -\hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 type: }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 countin }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\kerning1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 2}{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 . \'cf\'ee\'f7\'e5\'ec\'f3\loch\f39 \hich\f39 \'ee\'e3\'f0\'e0\'ed\'e8\'f7\'e5\'ed\'e8\'e5\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\'e0\loch\f39 \hich\f39 \'ed -\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'e3\'e4\'e0\loch\f39 \hich\f39 \'e4\'e5\'e9\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'f1\'ea\'e0\'f7\'e8\'e2\'e0\'ed\'e8\'e8\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'ee\'e2\loch\f39 -? -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 3proxy \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\loch\af39\dbch\af31505\hich\f39 \'e5\'f0\'fb\'e2\'e0\'e5\'f2\loch\f39 \hich\f39 \'e7\'e0\'ea\'e0 -\'f7\'ea\'f3\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'e0\loch\f39 \hich\f39 \'e8\loch\f39 \hich\f39 \'eb\'e8\'ec\'e8\'f2\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ff\'e2\'eb\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e6\'e5\'f1\'f2\'ea\'e8\'ec -\loch\f39 \hich\f39 . \'cd\'ee\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'ed\'e0\'f7\'e0\'eb\'e5\loch\f39 \hich\f39 \'e7\'e0\'ea\'e0\'f7\'ea\'e8\loch\f39 \hich\f39 , \'ef\'ee\loch\f39 \hich\f39 \'e2\'ee\'e7\'ec\'ee\'e6\'ed\'ee\'f1\'f2\'e8 -\loch\f39 \hich\f39 , \'ef\'f0\'ee\'e2\'e5\'f0\'ff\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'f3\'ea\'eb\'e0\'e4\'fb\'e2\'e0\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\loch\f39 \hich\f39 \'ef\'ee\loch\f39 \hich\f39 \'f0 -\'e0\'e7\'ec\'e5\'f0\'e0\'ec\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ed\'ee\'f0\'ec\'f3. -\par -\par \hich\af39\dbch\af31505\loch\f39 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 3}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 -\hich\f39 . \'ca\'e0\'ea\'ee\'e9\loch\f39 \hich\f39 \'f4\'ee\'f0\'ec\'e0\'f2\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f4\'e0\'e9\'eb\'e0\'f5\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2 -\'f7\'e8\'ea\'ee\'e2\loch\f39 \hich\f39 , \'e7\'e0\'e4\'e0\'e2\'e0\'e5\'ec\'fb\'f5\loch\f39 \hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'ee\'e9\loch\f39 counter ? -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cd\'ee\'ec\'e5\'f0\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'e0 -\loch\f39 \hich\f39 - \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 *4GB + \'f2\loch\af39\dbch\af31505\hich\f39 \'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 . \'cf\'f0\'ee\'f1\'f2\'ee\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'f6\'e5\'eb\'fb\'e9\loch\f39 -\hich\f39 \'f2\'e8\'ef\loch\f39 \hich\f39 \'e1\'ee\'eb\'fc\'f8\'e5\loch\f39 \hich\f39 4GB \'ed\'e5\loch\f39 \hich\f39 \'e2\'eb\'e0\'e7\'e8\'f2. -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'e0\'ef\'f0\'e8\'ec\'e5\'f0\loch\f39 \hich\f39 , \'f1\'f2\'f0\'ee\'f7\'ea\'e0\loch\f39 \hich\f39 00100 0000000021 3468801478 \'f1\'ee\'ee\'f2\'e2\'e5\'f2\'f1\'f2\'e2\'f3\'e5\'f2\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2 -\'f7\'e8\'ea\'f3\loch\f39 \hich\f39 \'ed\'ee\'ec\'e5\'f0\loch\f39 \hich\f39 100 \'f1\'ee\loch\f39 \hich\f39 \'e7\'ed\'e0\'f7\'e5\'ed\'e8\'e5\'ec\loch\f39 \hich\f39 21*4 + 3=89\'c3\'e1. -\par -\par \hich\af39\dbch\af31505\loch\f39 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 4}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 -\hich\f39 . \'cc\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'eb\'e8\loch\f39 \hich\f39 \'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5 -\loch\f39 \hich\f39 \'e7\'e2\'e5\'e7\'e4\'ee\'f7\'ea\'e8\loch\f39 \hich\f39 \'e2\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 ACL}{\rtlch\fcs1 \af1\afs20 -\ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 ? -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 * \'e2\loch\f39 \hich\f39 \'ea\'ee\'ed\'f6\'e5\loch\f39 \hich\f39 ACL \'ec\'ee\'e6\'ed\'ee\loch\f39 \hich\f39 \'e2\'ee\'ee\'e1\'f9\'e5 -\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 \hich\f39 . \'d2\'ee\loch\f39 \hich\f39 \'e5\'f1\'f2\loch\af39\dbch\af31505\hich\f39 \'fc\loch\f39 \hich\f39 \'e2\'ef\'ee\'eb\'ed\'e5\loch\f39 \hich\f39 \'f0\'e0 -\'e1\'ee\'f7\'e5\'e9\loch\f39 \hich\f39 \'e1\'f3\'e4\'e5\'f2\loch\f39 \hich\f39 \'f1\'f2\'f0\'ee\'ea\'e0\loch\f39 \hich\f39 \'e2\'e8\'e4\'e0\loch\f39 : -\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 allow}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{ -\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 user}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 -\par -\par \hich\af1\dbch\af31505\loch\f1 15. }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'ea\loch\f39 \hich\f39 \'e0\'e4\'ec\'e8\'ed\'e8\'f1\'f2\'f0\'e0\'f2\'ee\'f0\'f3\loch\f39 \hich\f39 \'f1\'ec -\'ee\'f2\'f0\'e5\'f2\'fc\loch\f39 \hich\f39 \'ee\'e1\'f9\'e8\'e9\loch\f39 \hich\f39 (\'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'e5\'e9\loch\f39 \hich\f39 ) \'f1\'f3\'f2\'ee\'f7\'ed -\'fb\'e9\loch\f39 \hich\f39 \'e8\'eb\'e8\loch\f39 \hich\f39 \'ec\'e5\'f1\'ff\'f7\'ed\'fb\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 ? -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 countin 100/month M 1000000 * -\par \hich\af39\dbch\af31505\loch\f39 countin 101/day D 1000000 * -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 6}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\cf1\insrsid11355186 .}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'e0 -\'ea\loch\f39 \hich\f39 \'f0\'e0\'e7\'f0\'e5\'f8\'e8\'f2\'fc\loch\f39 \hich\f39 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\'ec\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'ea\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 ICQ}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'ed\'e5\loch\f39 \hich\f39 \'e4\'e0\'e2\'e0 -\loch\af39\dbch\af31505\hich\f39 \'ff\loch\f39 \hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\'e0\loch\f39 \hich\f39 \'ea\loch\f39 \hich\f39 \'eb\'fe\'e1\'fb\'ec\loch\f39 \hich\f39 \'f1\'e0\'e9 -\'f2\'e0\'ec\loch\f39 ? -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 allow * [\'f1\'ef\'e8\'f1\'ee\'ea\loch\f39 \hich\f39 \'f1\'e2\'ee\'e8\'f5\loch\f39 \hich\f39 \'f1\'e5\'f2\'e5\'e9\loch\f39 ] 64.12.0.0/16,205.188.0.0/16 3190 -\par \hich\af39\dbch\af31505\loch\f39 deny * -\par \loch\af39\dbch\af31505\hich\f39 \'cd\'ee\loch\f39 \hich\f39 \'eb\'f3\'f7\'f8\'e5\loch\f39 \hich\f39 \'e8\'f1\'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'fc\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 icqpr}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 . -\par -\par \hich\af1\dbch\af31505\loch\f1 17. }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ca\'e0\'ea\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 3proxy \'f0\'e0\'e7\'f0\'e5\'f8\'e8\'f2\'fc\loch\f39 -\hich\f39 \'f0\'e0\'e1\'ee\'f2\'f3\loch\f39 \hich\f39 \'ef\'f0\'ee\'f2\'ee\'ea\'ee\'eb\'e0\loch\f39 \hich\f39 IMAP \'e4\'eb\'ff\loch\f39 outlook? -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'e4\'e5\'eb\'e0\'e9\loch\f39 \hich\f39 tcppm \'e4\'eb\'ff\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'e0\loch\f39 143. -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 18. \'cf\'ee\'f7\'e5\'ec\'f3\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'f0\'e8\'f5\'ee\'e4\'e8\'f2\loch\f39 \hich\f39 \'ef\'ee\'f7\'f2\loch\af39\dbch\af31505\hich\f39 \'e0\loch\f39 \hich\f39 \'ef -\'f0\'e8\loch\f39 \hich\f39 \'f2\'e0\'ea\'ee\'ec\loch\f39 \hich\f39 \'ea\'ee\'ed\'f4\'e8\'e3\'e5\loch\f39 ? -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186\charrsid3764488 \hich\af39\dbch\af31505\loch\f39 tcppm -i192.168.0.1 25 mail.infobox.ru 25 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 smtpp -\par -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'d2\'fb\loch\f39 \hich\f39 \'ef\'fb\'f2\'e0\'e5\'f8\'fc\'f1\'ff\loch\f39 -\hich\f39 \'ed\'e0\loch\f39 \hich\f39 \'ee\'e4\'ed\'ee\'ec\loch\f39 \hich\f39 25-\'ee\'ec\loch\f39 \hich\f39 \'ef\'ee\'f0\'f2\'f3\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'f2\'e8\'f2\'fc\loch\f39 \hich\f39 2 \'f0\'e0\'e7\'ed\'fb\'f5\loch\f39 -\hich\f39 \'f1\'e5\'f0\'e2\'e8\'f1\'e0. -\par -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 19. \'c5\'f1\'f2\'fc\loch\f39 \hich\f39 \'f1\'e5\'f2\'fc\loch\f39 \hich\f39 10.10.1.0/24, \'e4\'eb\'ff\loch\f39 \hich\f39 \'ed\'e5\'e5\loch\f39 \hich\f39 \'e7\'e0\'e2\'e5\'e4\'e5\'ed\loch\f39 \hich\f39 \'f1 -\'f7\'e5\'f2\'f7\'e8\'ea\loch\f39 \hich\f39 : countin "60/\'d5\'d5\'d5\loch\f39 \hich\f39 " M 5000 * 10.10.1.0/24 * * *, \'f2\'f0\'e5\'e1\'f3\'e5\'f2\'f1\'ff\loch\f39 \hich\f39 \'e2\'e5\'f1\'f2\'e8\loch\f39 \hich\f39 \'ef\'ee\'e4\'f1\'f7 -\loch\af39\dbch\af31505\hich\f39 \'e5\'f2\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e4\'e2\'f3\'f5\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'ee\'e2\loch\f39 \hich\f39 \'e8\'e7\loch\f39 \hich\f39 \'fd\'f2\'ee\'e9\loch\f39 \hich\f39 \'f1\'e5 -\'f2\'e8\loch\f39 \hich\f39 \'ee\'f2\'e4\'e5\'eb\'fc\'ed\'ee\loch\f39 \hich\f39 \'ee\'f2\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'ee\'e3\'ee\loch\f39 \hich\f39 . \'cf\'f0\'e8\loch\f39 \hich\f39 \'fd\'f2\'ee\'ec\loch\f39 \hich\f39 , \'e5\'f1\'eb -\'e8\loch\f39 \hich\f39 \'ee\'f1\'ed\'ee\'e2\'ed\'e0\'ff\loch\f39 \hich\f39 \'f1\'e5\'f2\'fc\loch\f39 \hich\f39 \'f3\'e6\'e5\loch\f39 \hich\f39 \'e2\'fb\'e1\'f0\'e0\'eb\'e0\loch\f39 \hich\f39 \'f1\'e2\'ee\'e9\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8 -\'ea\loch\f39 \hich\f39 , \'f3\loch\f39 \hich\f39 \'fd\'f2\'e8\'f5\loch\f39 \hich\f39 \'e4\'e2\'f3\'f5\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'ee\'e2\loch\f39 \hich\f39 \'e4\'ee\'f1\'f2\'f3\'ef\loch\f39 \hich\f39 \'e4\'ee\'eb\'e6\'e5\'ed\loch\f39 -\hich\f39 \'f1\'ee\'f5\'f0\'e0\'ed\'ff\'f2\'fc\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'f0\'e5\'e4\'e5\'eb\'e0\'f5\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'f1\'ee\'e1\'f1\'f2\'e2\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'eb -\'e8\'ec\'e8\'f2\'ee\'e2\loch\f39 . -\par -\par \loch\af39\dbch\af31505\hich\f39 \'d1\'e4\'e5\'eb\'e0\'f2\'fc\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'fb\'e5\loch\f39 \hich\f39 \'e4\'e2\'e0\loch\f39 \hich\f39 \'f1\'f7\'e5\'f2\'f7\'e8\'ea\'e0\loch\f39 \hich\f39 \'e4\'eb\'ff\loch\f39 \hich\f39 \'e2\'fb -\'e4\'e5\'eb\'e5\'ed\'ed\'fb\'f5\loch\f39 \hich\f39 \'e0\'e4\'f0\'e5\'f1\'ee\'e2\loch\f39 \hich\f39 , \'e7\'e0\'f2\'e5\'ec\loch\f39 \hich\f39 \'e4\'e0\'f2\'fc\loch\f39 \loch\af39\dbch\af31505\hich\f39 \'ea\'ee\'ec\'e0\'ed\'e4\'f3\loch\f39 nocount}{ -\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 in}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \hich\af39\dbch\af31505\loch\f39 \hich\f39 , \'f7\'f2\'ee -\'e1\'fb\loch\f39 \hich\f39 \'e8\'f5\loch\f39 \hich\f39 \'f2\'f0\'e0\'f4\'e8\'ea\loch\f39 \hich\f39 \'ed\'e5\loch\f39 \hich\f39 \'ef\'ee\'ef\'e0\'e4\'e0\'eb\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ee\'f1\'f2\'e0\'eb\'fc\'ed\'ee\'e9. -\par \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'e0\'e2\'e8\'eb\'e0\loch\f39 \hich\f39 countin \'e8\loch\f39 \hich\f39 nocountin \'ee\'e1\'f0\'e0\'e1\'e0\'f2\'fb\'e2\'e0\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'e2\loch\f39 \hich\f39 \'ef\'ee\'f0\'ff\'e4\'ea\'e5 -\loch\f39 \hich\f39 \'ee\'f7\'e5\'f0\'e5\'e4\'e8\loch\f39 \hich\f39 \'e4\'ee\loch\f39 \hich\f39 \'ef\'e5\'f0\'e2\'ee\'e3\'ee\loch\f39 \hich\f39 \'ef\'f0\'e0\'e2\'e8\'eb\'e0\loch\f39 nocountin/nocountout. -\par -\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 20. }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'cf\'f0\'e8\loch\f39 \hich\f39 \'e0 -\'e2\'f2\'ee\'f0\'e8\'e7\'e0\'f6\'e8\'e8\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 strong}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ef\'e5\'f0\'e8\'ee\'e4\'e8\'f7\'e5\'f1\'ea\'e8\loch\f39 \hich\f39 \'ef\'f0 -\'e8\loch\f39 \hich\f39 \'e7\'e0\'e3\'f0\'f3\'e7\'ea\'e5\loch\f39 \hich\f39 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\loch\f39 \hich\f39 \'ef\'ee\'ff\'e2\'eb\'ff\'fe\'f2\'f1\'ff\loch\f39 \hich\f39 \'ee\'ea\'ed\'e0\loch\f39 \hich\f39 \'e7\'e0\'ef\'f0\'ee\'f1\'e0 -\loch\f39 \hich\f39 \'eb\'ee\'e3\'e8\'ed\'e0-\'ef\'e0\loch\af39\dbch\af31505\hich\f39 \'f0\'ee\'eb\'ff\loch\f39 \hich\f39 . \'ca\'e0\'ea\loch\f39 \hich\f39 \'e8\'e7\'e1\'e0\'e2\'e8\'f2\'fc\'f1\'ff\loch\f39 ? -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'cf\'ee\'ef\'f0\'ee\'e1\'f3\'e9\'f2\'e5\loch\f39 \hich\f39 \'ef\'ee\'f1\'eb\'e5\loch\f39 \hich\f39 \'e2\'f1\'e5\'f5\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 -\f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 allow}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 -\f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ef\'ee\'f1\'f2\'e0\'e2\'e8\'f2\'fc\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 deny}{ -\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 *}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 . -\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 - \'c8\'f1\'ef\'ee\'eb\'fc\'e7\'f3\'e9\'f2\'e5\loch\f39 \hich\f39 \'ee\'ef\'f6\'e8\'fe\loch\f39 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 -}{\rtlch\fcs1 \af1\afs20 -\ltrch\fcs0 \f1\fs20\cf1\lang1033\langfe1049\langnp1033\insrsid11355186 \hich\af1\dbch\af31505\loch\f1 n}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid11355186\charrsid3764488 \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af39\afs20 -\ltrch\fcs0 \f39\fs20\cf1\insrsid11355186 \loch\af39\dbch\af31505\hich\f39 \'ef\'f0\'e8\loch\f39 \hich\f39 \'e7\'e0\'ef\'f3\'f1\'ea\'e5\loch\f39 \hich\f39 \'ef\'f0\'ee\'ea\'f1\'e8. -\par -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\hyphpar0\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\kerning1\insrsid11355186 -\par -\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 \loch\af39\dbch\af31505\hich\f39 \'a9\loch\f39 2006-2010 by Kurmaeff Halit -\par \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1049\kerning1\langnp1033\insrsid11355186\charrsid3764488 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100a55e7d2dc7060000d71b0000160000007468656d652f7468656d652f -7468656d65312e786d6cec59cf6e1b4518bf23f10ea3bdb7b113278da33a55ecd80db469a3d82dea71bc1eef4e33bbb39a1927f5ad4a8f482044411ca8045c38 -2020528bb8b4efe03e43a0088ad457e09b99ddf54ebca1491b4105cd21de9dfd7dffffcc37bb172fdd8918da2542521e37bceaf98a8748ecf3018d838677a3d7 -39b7ec21a9703cc08cc7a4e18d89f42eadbefbce45bca242121104f4b15cc10d2f542a59999b933e2c63799e27248667432e22ace05604730381f7806fc4e6e6 -2b95a5b908d3d843318e80ede49bc94f93c79303747d38a43ef15633fe6d06426225f582cf4457732719d1d74ff72707932793479383a777e1fa09fc7e6c6807 -3b554d21c7b2c504dac5ace181e801dfeb913bca430c4b050f1a5ec5fc7973ab17e7f04a4ac4d431b405ba8ef94be95282c1cebc9129827e2eb4daa9d52face7 -fc0d80a9595cbbdd6eb5ab393f03c0be0f965b5d8a3c6b9de56a33e35900d9cb59deadca62a5e6e20bfc176674ae379bcdc57aaa8b656a40f6b236835fae2cd5 -d6e61dbc0159fce20cbed65c6bb5961cbc0159fcd20cbe73a1be5473f10614321aefcca075403b9d947b0e1972b6510a5f06f87225854f51900d79b66911431e -ab93e65e846f73d101024dc8b0a23152e3840cb10f89dec2515f50ac05e215820b4fec922f6796b46c247d4113d5f0de4f3014cd94df8bc7dfbf78fc101dee3f -3adcfff9f0debdc3fd1f2d23876a03c74191eaf9b79ffcf9e02efae3e157cfef7f568e9745fcaf3f7cf8cb934fcb81504e53759e7d7ef0dba383675f7cf4fb77 -f74be06b02f78bf01e8d8844d7c81edae6111866bce26a4efae27414bd10d322c55a1c481c632da5847f5b850efada18b3343a8e1e4de27af0a680765206bc3c -baed28dc0dc548d112c957c2c8016e72ce9a5c947ae18a965570736f1407e5c2c5a888dbc678b74c760bc74e7cdba304fa6a96968ee1ad90386a6e311c2b1c90 -9828a49ff11d424aacbb45a9e3d74dea0b2ef950a15b1435312d75498ff69d6c9a126dd008e2322eb319e2edf866f3266a725666f53ad975915015989528df23 -cc71e3653c52382a63d9c3112b3afc2a56619992ddb1f08bb8b65410e980308eda03226519cd7501f616827e0543072b0dfb261b472e5228ba53c6f32ae6bc88 -5ce73bad10474919b64be3b0887d4fee408a62b4c555197c93bb15a2ef210e383e36dc372971c2fdf26e7083068e4ad304d14f46a22496970977f2b73b66434c -4cab8126eff4ea88c67fd7b81985ce6d259c5de38656f9eccb07257abfa92d7b0d76afb29ad938d2a88fc31d6dcf2d2e06f4cdefceeb78146f112888d92dea6d -737edb9cbdff7c733eae9ecfbe254fbb3034683d8bd8c1db8ce1d189a7f02165acabc68c5c95661097b0170d3ab0a8f998432ac94f69490897bab241a0830b04 -36344870f501556137c4090cf1554f330964ca3a9028e1120e9366b994b7c6c34140d9a3e8a23ea4d84e22b1dae403bbbca097b3b348cec66815980370266841 -3338a9b0850b2953b0ed558455b55227965635aa9926e948cb4dd62e36877870796e1a2ce6de842107c168045e5e82d7045a341c7e302303ed771ba32c2c260a -67192219e2014963a4ed9e8d51d50429cb951943b41d3619f4c1f2255e2b48ab6bb6af21ed24412a8aab1d232e8bdeeb4429cbe0699480dbd1726471b138598c -f61a5e7d717ed1433e4e1ade10cecd7019251075a9e74acc02783fe52b61d3fea5c56caa7c1acd7a66985b0455783562fd3e63b0d3071221d53a96a14d0df328 -4d01166b4956fff94570eb591950d28d4ea6c5c23224c3bfa605f8d10d2d190e89af8ac12eac68dfd9dbb495f29122a21b0ef6509f8dc43686f0eb54057b0654 -c2eb0fd311f40dbcbbd3de368fdce69c165df18d99c1d975cc9210a7ed56976856c9166e1a52ae83b92ba807b695ea6e8c3bbd29a6e4cfc894621affcf4cd1fb -09bc8d5818e808f8f0365960a42ba5e171a1420e5d2809a9df11304898de01d902ef7fe1312415bcd336bf82ecea5f5b739687296b3854aa6d1a2041613f52a1 -20640bda92c9be9730aba67b9765c9524626a30aeacac4aadd27bb84f5740f5cd27bbb87424875d34dd236607047f3cfbd4f2ba81fe821a7586f4e27cbf75e5b -03fff4e4638b198c72fbb0196832ffe72ae6e3c17457b5f4863cdb7b8b86e807d331ab965505082b6c05f5b4ec5f5185536eb5b663cd583cbf982907519cb518 -16f3812881774a48ff83fd8f0a9fd9af237a43edf16de8ad083e6e6866903690d5e7ece0817483b48b7d189ceca24d26cdcaba361d9db4d7b2cdfa8c27dd5cee -11676bcd4e12ef533a3b1fce5c714e2d9ea5b3530f3bbeb66bc7ba1a227bb4446169981d6c4c60cc97b5e2972fdebf0d815e876f0823a6a44926f88e2530ccd0 -5d530750fc56a2215dfd0b0000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c73 -2f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761 -be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f9 -80ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca -5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e7465 -6e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c73 -2f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f -7468656d654d616e616765722e786d6c504b01022d0014000600080000002100a55e7d2dc7060000d71b00001600000000000000000000000000d60200007468 -656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000d10900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cc0a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; -\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; -\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; -\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000002c -52e2b63dcc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1061\'d5\u1086\'ee\u1095\'f7\u1091\'f3 \u1087\'ef\u1086\'ee\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1089\'f1\u1074\'e2\u1086\'ee\u1080\'e8\u1084\'ec \u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1086\'ee\u1084\'ec \u1087\'ef\u1086\'ee \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1077\'e5 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1086\'ee\u1090\'f2 \u1047\'c7\u1072\'e0\u1088\'f0\u1072\'e0\u1079\'e7\u1099\'fb - 3proxy. \u1044\'c4\u1086\'ee\u1083\'eb\u1075\'e3\u1086\'ee\u1077\'e5 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1084\'ec \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1085\'ed\u1099\'fb\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1084\'ec ES Proxy http://esproxy.org.ua \u1086\'ee\u1090\'f2 \u1043\'c3\u1077\'e5\u1086\'ee\u1088\'f0\u1075\'e3\u1080\'e8\u1103\'ff \u1055\'cf\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1082\'ea\u1086\'ee - \u1084\'ec\u1072\'e0\u1083\'eb\u1077\'e5\u1085\'ed\u1100\'fc\u1082\'ea\u1086\'ee\u1075\'e3\u1086\'ee (\u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1086\'ee \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed exe-\u1096\'f8\u1085\'ed\u1080\'e8\u1082\'ea \u1085\'ed\u1072\'e0 300 \u1082\'ea\u1041\'c1), \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1077\'e5 \u1080\'e8 \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1085\'ed\u1077\'e5\u1090\'f2\u1088\'f0\u1077\'e5\u1073\'e1\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea \u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3\u1088\'f0\u1089\'f1\u1072\'e0\u1084\'ec - \u1087\'ef\u1086\'ee \u1082\'ea\u1088\'f0\u1072\'e0\u1081\'e9\u1085\'ed\u1077\'e5\u1081\'e9 \u1084\'ec\u1077\'e5\u1088\'f0\u1077\'e5, \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8 \u1089\'f1\u1086\'ee\u1090\'f2\u1085\'ed\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1086\'ee\u1085\'ed \u1091\'f3\u1084\'ec\u1091\'f3\u1076\'e4\u1088\'f0\u1103\'ff\u1083\'eb\u1089\'f1\u1103\'ff \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1088\'f0\u1080\'e8\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec P133, \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8 \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1090\'f2\u1099\'fb\u1082\'ea\u1072\'e0\u1103\'ff\u1089\'f1\u1100\'fc. \u1048\'c8 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1074\'e2\u1086\'ee\u1090\'f2 \u1101\'fd\u1090\'f2\u1086\'ee <\u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8> - \u1080\'e8\u1085\'ed\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5 \u1078\'e6\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8\u1082\'ea \u1089\'f1\u1072\'e0\u1084\'ec\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1078\'e6\u1080\'e8\u1088\'f0\u1072\'e0\u1083\'eb 100% \u1087\'ef\u1088\'f0\u1086\'ee\u1094\'f6\u1077\'e5\u1089\'f1\u1089\'f1\u1086\'ee\u1088\'f0\u1072\'e0, \u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1080\'e8 \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1072\'e0\u1083\'eb \u1095\'f7\u1072\'e0\u1089\'f1\u1090\'f2\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee \u1080\'e8\u1083\'eb\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc\u1102\'fe \u1089\'f1\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1089\'f1\u1086\'ee \u1089\'f1\u1074\'e2\u1086\'ee\u1080\'e8\u1084\'ec\u1080\'e8 \u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1103\'ff\u1084\'ec\u1080\'e8 - \u1072\'e0 \u1090\'f2\u1072\'e0\u1082\'ea\u1078\'e6\u1077\'e5 \u1090\'f2\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1091\'f3\u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8 4 \u1075\'e3\u1086\'ee\u1076\'e4\u1072\'e0 \u1082\'ea\u1072\'e0\u1082\'ea \u1085\'ed\u1077\'e5 \u1087\'ef\u1086\'ee\u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0\u1082\'ea\u1080\'e8\u1093\'f5 \u1087\'ef\u1088\'f0\u1080\'e8\u1079\'e7\u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1074\'e2 \u1078\'e6\u1080\'e8\u1079\'e7\u1085\'ed\u1080\'e8, \u1090\'f2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1091\'f3\u1082\'ea\u1090\'f2 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1088\'f0 \u1074\'e2 \u1088\'f0\u1072\'e0\u1079\'e7\u1074\'e2\u1080\'e8\u1090\'f2\u1080\'e8\u1080\'e8 - \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1083\'eb\u1080\'e8 \u1082\'ea \u1087\'ef\u1086\'ee\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0\u1084\'ec \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1076\'e4\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1077\'e5\u1075\'e3\u1086\'ee \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0. \u1057\'d1\u1082\'ea\u1072\'e0\u1078\'e6\u1091\'f3 \u1089\'f1\u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3 - \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1 \u1082\'ea\u1088\'f0\u1072\'e0\u1089\'f1\u1080\'e8\u1074\'e2\u1099\'fb\u1084\'ec\u1080\'e8 GUI \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1083\'eb\u1077\'e5\u1082\'ea\u1072\'e0\u1083\'eb\u1080\'e8 \u1084\'ec\u1072\'e0\u1083\'eb\u1086\'ee, \u1103\'ff \u1089\'f1\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1085\'ed\u1085\'ed\u1080\'e8\u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1094\'f6\u1080\'e8\u1087\'ef\u1072\'e0 <\u1052\'cc\u1085\'ed\u1077\'e5 \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1077\'e5\u1093\'f5\u1072\'e0\u1090\'f2\u1100\'fc>, \u1072\'e0 \u1082\'ea\u1088\'f0\u1072\'e0\u1089\'f1\u1080\'e8\u1074\'e2\u1099\'fb\u1081\'e9 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1 - \u1101\'fd\u1090\'f2\u1086\'ee, \u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1095\'f7\u1085\'ed\u1086\'ee, \u1093\'f5\u1086\'ee\u1088\'f0\u1086\'ee\u1096\'f8\u1086\'ee, \u1085\'ed\u1086\'ee \u1085\'ed\u1077\'e5 \u1074\'e2 \u1091\'f3\u1097\'f9\u1077\'e5\u1088\'f0\u1073\'e1 \u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1079\'e7\u1074\'e2\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8. \u1055\'cf\u1077\'e5\u1088\'f0\u1077\'e5\u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1086\'ee\u1074\'e2\u1072\'e0\u1074\'e2 \u1085\'ed\u1077\'e5 \u1086\'ee\u1090\'f2 \u1093\'f5\u1086\'ee\u1088\'f0\u1086\'ee\u1096\'f8\u1077\'e5\u1081\'e9 \u1078\'e6\u1080\'e8\u1079\'e7\u1085\'ed\u1080\'e8 5-6 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1093\'f5 \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1091\'f3\u1082\'ea\u1090\'f2\u1086\'ee\u1074\'e2 (\u1089\'f1\u1088\'f0\u1077\'e5\u1076\'e4\u1080\'e8 \u1085\'ed\u1080\'e8\u1093\'f5 Usergate, Proxy+, Lan4net....) \u1080\'e8 \u1085\'ed\u1077\'e5 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1096\'f8\u1080\'e8\u1089\'f1\u1100\'fc \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1084\'ec\u1080\'e8 \u1088\'f0\u1077\'e5\u1079\'e7\u1091\'f3\u1083\'eb\u1100\'fc\u1090\'f2\u1072\'e0\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8 (\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1080\'e8\u1079\'e7\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1091\'f3\u1082\'ea\u1090\'f2 \u1086\'ee\u1090\'f2 Microsoft \u1103\'ff \u1088\'f0\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1086\'ee\u1090\'f2\u1084\'ec\u1077\'e5\u1083\'eb \u1074\'e2\u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3 \u1077\'e5\u1075\'e3\u1086\'ee \u1074\'e2\u1099\'fb\u1089\'f1\u1086\'ee\u1082\'ea\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1086\'ee\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8), \u1088\'f0\u1077\'e5\u1096\'f8\u1080\'e8\u1083\'eb \u1087\'ef\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea\u1080\'e8 3proxy, \u1090\'f2\u1077\'e5\u1084\'ec \u1087\'ef\u1072\'e0\u1095\'f7\u1077\'e5 \u1089\'f1\u1083\'eb\u1099\'fb\u1096\'f8\u1072\'e0\u1083\'eb \u1074\'e2 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1086\'ee\u1084\'ec \u1093\'f5\u1086\'ee\u1088\'f0\u1086\'ee\u1096\'f8\u1080\'e8\u1077\'e5 \u1086\'ee\u1090\'f2\u1082\'ea\u1083\'eb\u1080\'e8\u1082\'ea\u1080\'e8. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1082\'ea\u1090\'f2\u1086\'ee \u1080\'e8 \u1078\'e6\u1072\'e0\u1083\'eb\u1086\'ee\u1074\'e2\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1085\'ed\u1077\'e5\u1075\'e3\u1086\'ee, \u1090\'f2\u1086\'ee \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1085\'ed\u1072\'e0 \u1089\'f1\u1083\'eb\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1080\'e8, \u1074\'e2 \u1095\'f7\u1077\'e5\u1084\'ec, \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc, \u1085\'ed\u1077\'e5\u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1079\'e7\u1072\'e0\u1073\'e1\u1077\'e5\u1075\'e3\u1072\'e0\u1103\'ff \u1074\'e2\u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4, \u1103\'ff \u1080\'e8 \u1080\'e8\u1084\'ec\u1077\'e5\u1083\'eb \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1091\'f3\u1073\'e1\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0\u1081\'e9\u1076\'e4\u1103\'ff \u1074\'e2 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1077\'e5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2 \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1072\'e0 http://3proxy.ru/, \u1087\'ef\u1086\'ee\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1083\'eb \u1087\'ef\u1088\'f0\u1086\'ee \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 - \u1080\'e8 \u1074\'e2\u1086\'ee\u1079\'e7\u1088\'f0\u1072\'e0\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff. \u1058\'d2\u1091\'f3\u1090\'f2 \u1090\'f2\u1077\'e5\u1073\'e1\u1077\'e5 \u1080\'e8 \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1077\'e5 \u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1099\'fb \u1085\'ed\u1072\'e0 \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff, \u1080\'e8 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8, \u1080\'e8 FTP, \u1080\'e8 SOCKS, \u1080\'e8 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2-\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1077\'e5\u1088\'f0\u1099\'fb, \u1080\'e8 \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0 \u1082\'ea\u1072\'e0\u1082\'ea \u1087\'ef\u1086\'ee\u1076\'e4 Windows, \u1090\'f2\u1072\'e0\u1082\'ea \u1080\'e8 \u1087\'ef\u1086\'ee\u1076\'e4 \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1084\'ec\u1080\'e8 \u1085\'ed\u1080\'e8\u1082\'ea\u1089\'f1\u1072\'e0\u1084\'ec\u1080\'e8. \u1041\'c1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1080\'e8 \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1091\'f3\u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 - \u1074\'e2\u1088\'f0\u1086\'ee\u1076\'e4\u1077\'e5 \u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1078\'e6\u1091\'f3\u1088\'f0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1074\'e2 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 ODBC \u1080\'e8\u1083\'eb\u1080\'e8 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1072\'e0 \u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1074\'e2, \u1090\'f2\u1072\'e0\u1082\'ea \u1095\'f7\u1090\'f2\u1086\'ee \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 <\u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1084\'ec\u1080\'e8\u1090\'f2\u1100\'fc> \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1084\'ec\u1091\'f3 \u1083\'eb\u1086\'ee\u1075\'e3-\u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1091\'f3. \u1042\'c2 \u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1084\'ec, \u1074\'e2\u1089\'f1\u1105\'b8, \u1095\'f7\u1090\'f2\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee\u1073\'e1\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1089\'f1\u1080\'e8\u1089\'f1\u1090\'f2\u1077\'e5\u1084\'ec\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 \u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1091\'f3\u1076\'e4\u1086\'ee\u1074\'e2\u1083\'eb\u1077\'e5\u1090\'f2\u1074\'e2\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1100\'fc, \u1080\'e8 \u1085\'ed\u1077\'e5 \u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8\u1093\'f5 \u1078\'e6\u1077\'e5 \u1082\'ea\u1091\'f3\u1076\'e4\u1072\'e0 \u1085\'ed\u1077\'e5 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee... \u1053\'cd\u1077\'e5 \u1093\'f5\u1074\'e2\u1072\'e0\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1088\'f0\u1072\'e0\u1079\'e7\u1074\'e2\u1077\'e5 \u1095\'f7\u1090\'f2\u1086\'ee \u1082\'ea\u1101\'fd\u1096\'f8\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1076\'e4\u1072\'e0 \u1077\'e5\u1097\'f9\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1099\'fb \u1084\'ec\u1077\'e5\u1083\'eb\u1086\'ee\u1095\'f7\u1077\'e5\u1081\'e9, \u1085\'ed\u1086\'ee \u1101\'fd\u1090\'f2\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5 \u1086\'ee\u1073\'e1\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1091\'f3\u1078\'e6\u1077\'e5 \u1074\'e2 \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1097\'f9\u1077\'e5\u1084\'ec, \u1076\'e4\u1072\'e0 \u1080\'e8 \u1087\'ef\u1086\'ee \u1089\'f1\u1086\'ee\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1092\'f4\u1086\'ee\u1088\'f0\u1091\'f3\u1084\'ec\u1072\'e0, \u1086\'ee\u1087\'ef\u1077\'e5\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1074\'e2\u1085\'ed\u1099\'fb\u1084\'ec \u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1072\'e0\u1084\'ec \u1085\'ed\u1072\'e0 \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1080\'e8 \u1089\'f1\u1086\'ee\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1080\'e8\u1084\'ec\u1086\'ee\u1084\'ec\u1091\'f3 changelog'\u1072\'e0 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 0.6 \u1074\'e2\u1080\'e8\u1076\'e4\u1085\'ed\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0 \u1085\'ed\u1072\'e0\u1076\'e4 \u1089\'f1\u1086\'ee\u1074\'e2\u1077\'e5\u1088\'f0\u1096\'f8\u1077\'e5\u1085\'ed\u1089\'f1\u1090\'f2\u1074\'e2\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1099\'fb\u1084\'ec \u1093\'f5\u1086\'ee\u1076\'e4\u1086\'ee\u1084\'ec. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1074\'e2 \u1076\'e4\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1073\'e1\u1091\'f3\u1090\'f2\u1080\'e8\u1074\'e2 (555 \u1082\'ea\u1041\'c1! \u1074\'e2 \u1072\'e0\u1082\'ea\u1090\'f2\u1091\'f3\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1081\'e9 \u1085\'ed\u1072\'e0 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2 \u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc\u1080\'e8 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 devel 0.6), \u1103\'ff \u1087\'ef\u1086\'ee\u1075\'e3\u1088\'f0\u1091\'f3\u1079\'e7\u1080\'e8\u1083\'eb\u1089\'f1\u1103\'ff \u1074\'e2 \u1080\'e8\u1079\'e7\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1094\'f6\u1072\'e0 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1086\'ee\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1072\'e0, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1087\'ef\u1088\'f0\u1080\'e8\u1083\'eb\u1072\'e0\u1075\'e3\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1074\'e2 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1083\'eb\u1077\'e5\u1082\'ea\u1090\'f2\u1077\'e5. \u1055\'cf\u1086\'ee \u1093\'f5\u1086\'ee\u1076\'e4\u1091\'f3 \u1080\'e8\u1079\'e7\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2\u1086\'ee\u1079\'e7\u1085\'ed\u1080\'e8\u1082\'ea\u1083\'eb\u1086\'ee \u1085\'ed\u1077\'e5\u1084\'ec\u1072\'e0\u1083\'eb\u1086\'ee \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1086\'ee\u1074\'e2. \u1057\'d1 \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1078\'e6\u1077\'e5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1096\'f8\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8 \u1088\'f0\u1072\'e0\u1089\'f1\u1087\'ef\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1085\'ed\u1077\'e5\u1089\'f1\u1087\'ef\u1077\'e5\u1096\'f8\u1085\'ed\u1086\'ee \u1080\'e8\u1079\'e7\u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc, FAQ \u1080\'e8 HowTo. \u1050\'ca\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1080\'e8 \u1101\'fd\u1090\'f2\u1080\'e8 \u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5\u1088\'f0\u1080\'e8\u1072\'e0\u1083\'eb\u1099\'fb \u1073\'e1\u1099\'fb\u1083\'eb\u1080\'e8 \u1080\'e8\u1079\'e7\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1099\'fb, \u1086\'ee\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1086\'ee\u1074\'e2 \u1084\'ec\u1077\'e5\u1085\'ed\u1100\'fc\u1096\'f8\u1077\'e5 \u1085\'ed\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1086\'ee. \u1055\'cf\u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1082\'ea\u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1073\'e1\u1099\'fb\u1083\'eb\u1080\'e8 \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1073\'e1\u1077\'e5\u1079\'e7\u1091\'f3\u1089\'f1\u1087\'ef\u1077\'e5\u1096\'f8\u1085\'ed\u1099\'fb\u1084\'ec\u1080\'e8, \u1087\'ef\u1088\'f0\u1080\'e8\u1096\'f8\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc \u1087\'ef\u1086\'ee\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5\u1088\'f0\u1080\'e8\u1072\'e0\u1083\'eb\u1099\'fb \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1094\'f6\u1080\'e8\u1080\'e8, \u1075\'e3\u1076\'e4\u1077\'e5 \u1080\'e8 \u1073\'e1\u1099\'fb\u1083\'eb \u1085\'ed\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1085\'ed \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1077\'e5\u1094\'f6 \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1086\'ee\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1072\'e0, \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1094\'f6\u1080\'e8\u1087\'ef\u1091\'f3 <\u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2\u1089\'f1\u1077\'e5 \u1080\'e8 \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec>. \u1050\'ca\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1074\'e2\u1086\'ee\u1090\'f2 \u1086\'ee\u1085\'ed (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 0): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth none } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +log} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +proxy } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1089\'f1\u1077\'e5 \u1075\'e3\u1077\'e5\u1085\'ed\u1080\'e8\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1077\'e5, \u1082\'ea\u1072\'e0\u1082\'ea \u1075\'e3\u1086\'ee\u1074\'e2\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff, \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee. \u1040\'c0 \u1084\'ec\u1086\'ee\u1103\'ff \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1072\'e0 \u1079\'e7\u1072\'e0\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1083\'eb\u1072\'e0\u1089\'f1\u1100\'fc, \u1082\'ea\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1082\'ea\u1072\'e0\u1082\'ea \u1088\'f0\u1072\'e0\u1079\'e7 \u1074\'e2 \u1090\'f2\u1086\'ee\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1103\'ff \u1087\'ef\u1099\'fb\u1090\'f2\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1089\'f1\u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3 \u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1080\'e8\u1081\'e9 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1089\'f1\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec\u1080\'e8 \u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8 \u1080\'e8 \u1090\'f2.\u1076\'e4. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1072\'e0\u1078\'e6\u1085\'ed\u1086\'ee! \u1050\'ca\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1074\'e2 \u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1085\'ed\u1072\'e0\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1074\'e2 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1081\'e9 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 \u1089\'f1 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1103\'ff\u1077\'e5\u1084\'ec\u1099\'fb\u1084\'ec \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1086\'ee\u1084\'ec 3proxy.exe (\u1087\'ef\u1086\'ee \u1091\'f3\u1084\'ec\u1086\'ee\u1083\'eb\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 bin). \u1048\'c8\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1103\'ff\u1077\'e5\u1084\'ec\u1099\'fb\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1089\'f1 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1087\'ef\u1091\'f3\u1090\'f2\u1080\'e8 \u1082\'ea \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 90% \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1103\'ff\u1093\'f5 \u1101\'fd\u1090\'f2\u1086\'ee\u1090\'f2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc. \u1056\'d0\u1072\'e0\u1079\'e7\u1073\'e1\u1077\'e5\u1088\'f0\u1077\'e5\u1084\'ec\u1089\'f1\u1103\'ff \u1074\'e2 \u1085\'ed\u1077\'e5\u1084\'ec. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1077\'e5 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1095\'f7\u1090\'f2\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1103\'ff \u1085\'ed\u1077\'e5 \u1090\'f2\u1088\'f0\u1077\'e5\u1073\'e1\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1102\'fe\u1090\'f2 \u1074\'e2\u1089\'f1\u1077\'e5 \u1102\'fe\u1079\'e7\u1077\'e5\u1088\'f0\u1099\'fb \u1073\'e1\u1077\'e5\u1079\'e7 \u1080\'e8\u1089\'f1\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1074\'e2\u1099\'fb \u1087\'ef\u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2\u1077\'e5\u1089\'f1\u1100\'fc \u1074\'e2\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee\u1081\'e9 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb \u1082\'ea\u1072\'e0\u1082\'ea\u1080\'e8\u1077\'e5-\u1090\'f2\u1086\'ee \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0, \u1090\'f2\u1086\'ee \u1086\'ee\u1085\'ed\u1080\'e8 \u1085\'ed\u1077\'e5 \u1089\'f1\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1102\'fe\u1090\'f2, \u1086\'ee \u1095\'f7\u1077\'e5\u1084\'ec \u1080\'e8 \u1089\'f1\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2 FAQ. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1086\'ee \u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1077\'e5 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1084\'ec \u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3\u1072\'e0, \u1087\'ef\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1085\'ed\u1077\'e5 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1087\'ef\u1091\'f3\u1090\'f2\u1100\'fc \u1082\'ea \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1091\'f3, \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee, \u1083\'eb\u1086\'ee\u1075\'e3 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1074\'e2\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1101\'fd\u1082\'ea\u1088\'f0\u1072\'e0\u1085\'ed. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8, \u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1094\'f6, \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1077\'e5\u1084\'ec \u1089\'f1\u1072\'e0\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1086\'ee\u1084\'ec \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 3128. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1052\'cc\u1085\'ed\u1086\'ee\u1075\'e3\u1080\'e8\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1099\'fb \u1086\'ee\u1087\'ef\u1091\'f3\u1097\'f9\u1077\'e5\u1085\'ed\u1099\'fb, \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1076\'e4\u1083\'eb\u1103\'ff \u1085\'ed\u1080\'e8\u1093\'f5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1074\'e2\u1086\'ee\u1079\'e7\u1100\'fc\u1084\'ec\u1077\'e5\u1090\'f2 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee \u1091\'f3\u1084\'ec\u1086\'ee\u1083\'eb\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe. \u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2\u1077\'e5 \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1089\'f1\u1082\'ea\u1080\'e8\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2\u1072\'e0\u1096\'f8 \u1083\'eb\u1102\'fe\u1073\'e1\u1080\'e8\u1084\'ec\u1099\'fb\u1081\'e9 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0 - \u1085\'ed\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1102\'fe, \u1082\'ea\u1072\'e0\u1082\'ea \u1091\'f3 \u1074\'e2\u1072\'e0\u1089\'f1, \u1072\'e0 \u1091\'f3 \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1095\'f7\u1077\'e5\u1090\'f2\u1085\'ed\u1086\'ee\u1077\'e5 \u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1091\'f3\u1078\'e6\u1077\'e5 \u1083\'eb\u1077\'e5\u1090\'f2 8 \u1079\'e7\u1072\'e0\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1077\'e5\u1090\'f2 Opera - \u1074\'e2 \u1077\'e5\u1075\'e3\u1086\'ee \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1074\'e2\u1099\'fb\u1093\'f5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1075\'e3\u1072\'e0\u1083\'eb\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 "\u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8", \u1072\'e0 \u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1084\'ec \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1086\'ee\u1082\'ea\u1086\'ee\u1083\'eb\u1086\'ee\u1074\'e2 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc IP \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1080\'e8 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 3128.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1049\rtlch \ltrch\fs20\lang1049\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1074\'e2\u1072\'e0\u1084\'ec \u1085\'ed\u1077\'e5 \u1085\'ed\u1091\'f3\u1078\'e6\u1077\'e5\u1085\'ed \u1091\'f3\u1095\'f7\u1077\'e5\u1090\'f2 \u1080\'e8 \u1082\'ea\u1086\'ee\u1085\'ed\u1090\'f2\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc, \u1084\'ec\u1072\'e0\u1083\'eb\u1086\'ee \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3\u1077\'e5\u1090\'f2 \u1073\'e1\u1077\'e5\u1079\'e7\u1086\'ee\u1087\'ef\u1072\'e0\u1089\'f1\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1089\'f1\u1077\'e5\u1090\'f2\u1080\'e8, \u1072\'e0 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1091\'f3 \u1074\'e2\u1072\'e0\u1089\'f1 \u1073\'e1\u1077\'e5\u1079\'e7\u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9, \u1090\'f2\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1101\'fd\u1090\'f2\u1080\'e8\u1084\'ec \u1080\'e8 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff, \u1087\'ef\u1086\'ee \u1082\'ea\u1088\'f0\u1072\'e0\u1081\'e9\u1085\'ed\u1077\'e5\u1081\'e9 \u1084\'ec\u1077\'e5\u1088\'f0\u1077\'e5 \u1085\'ed\u1072\'e0 \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1077\'e5 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1103\'ff. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1091\'f3\u1076\'e4\u1072\'e0\u1083\'eb\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1091\'f3\u1102\'fe \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3, \u1086\'ee\u1085\'ed\u1072\'e0 \u1085\'ed\u1077\'e5 \u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1072\'e0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1077\'e5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1073\'e1\u1099\'fb \u1077\'e5\u1097\'f9\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 service, \u1076\'e4\u1083\'eb\u1103\'ff \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1082\'ea\u1072\'e0\u1082\'ea \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0, \u1072\'e0 \u1085\'ed\u1077\'e5 \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1084\'ec \u1087\'ef\u1088\'f0\u1080\'e8\u1083\'eb\u1086\'ee\u1078\'e6\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1082\'ea\u1072\'e0\u1082\'ea \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1091\'f3 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 3proxy --install. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1086\'ee \u1085\'ed\u1077\'e5 \u1089\'f1\u1087\'ef\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc! \u1044\'c4\u1077\'e5\u1083\'eb\u1086\'ee \u1074\'e2 \u1090\'f2\u1086\'ee\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1095\'f7\u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1097\'f9\u1077\'e5\u1085\'ed \u1087\'ef\u1088\'f0\u1080\'e8\u1083\'eb\u1086\'ee\u1078\'e6\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec, 3proxy \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1089\'f1\u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3 \u1074\'e2\u1099\'fb\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1101\'fd\u1082\'ea\u1088\'f0\u1072\'e0\u1085\'ed \u1089\'f1\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1086\'ee\u1073\'e1 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1093\'f5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1072\'e0\u1093\'f5 \u1080\'e8 \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1072\'e0\u1093\'f5 \u1080\'e8 \u1074\'e2\u1072\'e0\u1084\'ec \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8. \u1055\'cf\u1088\'f0\u1080\'e8\u1095\'f7\u1077\'e5\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1088\'f0\u1072\'e0\u1076\'e4\u1091\'f3\u1077\'e5\u1090\'f2, \u1089\'f1 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1076\'e4\u1072\'e0 \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1080\'e8 \u1080\'e8 \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1080\'e8 \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5, \u1075\'e3\u1076\'e4\u1077\'e5 \u1101\'fd\u1090\'f2\u1072\'e0 \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1089\'f1\u1091\'f3\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2. \u1040\'c0 \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1076\'e4\u1080\'e8\u1080\'e8 \u1086\'ee\u1073\'e1\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1087\'ef\u1086\'ee\u1084\'ec\u1086\'ee\u1075\'e3\u1072\'e0\u1077\'e5\u1090\'f2. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1072\'e0, \u1080\'e8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee \u1074\'e2\u1072\'e0\u1078\'e6\u1085\'ed\u1086\'ee\u1077\'e5 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1085\'ed\u1072\'e0\u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 - \u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0\u1082\'ea\u1080\'e8\u1093\'f5 \u1083\'eb\u1080\'e8\u1096\'f8\u1085\'ed\u1080\'e8\u1093\'f5 \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1086\'ee\u1074\'e2, \u1090\'f2\u1072\'e0\u1073\'e1\u1091\'f3\u1083\'eb\u1103\'ff\u1094\'f6\u1080\'e8\u1081\'e9 \u1080\'e8 \u1090\'f2.\u1087\'ef. \u1079\'e7\u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1074\'e2 \u1074\'e2 \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1080\'e8, \u1080\'e8\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1072\'e0 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1089\'f1\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1079\'e7\u1072\'e0\u1082\'ea\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1080\'e8 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2, \u1085\'ed\u1077\'e5 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1054\'ce\u1087\'ef\u1080\'e8\u1096\'f8\u1077\'e5\u1084\'ec \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1087\'ef\u1086\'ee\u1083\'eb\u1072\'e0\u1075\'e3\u1072\'e0\u1077\'e5\u1084\'ec\u1091\'f3\u1102\'fe \u1089\'f1\u1080\'e8\u1090\'f2\u1091\'f3\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe. \u1053\'cd\u1072\'e0\u1076\'e4\u1086\'ee "\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2" \u1085\'ed\u1072\'e0 3 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1 IP \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0\u1084\'ec\u1080\'e8 192.168.0.2,192.168.0.3,192.168.0.4, \u1074\'e2 \u1082\'ea\u1072\'e0\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1074\'e2\u1099\'fb\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0\u1077\'e5\u1090\'f2 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0 \u1089\'f1 \u1076\'e4\u1074\'e2\u1091\'f3\u1084\'ec\u1103\'ff \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1074\'e2\u1099\'fb\u1084\'ec\u1080\'e8 \u1082\'ea\u1072\'e0\u1088\'f0\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8, \u1074\'e2\u1085\'ed\u1091\'f3\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1080\'e8\u1084\'ec IP-\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1084\'ec 192.168.0.1 \u1080\'e8 "\u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1084\'ec", \u1090\'f2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1084\'ec \u1086\'ee\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1084\'ec 211.80.11.12. \u1054\'ce\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0 \u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1099\'fb \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0 DNS-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2: 213.153.100.1 \u1080\'e8 213.153.101.1. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1059\'d3 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1077\'e5\u1085\'ed SMTP-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 smtp.provider.ru. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1077\'e5 \u1089\'f1 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0\u1084\'ec\u1080\'e8 192.168.0.2-192.168.0.4 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1102\'fe\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1080\'e8 \u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2, \u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2, \u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2\u1080\'e8\u1084\'ec \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1091\'f3 c:\\3proxy, \u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2\u1080\'e8\u1084\'ec - \u1101\'fd\u1090\'f2\u1086\'ee \u1075\'e3\u1088\'f0\u1086\'ee\u1084\'ec\u1082\'ea\u1086\'ee \u1089\'f1\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1086\'ee, \u1076\'e4\u1083\'eb\u1103\'ff \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1072\'e0 \u1077\'e5\u1075\'e3\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1088\'f0\u1072\'e0\u1089\'f1\u1087\'ef\u1072\'e0\u1082\'ea\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8\u1079\'e7 zip-\u1072\'e0\u1088\'f0\u1093\'f5\u1080\'e8\u1074\'e2\u1072\'e0 \u1074\'e2 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1091\'f3\u1102\'fe \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1091\'f3, \u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1100\'fc \u1101\'fd\u1090\'f2\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 c:\\3proxy (\u1087\'ef\u1088\'f0\u1086\'ee \u1080\'e8\u1085\'ed\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1083\'eb\u1103\'ff\u1094\'f6\u1080\'e8\u1102\'fe \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1089\'f1\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1086\'ee \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5). } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1081\'e9\u1084\'ec\u1077\'e5\u1084\'ec\u1089\'f1\u1103\'ff \u1076\'e4\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1077\'e5\u1081\'e9\u1096\'f8\u1080\'e8\u1084\'ec \u1091\'f3\u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1083\'eb\u1103\'ff \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1072\'e0 \u1091\'f3\u1082\'ea\u1072\'e0\u1078\'e6\u1077\'e5\u1084\'ec \u1074\'e2\u1085\'ed\u1091\'f3\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1080\'e8\u1081\'e9: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1074\'e2\u1099\'fb \u1074\'e2\u1077\'e5\u1076\'e4\u1100\'fc \u1087\'ef\u1086\'ee\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1077\'e5\u1090\'f2\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee \u1079\'e7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1090\'f2\u1100\'fc IP \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1074\'e2\u1086\'ee\u1081\'e9 \u1082\'ea\u1072\'e0\u1088\'f0\u1090\'f2\u1099\'fb \u1042\'c2\u1040\'c0\u1064\'d8\u1045\'c5\u1043\'c3\u1054\'ce \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0, \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1085\'ed\u1072\'e0 \u1083\'eb\u1086\'ee\u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1091\'f3\u1102\'fe \u1089\'f1\u1077\'e5\u1090\'f2\u1100\'fc. \u1069\'dd\u1090\'f2\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1090\'f2\u1086\'ee\u1090\'f2 IP \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1074\'e2 \u1083\'eb\u1086\'ee\u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1081\'e9 \u1089\'f1\u1077\'e5\u1090\'f2\u1080\'e8, \u1082\'ea \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec\u1091\'f3 \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1097\'f9\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1099\'fb \u1080\'e8 \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9, \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1085\'ed \u1074\'e2 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5 \u1074\'e2 \u1082\'ea\u1072\'e0\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8 \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1081\'e9 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1099\'fb \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0 \u1101\'fd\u1090\'f2\u1086\'ee\u1090\'f2 IP \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1074\'e2\u1099\'fb \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1073\'e1\u1099\'fb\u1083\'eb\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1086\'ee\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0, \u1082\'ea\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1086\'ee, \u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1074\'e2\u1099\'fb\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1083\'eb\u1080\'e8\u1085\'ed\u1080\'e8\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee \u1090\'f2\u1072\'e0\u1082\'ea \u1085\'ed\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1081\'e9 "\u1088\'f0\u1077\'e5\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1081\'e9" IP, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1077\'e5\u1085\'ed \u1080\'e8\u1079\'e7 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1072\'e0 (\u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee \u1085\'ed\u1077\'e5 \u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee).} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1078\'e6\u1077\'e5 \u1091\'f3 \u1074\'e2\u1072\'e0\u1089\'f1 \u1082\'ea\u1086\'ee\u1084\'ec\u1084\'ec\u1091\'f3\u1090\'f2\u1080\'e8\u1088\'f0\u1091\'f3\u1077\'e5\u1084\'ec\u1099\'fb\u1081\'e9 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef: dial-up \u1080\'e8\u1083\'eb\u1080\'e8 vpn \u1080\'e8 \u1074\'e2\u1072\'e0\u1096\'f8 \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1081\'e9 IP \u1088\'f0\u1077\'e5\u1075\'e3\u1091\'f3\u1083\'eb\u1103\'ff\u1088\'f0\u1085\'ed\u1086\'ee \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1090\'f2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc 2 \u1089\'f1\u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1\u1072\'e0 \u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1083\'eb\u1077\'e5\u1084\'ec\u1099\'fb. \u1055\'cf\u1077\'e5\u1088\'f0\u1074\'e2\u1099\'fb\u1081\'e9 \u8212\'97 \u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1082\'ea\u1088\'f0\u1080\'e8\u1087\'ef\u1090\'f2, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1076\'e4\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1090\'f2\u1100\'fc \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1081\'e9 IP \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 include \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee $ (\u1101\'fd\u1090\'f2\u1086\'ee \u1084\'ec\u1099\'fb \u1086\'ee\u1073\'e1\u1089\'f1\u1091\'f3\u1076\'e4\u1080\'e8\u1084\'ec \u1087\'ef\u1086\'ee\u1079\'e7\u1078\'e6\u1077\'e5). \u1042\'c2\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1081\'e9 \u8212\'97 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +external 0.0.0.0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1077\'e5 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 - \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1084\'ec\u1080\'e8 external \u1080\'e8 internal \u1084\'ec\u1099\'fb \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1084\'ec \u1074\'e2\u1085\'ed\u1091\'f3\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1080\'e8\u1077\'e5 \u1080\'e8 \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1077\'e5 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1099\'fb, \u1090\'f2\u1072\'e0\u1082\'ea \u1089\'f1\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc, \u1075\'e3\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee, \u1085\'ed\u1072\'e0 \u1074\'e2\u1077\'e5\u1089\'f1\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1080\'e8 \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1076\'e4\u1083\'eb\u1103\'ff \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1093\'f5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1074\'e2\u1086\'ee\u1080\'e8 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1099\'fb, \u1090\'f2\u1086\'ee \u1101\'fd\u1090\'f2\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1 \u1087\'ef\u1086\'ee\u1084\'ec\u1086\'ee\u1097\'f9\u1100\'fc\u1102\'fe \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb -e \u1080\'e8 -i, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1084\'ec \u1089\'f1\u1086\'ee\u1074\'e2\u1086\'ee\u1082\'ea\u1091\'f3\u1087\'ef\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy -i192.168.0.1 -e211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1076\'e4\u1083\'eb\u1103\'ff \u1091\'f3\u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1094\'f6\u1077\'e5\u1089\'f1\u1089\'f1\u1072\'e0 \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed \u1093\'f5\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2 \u1091\'f3\u1082\'ea\u1072\'e0\u1078\'e6\u1077\'e5\u1084\'ec DNS-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 - \u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1086\'ee \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc DNS-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0 - \u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1084\'ec \u1082\'ea\u1101\'fd\u1096\'f8\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 DNS: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1076\'e4\u1077\'e5 \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee 65536 \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1077\'e5, \u1078\'e6\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1102\'fe\u1097\'f9\u1077\'e5\u1077\'e5 \u1089\'f1\u1090\'f2\u1077\'e5\u1087\'ef\u1077\'e5\u1085\'ed\u1100\'fc \u1095\'f7\u1080\'e8\u1089\'f1\u1083\'eb\u1072\'e0 2 \u1080\'e8 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1086\'ee \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1086\'ee\u1077\'e5. \u1050\'ca\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1086\'ee\u1090\'f2 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff nscache \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1103\'ff\u1084\'ec\u1091\'f3\u1102\'fe \u1079\'e7\u1072\'e0\u1074\'e2\u1080\'e8\u1089\'f1\u1080\'e8\u1090\'f2 \u1082\'ea\u1086\'ee\u1083\'eb\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1086\'ee \u1086\'ee\u1087\'ef\u1077\'e5\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9 \u1087\'ef\u1072\'e0\u1084\'ec\u1103\'ff\u1090\'f2\u1080\'e8, \u1079\'e7\u1072\'e0\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1077\'e5\u1084\'ec\u1086\'ee\u1081\'e9 3proxy. \u1048\'c8\u1090\'f2\u1072\'e0\u1082\'ea, \u1085\'ed\u1072\'e0 \u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec \u1101\'fd\u1090\'f2\u1072\'e0\u1087\'ef\u1077\'e5 \u1085\'ed\u1072\'e0\u1096\'f8 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1080\'e8\u1090\'f2 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1084\'ec \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1086\'ee\u1084\'ec (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 1): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +log} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth none } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +proxy } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1078\'e6\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1085\'ed\u1072\'e0\u1084\'ec \u1077\'e5\u1097\'f9\u1077\'e5 \u1085\'ed\u1077\'e5 \u1093\'f5\u1074\'e2\u1072\'e0\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1086\'ee\u1094\'f6\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1086\'ee\u1074\'e2 \u1080\'e8 \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1086\'ee\u1082\'ea, \u1074\'e2\u1077\'e5\u1076\'e4\u1100\'fc \u1085\'ed\u1072\'e0 \u1101\'fd\u1082\'ea\u1088\'f0\u1072\'e0\u1085\'ed\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3 \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1073\'e1\u1099\'fb\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1083\'eb\u1077\'e5\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2! \u1055\'cf\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 log \u1085\'ed\u1072\'e0 \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1088\'f0\u1072\'e0\u1089\'f1\u1096\'f8\u1080\'e8\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1091\'f3\u1102\'fe } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1072\'e0\u1082\'ea\u1080\'e8\u1084\'ec \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1086\'ee\u1084\'ec, \u1084\'ec\u1099\'fb \u1076\'e4\u1072\'e0\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 \u1089\'f1\u1086\'ee\u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 c:\\3proxy\\logs \u1080\'e8 \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1099\'fb\u1081\'e9 \u1076\'e4\u1077\'e5\u1085\'ed\u1100\'fc \u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1085\'ed\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1086\'ee\u1074\'e2\u1099\'fb\u1081\'e9 \u1083\'eb\u1086\'ee\u1075\'e3 (\u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1103\'ff D). \u1045\'c5\u1097\'f9\u1077\'e5 \u1088\'f0\u1072\'e0\u1079\'e7 \u1085\'ed\u1072\'e0\u1087\'ef\u1086\'ee\u1084\'ec\u1085\'ed\u1102\'fe, \u1095\'f7\u1090\'f2\u1086\'ee \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1076\'e4\u1080\'e8\u1080\'e8 \u1090\'f2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5 \u1078\'e6\u1077\'e5 \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2\u1099\'fb\u1074\'e2\u1086\'ee\u1076\'e4 \u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1074\'e2 \u1085\'ed\u1072\'e0 \u1101\'fd\u1082\'ea\u1088\'f0\u1072\'e0\u1085\'ed - \u1090\'f2\u1072\'e0\u1082\'ea \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1085\'ed\u1077\'e5\u1077\'e5 \u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0\u1090\'f2\u1100\'fc \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1080\'e8. \u1048\'c8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1076\'e4\u1086\'ee\u1073\'e1\u1072\'e0\u1074\'e2\u1080\'e8\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1076\'e4\u1083\'eb\u1103\'ff \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 \u1089\'f1 \u1083\'eb\u1086\'ee\u1075\'e3\u1072\'e0\u1084\'ec\u1080\'e8 \u1089\'f1\u1086\'ee\u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1103\'ff\u1083\'eb\u1080\'e8\u1089\'f1\u1100\'fc \u1083\'eb\u1080\'e8\u1096\'f8\u1100\'fc \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1085\'ed\u1080\'e8\u1077\'e5 30 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1086\'ee\u1074\'e2, \u1072\'e0 \u1090\'f2\u1086\'ee \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1090\'f2\u1072\'e0\u1082\'ea \u1073\'e1\u1099\'fb\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee \u1088\'f0\u1072\'e0\u1089\'f1\u1090\'f2\u1091\'f3\u1090\'f2, \u1072\'e0 \u1076\'e4\u1080\'e8\u1089\'f1\u1082\'ea \u1085\'ed\u1077\'e5 \u1088\'f0\u1077\'e5\u1079\'e7\u1080\'e8\u1085\'ed\u1086\'ee\u1074\'e2\u1099\'fb\u1081\'e9! } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1089\'f1\u1087\'ef\u1086\'ee\u1084\'ec\u1080\'e8\u1085\'ed\u1072\'e0\u1077\'e5\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee 3proxy \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0\u1084\'ec \u1074\'e2\u1080\'e8\u1076\'e4\u1086\'ee\u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2 \u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1074\'e2, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1080\'e8\u1093\'f5 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1084\'ec \u1083\'eb\u1086\'ee\u1075\'e3-\u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec. \u1050\'ca\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3 \u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1074\'e2\u1077\'e5\u1090\'f2\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0 www.wrspy.ru \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1083\'eb\u1080\'e8\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1080\'e8, \u1095\'f7\u1090\'f2\u1086\'ee \u1089\'f1\u1077\'e5\u1081\'e9\u1095\'f7\u1072\'e0\u1089\'f1 \u1085\'ed\u1077\'e5\u1084\'ec\u1072\'e0\u1083\'eb\u1086\'ee\u1074\'e2\u1072\'e0\u1078\'e6\u1085\'ed\u1086\'ee, \u1073\'e1\u1077\'e5\u1089\'f1\u1087\'ef\u1083\'eb\u1072\'e0\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9 \u1083\'eb\u1086\'ee\u1075\'e3-\u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0 Wrspy \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1086\'ee\u1090\'f2\u1077\'e5\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1084\'ec\u1084\'ec\u1080\'e8\u1089\'f1\u1090\'f2\u1072\'e0. \u1058\'d2\u1077\'e5\u1084\'ec \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1095\'f7\u1090\'f2\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0 \u1083\'eb\u1102\'fe\u1073\'e1\u1077\'e5\u1079\'e7\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1096\'f8\u1077\'e5\u1083\'eb \u1085\'ed\u1072\'e0\u1074\'e2\u1089\'f1\u1090\'f2\u1088\'f0\u1077\'e5\u1095\'f7\u1091\'f3 \u1084\'ec\u1086\'ee\u1077\'e5\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1100\'fc\u1073\'e1\u1077\'e5 \u1080\'e8 \u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1085\'ed\u1072\'e0\u1103\'ff \u1089\'f1 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 1.65 \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1080\'e8\u1083\'eb\u1072\'e0\u1089\'f1\u1100\'fc, \u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1094\'f6, \u1090\'f2\u1072\'e0\u1082\'ea \u1089\'f1\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc, \u1086\'ee\u1087\'ef\u1090\'f2\u1080\'e8\u1084\'ec\u1080\'e8\u1079\'e7\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff \u1087\'ef\u1086\'ee\u1076\'e4\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1082\'ea\u1072\'e0 3proxy - \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1074\'e2 \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1085\'ed\u1080\'e8\u1078\'e6\u1077\'e5 \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1072\'e0:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc \u1074\'e2 \u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1077\'e5\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 0.6.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1091\'f3\u1090\'f2 \u1074\'e2\u1080\'e8\u1076\'e4: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +192.168.0.4 - ivanov - [02/Jun/2006:11:13:56 +0500] } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +"GET http://svalka.biz/uploads/posts/1147559374_00.jpg HTTP/1.0" 000 17497 457 PROXY/http://svalka.biz:3128 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1076\'e4\u1077\'e5 \u1080\'e8\u1076\'e4\u1091\'f3\u1090\'f2 \u1087\'ef\u1086\'ee \u1087\'ef\u1086\'ee\u1088\'f0\u1103\'ff\u1076\'e4\u1082\'ea\u1091\'f3: IP \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1077\'e5\u1081\'e9 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1094\'f6\u1080\'e8\u1080\'e8 - \u1080\'e8\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff - \u1095\'f7\u1080\'e8\u1089\'f1\u1083\'eb\u1086\'ee, \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1094\'f6, \u1075\'e3\u1086\'ee\u1076\'e4 \u1080\'e8 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1103\'ff - \u1074\'e2\u1080\'e8\u1076\'e4 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1072\'e0 - URL - \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0 \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1082\'ea\u1080\'e8 (\u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 000 - \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2, \u1086\'ee\u1096\'f8\u1080\'e8\u1073\'e1\u1086\'ee\u1082\'ea \u1085\'ed\u1077\'e5\u1090\'f2) - \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1103\'ff\u1090\'f2\u1086\'ee \u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2 - \u1086\'ee\u1090\'f2\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1086\'ee \u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2 - \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1080\'e8\u1089\'f1 - \u1093\'f5\u1086\'ee\u1089\'f1\u1090\'f2 - \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2, \u1087\'ef\u1086\'ee \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec\u1091\'f3 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2 \u1089\'f1\u1074\'e2\u1103\'ff\u1079\'e7\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1089\'f1 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1080\'e8\u1089\'f1\u1086\'ee\u1084\'ec.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1077\'e5\u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1079\'e7\u1072\'e0\u1073\'e1\u1077\'e5\u1075\'e3\u1072\'e0\u1103\'ff \u1074\'e2\u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4, \u1089\'f1\u1082\'ea\u1072\'e0\u1078\'e6\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1074\'e2 3proxy \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1091\'f3\u1076\'e4\u1086\'ee\u1074\'e2\u1083\'eb\u1077\'e5\u1090\'f2\u1074\'e2\u1086\'ee\u1088\'f0\u1103\'ff\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1086\'ee\u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb, , \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1 \u1080\'e8\u1083\'eb\u1080\'e8 \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1081\'e9 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb \u1089\'f1 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1084\'ec\u1080\'e8 \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1091\'f3 \u1080\'e8 \u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1094\'f6, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1074\'e2\u1099\'fb \u1093\'f5\u1086\'ee\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5 \u1077\'e5\u1097\'f9\u1077\'e5 \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1077\'e5 \u1089\'f1\u1101\'fd\u1082\'ea\u1086\'ee\u1085\'ed\u1086\'ee\u1084\'ec\u1080\'e8\u1090\'f2\u1100\'fc \u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1072\'e0 \u1085\'ed\u1072\'e0 \u1076\'e4\u1080\'e8\u1089\'f1\u1082\'ea\u1077\'e5 \u1087\'ef\u1086\'ee\u1076\'e4 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8, \u1090\'f2\u1086\'ee \u1080\'e8\u1093\'f5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1072\'e0\u1088\'f0\u1093\'f5\u1080\'e8\u1074\'e2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1 \u1087\'ef\u1086\'ee\u1084\'ec\u1086\'ee\u1097\'f9\u1100\'fc\u1102\'fe \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1075\'e3\u1086\'ee \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1072\'e0\u1088\'f0\u1093\'f5\u1080\'e8\u1074\'e2\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1074\'e2\u1086\'ee\u1090\'f2 \u1090\'f2\u1072\'e0\u1082\'ea: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +(\u1087\'ef\u1086\'ee\u1076\'e4\u1089\'f1\u1082\'ea\u1072\'e0\u1079\'e7\u1082\'ea\u1091\'f3 \u1076\'e4\u1083\'eb\u1103\'ff \u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1081\'e9 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1085\'ed\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1080\'e8 WinRAR \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0\u1081\'e9\u1090\'f2\u1080\'e8 \u1074\'e2 \u1077\'e5\u1075\'e3\u1086\'ee \u1078\'e6\u1077\'e5 Help'\u1077\'e5) } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1054\'ce\u1073\'e1\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5 \u1074\'e2\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1085\'ed\u1072\'e0 \u1090\'f2\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee \u1087\'ef\u1091\'f3\u1090\'f2\u1100\'fc \u1082\'ea \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1091\'f3 \u1079\'e7\u1072\'e0\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed \u1074\'e2 \u1089\'f1\u1082\'ea\u1086\'ee\u1073\'e1\u1082\'ea\u1080\'e8. \u1069\'dd\u1090\'f2\u1086\'ee \u1089\'f1\u1074\'e2\u1103\'ff\u1079\'e7\u1072\'e0\u1085\'ed\u1086\'ee \u1089\'f1 \u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1095\'f7\u1080\'e8\u1077\'e5\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1072\'e0 \u1074\'e2 \u1087\'ef\u1091\'f3\u1090\'f2\u1080\'e8. \u1040\'c0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1079\'e7\u1072\'e0\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1082\'ea\u1072\'e0\u1074\'e2\u1099\'fb\u1095\'f7\u1082\'ea\u1080\'e8 \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1077\'e5 \u1087\'ef\u1091\'f3\u1090\'f2\u1080\'e8 Windows, \u1089\'f1\u1086\'ee\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1072\'e0\u1097\'f9\u1080\'e8\u1077\'e5 \u1074\'e2 \u1089\'f1\u1077\'e5\u1073\'e1\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1099\'fb \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee $.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1089\'f1\u1086\'ee\u1073\'e1\u1080\'e8\u1088\'f0\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1074\'e2\u1080\'e8\u1085\'ed\u1091\'f3\u1090\'f2\u1091\'f3\u1102\'fe \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1102\'fe (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 2) \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth none } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +proxy -t} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1047\'c7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1077\'e5\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1089\'f1 \u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1077\'e5\u1081\'e9 -t , \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0\u1103\'ff \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1085\'ed\u1077\'e5 \u1074\'e2\u1099\'fb\u1074\'e2\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2 \u1083\'eb\u1086\'ee\u1075\'e3 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1077\'e5\u1073\'e1\u1085\'ed\u1099\'fb\u1077\'e5 \u1089\'f1\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1086\'ee \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1077\'e5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1. \u1069\'dd\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1075\'e3\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2 \u1076\'e4\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1077\'e5\u1081\'e9\u1096\'f8\u1077\'e5\u1084\'ec, \u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8 \u1082\'ea\u1072\'e0\u1082\'ea\u1080\'e8\u1084\'ec-\u1085\'ed\u1080\'e8\u1073\'e1\u1091\'f3\u1076\'e4\u1100\'fc \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1089\'f1\u1077\'e5 \u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5 \u1080\'e8 \u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5! \u1055\'cf\u1088\'f0\u1086\'ee\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1072\'e0\u1077\'e5\u1084\'ec. \u1055\'cf\u1086\'ee\u1076\'e4\u1091\'f3\u1084\'ec\u1072\'e0\u1077\'e5\u1084\'ec \u1086\'ee \u1090\'f2\u1086\'ee\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee, \u1072\'e0 \u1082\'ea\u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb, \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2, \u1080\'e8 \u1085\'ed\u1077\'e5 \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1090\'f2\u1086\'ee\u1083\'eb\u1089\'f1\u1090\'f2\u1099\'fb\u1081\'e9, \u1093\'f5\u1086\'ee\u1088\'f0\u1086\'ee\u1096\'f8\u1086\'ee, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1073\'e1\u1099\'fb 128 \u1082\'ea\u1073\'e1, \u1072\'e0 \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1076\'e4\u1080\'e8\u1072\'e0\u1083\'eb\u1072\'e0\u1087\'ef \u1085\'ed\u1072\'e0 33.6? \u1053\'cd\u1072\'e0\u1095\'f7\u1080\'e8\u1085\'ed\u1072\'e0\u1077\'e5\u1084\'ec \u1088\'f0\u1077\'e5\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc, \u1090\'f2\u1086\'ee\u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1097\'f9\u1080\'e8! } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +bandlimin 240000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1072\'e0\u1077\'e5\u1084\'ec \u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0\u1084\'ec \u1089\'f1 IP-\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0\u1084\'ec\u1080\'e8 192.168.0.2 \u1080\'e8 192.168.0.3 \u1089\'f1\u1086\'ee \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc\u1102\'fe 24 \u1082\'ea\u1073\'e1\u1080\'e8\u1090\'f2 \u1074\'e2 \u1089\'f1\u1077\'e5\u1082\'ea\u1091\'f3\u1085\'ed\u1076\'e4\u1091\'f3, \u1087\'ef\u1088\'f0\u1080\'e8\u1095\'f7\u1077\'e5\u1084\'ec \u1101\'fd\u1090\'f2\u1086\'ee 24 \u1082\'ea\u1073\'e1\u1080\'e8\u1090\'f2 \u1087\'ef\u1088\'f0\u1080\'e8\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1090\'f2\u1089\'f1\u1103\'ff \u1085\'ed\u1077\'e5 \u1085\'ed\u1072\'e0 \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1099\'fb\u1081\'e9 \u1080\'e8\u1079\'e7 \u1101\'fd\u1090\'f2\u1080\'e8\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2, \u1072\'e0 \u1085\'ed\u1072\'e0 \u1086\'ee\u1073\'e1\u1072\'e0 \u1074\'e2 \u1089\'f1\u1086\'ee\u1074\'e2\u1086\'ee\u1082\'ea\u1091\'f3\u1087\'ef\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8, \u1090\'f2.\u1077\'e5. \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1086\'ee\u1073\'e1\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1099\'fb \u1089\'f1 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1089\'f1\u1090\'f2\u1088\'f0\u1099\'fb\u1093\'f5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1086\'ee\u1074\'e2, \u1090\'f2\u1086\'ee \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1084\'ec\u1091\'f3 \u1087\'ef\u1088\'f0\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1087\'ef\u1086\'ee 12 \u1082\'ea\u1073\'e1\u1080\'e8\u1090\'f2 \u1074\'e2 \u1089\'f1\u1077\'e5\u1082\'ea\u1091\'f3\u1085\'ed\u1076\'e4\u1091\'f3 (\u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc\u1090\'f2\u1077\'e5, \u1082\'ea\u1080\'e8\u1083\'eb\u1086\'ee\u1073\'e1\u1080\'e8\u1090\'f2, \u1072\'e0 \u1085\'ed\u1077\'e5 \u1082\'ea\u1080\'e8\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1082\'ea\u1080\'e8\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2\u1099\'fb, \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1077\'e5 \u1095\'f7\u1080\'e8\u1089\'f1\u1083\'eb\u1072\'e0 \u1085\'ed\u1072\'e0 8) } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1072\'e0 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3 \u1089\'f1\u1095\'f7\u1072\'e0\u1089\'f1\u1090\'f2\u1083\'eb\u1080\'e8\u1074\'e2\u1095\'f7\u1080\'e8\u1082\'ea\u1091\'f3 \u1077\'e5\u1076\'e4\u1080\'e8\u1085\'ed\u1086\'ee\u1083\'eb\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc 48 \u1082\'ea\u1073\'e1\u1080\'e8\u1090\'f2 \u1074\'e2 \u1089\'f1\u1077\'e5\u1082\'ea\u1091\'f3\u1085\'ed\u1076\'e4\u1091\'f3 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1080\'e8\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1091\'f3\u1102\'fe \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1090\'f2\u1086\'ee\u1078\'e6\u1077\'e5 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1080\'e8\u1084\'ec \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec \u1076\'e4\u1086\'ee 24 \u1082\'ea\u1080\'e8\u1083\'eb\u1086\'ee\u1073\'e1\u1080\'e8\u1090\'f2 \u1074\'e2 \u1089\'f1\u1077\'e5\u1082\'ea\u1091\'f3\u1085\'ed\u1076\'e4\u1091\'f3 (\u1089\'f1\u1077\'e5\u1081\'e9\u1095\'f7\u1072\'e0\u1089\'f1 \u1101\'fd\u1090\'f2\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1074\'e2 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 devel 0.6) \u1053\'cd\u1091\'f3 \u1080\'e8 \u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1094\'f6, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1074\'e2\u1099\'fb \u1093\'f5\u1086\'ee\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1101\'fd\u1090\'f2\u1080\'e8 \u1078\'e6\u1077\'e5\u1089\'f1\u1090\'f2\u1082\'ea\u1080\'e8\u1077\'e5 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1085\'ed\u1077\'e5 \u1082\'ea\u1072\'e0\u1089\'f1\u1072\'e0\u1083\'eb\u1080\'e8\u1089\'f1\u1100\'fc, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1080\'e8\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb, \u1090\'f2\u1086\'ee \u1089\'f1\u1085\'ed\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1077\'e5 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1085\'ed\u1072\'e0 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 110: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8 \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1091\'f3\u1076\'e4\u1100\'fc\u1090\'f2\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1101\'fd\u1090\'f2\u1091\'f3 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 \u1055\'cf\u1045\'c5\u1056\'d0\u1045\'c5\u1044\'c4 \u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1080\'e8\u1084\'ec\u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1084\'ec\u1080\'e8 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 - \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1076\'e4\u1086\'ee \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1091\'f3\u1076\'e4\u1086\'ee\u1074\'e2\u1083\'eb\u1077\'e5\u1090\'f2\u1074\'e2\u1086\'ee\u1088\'f0\u1103\'ff\u1102\'fe\u1097\'f9\u1077\'e5\u1075\'e3\u1086\'ee \u1091\'f3\u1089\'f1\u1083\'eb\u1086\'ee\u1074\'e2\u1080\'e8\u1103\'ff. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1080\'e8\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff-\u1079\'e7\u1072\'e0\u1082\'ea\u1072\'e0\u1095\'f7\u1080\'e8\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1084\'ec\u1099\'fb \u1091\'f3\u1078\'e6\u1077\'e5 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1083\'eb\u1080\'e8, \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1072\'e0\u1077\'e5\u1084\'ec \u1079\'e7\u1072\'e0\u1082\'ea\u1088\'f0\u1091\'f3\u1095\'f7\u1080\'e8\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1075\'e3\u1072\'e0\u1081\'e9\u1082\'ea\u1080\'e8. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0\u1084\'ec \u1087\'ef\u1086\'ee\u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3\u1090\'f2 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb deny \u1080\'e8 allow } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1089\'f1 IP .4 \u1074\'e2 \u1085\'ed\u1077\'e5\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1077\'e5\u1077\'e5 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1085\'ed\u1103\'ff\u1084\'ec } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1072\'e0\u1077\'e5\u1084\'ec \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1074\'e2 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1089\'f1 IP .4 \u1080\'e8\u1089\'f1\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1089\'f1 \u1087\'ef\u1086\'ee\u1085\'ed\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0 \u1087\'ef\u1086\'ee \u1087\'ef\u1103\'ff\u1090\'f2\u1085\'ed\u1080\'e8\u1094\'f6\u1091\'f3 \u1089\'f1 9 \u1095\'f7\u1072\'e0\u1089\'f1\u1086\'ee\u1074\'e2 \u1091\'f3\u1090\'f2\u1088\'f0\u1072\'e0 \u1076\'e4\u1086\'ee 6 \u1074\'e2\u1077\'e5\u1095\'f7\u1077\'e5\u1088\'f0\u1072\'e0, \u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1099\'fb \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1085\'ed\u1072\'e0 \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1077\'e5 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1099\'fb, \u1090\'f2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8 \u1089\'f1 FTP-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2 \u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc, \u1080\'e8 HTTPS, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1076\'e4\u1083\'eb\u1103\'ff \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea FTP \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0, \u1074\'e2 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1102\'fe\u1097\'f9\u1077\'e5\u1084\'ec \u1086\'ee\u1082\'ea\u1085\'ed\u1077\'e5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1077\'e5\u1082\'ea \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1072\'e0 (\u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1099\'fb \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0) \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1075\'e3\u1072\'e0\u1083\'eb\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1080\'e8\u1074\'e2 FTP \u1080\'e8 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc IP \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1080\'e8 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff HTTP (\u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 3128), \u1072\'e0 \u1074\'e2\u1086\'ee\u1074\'e2\u1089\'f1\u1077\'e5 \u1085\'ed\u1077\'e5 21, \u1082\'ea\u1072\'e0\u1082\'ea \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1087\'ef\u1086\'ee\u1076\'e4\u1091\'f3\u1084\'ec\u1072\'e0\u1090\'f2\u1100\'fc. \u1048\'c8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee \u1075\'e3\u1088\'f0\u1091\'f3\u1089\'f1\u1090\'f2\u1085\'ed\u1086\'ee\u1077\'e5 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5. \u1058\'d2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1072\'e0\u1103\'ff \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1072\'e0 Opera \u1087\'ef\u1086\'ee\u1076\'e4 \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0\u1086\'ee\u1084\'ec 9 \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1088\'f0\u1088\'f0\u1077\'e5\u1082\'ea\u1090\'f2\u1085\'ed\u1086\'ee \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1089\'f1 \u1092\'f4\u1090\'f2\u1087\'ef-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0\u1084\'ec\u1080\'e8, \u1090\'f2\u1088\'f0\u1077\'e5\u1073\'e1\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1084\'ec\u1080\'e8 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe, \u1090\'f2\u1072\'e0\u1082\'ea \u1095\'f7\u1090\'f2\u1086\'ee \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2\u1077\'e5\u1088\'f0\u1085\'ed\u1091\'f3\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1082\'ea \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 8, \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff IE \u1080\'e8\u1083\'eb\u1080\'e8 FireFox. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1072\'e0 \u1079\'e7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1072\'e0\u1077\'e5\u1084\'ec \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee WEB-\u1089\'f1\u1077\'e5\u1088\'f0\u1092\'f4\u1080\'e8\u1085\'ed\u1075\'e3, \u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee \u1082\'ea\u1088\'f0\u1091\'f3\u1075\'e3\u1083\'eb\u1086\'ee\u1089\'f1\u1091\'f3\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1086\'ee \u1080\'e8 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1081\'e9 \u1076\'e4\u1077\'e5\u1085\'ed\u1100\'fc \u1085\'ed\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8 \u1074\'e2\u1089\'f1\u1087\'ef\u1086\'ee\u1084\'ec\u1080\'e8\u1085\'ed\u1072\'e0\u1077\'e5\u1084\'ec (\u1074\'e2\u1099\'fb \u1074\'e2\u1077\'e5\u1076\'e4\u1100\'fc \u1091\'f3\u1078\'e6\u1077\'e5 \u1084\'ec\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1083\'eb\u1080\'e8 \u1085\'ed\u1072\'e0\u1076\'e4 man, FAQ \u1080\'e8 HowTO, \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1076\'e4\u1072\'e0 \u1083\'eb\u1080\'e8?), \u1095\'f7\u1090\'f2\u1086\'ee \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth none} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1089\'f1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0\u1082\'ea\u1091\'f3\u1102\'fe \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe \u1085\'ed\u1077\'e5 \u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2, \u1090\'f2.\u1082\'ea. \u1086\'ee\u1090\'f2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1077\'e5\u1090\'f2 \u1083\'eb\u1102\'fe\u1073\'e1\u1091\'f3\u1102\'fe \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe \u1089\'f1\u1086\'ee\u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec \u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb allow \u1080\'e8 deny \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1085\'ed\u1077\'e5\u1077\'e5 \u1090\'f2\u1077\'e5\u1088\'f0\u1103\'ff\u1102\'fe\u1090\'f2 \u1074\'e2\u1089\'f1\u1103\'ff\u1082\'ea\u1080\'e8\u1081\'e9 \u1089\'f1\u1084\'ec\u1099\'fb\u1089\'f1\u1083\'eb. \u1055\'cf\u1086\'ee\u1088\'f0\u1072\'e0 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1081\'e9\u1090\'f2\u1080\'e8 \u1085\'ed\u1072\'e0 \u1095\'f7\u1090\'f2\u1086\'ee-\u1085\'ed\u1080\'e8\u1073\'e1\u1091\'f3\u1076\'e4\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1087\'ef\u1086\'ee\u1076\'e4\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1077\'e5\u1077\'e5, \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee IP: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1049\rtlch \ltrch\fs20\lang1049\loch\f6 + } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1085\'ed\u1086\'ee\u1074\'e2\u1072\'e0 \u1089\'f1\u1086\'ee\u1073\'e1\u1080\'e8\u1088\'f0\u1072\'e0\u1077\'e5\u1084\'ec \u1086\'ee\u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4\u1085\'ed\u1091\'f3\u1102\'fe \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1102\'fe \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1089\'f1 \u1091\'f3\u1095\'f7\u1077\'e5\u1090\'f2\u1086\'ee\u1084\'ec \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 3): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 24000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy -t} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 ACL (access client list \u8212\'97 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1086\'ee\u1074\'e2), \u1090\'f2.\u1077\'e5. \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 allow \u1080\'e8 deny \u1076\'e4\u1086\'ee\u1073\'e1\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1080\'e8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed deny * - \u1101\'fd\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1080\'e8\u1090\'f2 \u1080\'e8\u1079\'e7\u1073\'e1\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1086\'ee\u1090\'f2 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee\u1077\'e5\u1076\'e4\u1083\'eb\u1080\'e8\u1074\'e2\u1099\'fb\u1093\'f5 \u1086\'ee\u1082\'ea\u1086\'ee\u1085\'ed \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1072\'e0 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1085\'ed\u1072\'e0 \u1080\'e8 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1103\'ff, \u1074\'e2\u1099\'fb\u1089\'f1\u1082\'ea\u1072\'e0\u1082\'ea\u1080\'e8\u1074\'e2\u1072\'e0\u1102\'fe\u1097\'f9\u1080\'e8\u1093\'f5 \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1082\'ea\u1077\'e5 \u1079\'e7\u1072\'e0\u1075\'e3\u1088\'f0\u1091\'f3\u1079\'e7\u1082\'ea\u1077\'e5 \u1082\'ea\u1072\'e0\u1082\'ea\u1086\'ee\u1075\'e3\u1086\'ee-\u1085\'ed\u1080\'e8\u1073\'e1\u1091\'f3\u1076\'e4\u1100\'fc \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1097\'f9\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3\u1088\'f0\u1089\'f1\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1086\'ee\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1080\'e8\u1084\'ec \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5 \u1091\'f3\u1074\'e2\u1083\'eb\u1077\'e5\u1082\'ea\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1077\'e5 \u1079\'e7\u1072\'e0\u1085\'ed\u1103\'ff\u1090\'f2\u1080\'e8\u1077\'e5. \u1059\'d3\u1095\'f7\u1077\'e5\u1090\'f2 \u1080\'e8 \u1082\'ea\u1086\'ee\u1085\'ed\u1090\'f2\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc - \u1074\'e2\u1086\'ee\u1090\'f2 \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed \u1080\'e8\u1079\'e7 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1099\'fb\u1093\'f5 \u1085\'ed\u1072\'e0\u1096\'f8\u1080\'e8\u1093\'f5 \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1094\'f6\u1080\'e8\u1087\'ef\u1086\'ee\u1074\'e2. \u1040\'c0 \u1082\'ea\u1072\'e0\u1082\'ea\u1086\'ee\u1081\'e9 \u1078\'e6\u1077\'e5 \u1091\'f3\u1095\'f7\u1077\'e5\u1090\'f2 \u1073\'e1\u1077\'e5\u1079\'e7 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2? \u1054\'ce\u1085\'ed\u1080\'e8 \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1103\'ff\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1084\'ec\u1080\'e8 counter, countin \u1080\'e8 nocountin. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1101\'fd\u1090\'f2\u1080\'e8\u1084\'ec \u1084\'ec\u1099\'fb \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1084\'ec, \u1075\'e3\u1076\'e4\u1077\'e5 \u1091\'f3 \u1085\'ed\u1072\'e0\u1089\'f1 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1086\'ee\u1073\'e1\u1097\'f9\u1080\'e8\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2. \u1054\'ce\u1085\'ed \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1089\'f1\u1086\'ee\u1073\'e1\u1086\'ee\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1074\'e2 \u1076\'e4\u1074\'e2\u1086\'ee\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee\u1084\'ec \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5, \u1087\'ef\u1088\'f0\u1080\'e8\u1095\'f7\u1077\'e5\u1084\'ec \u1086\'ee\u1085\'ed \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1076\'e4\u1072\'e0 \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1069\'dd\u1090\'f2\u1091\'f3 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1073\'e1\u1099\'fb \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1099\'fb\u1081\'e9 \u1076\'e4\u1077\'e5\u1085\'ed\u1100\'fc (\u1095\'f7\u1072\'e0\u1089\'f1\u1090\'f2\u1086\'ee\u1090\'f2\u1072\'e0 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2 \u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1084\'ec D(\u1077\'e5\u1078\'e6\u1077\'e5\u1076\'e4\u1085\'ed\u1077\'e5\u1074\'e2\u1085\'ed\u1086\'ee) - \u1085\'ed\u1072\'e0 \u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1077\'e5 D \u1084\'ec\u1086\'ee\u1075\'e3\u1083\'eb\u1080\'e8 \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc W(\u1077\'e5\u1078\'e6\u1077\'e5\u1085\'ed\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee), M(\u1077\'e5\u1078\'e6\u1077\'e5\u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1095\'f7\u1085\'ed\u1086\'ee) \u1080\'e8\u1083\'eb\u1080\'e8 H(\u1077\'e5\u1078\'e6\u1077\'e5\u1095\'f7\u1072\'e0\u1089\'f1\u1085\'ed\u1086\'ee)) \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 C:\\3proxy\\traf\\traf \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1075\'e3\u1077\'e5\u1085\'ed\u1077\'e5\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1086\'ee\u1090\'f2\u1095\'f7\u1077\'e5\u1090\'f2\u1072\'e0 \u1074\'e2 \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1084\'ec \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1080\'e8\u1090\'f2 \u1085\'ed\u1072\'e0\u1084\'ec \u1087\'ef\u1088\'f0\u1080\'e8 \u1085\'ed\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1091\'f3 \u1079\'e7\u1072\'e0 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1081\'e9 \u1076\'e4\u1077\'e5\u1085\'ed\u1100\'fc. \u1055\'cf\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1077\'e5 \u1086\'ee\u1090\'f2\u1095\'f7\u1077\'e5\u1090\'f2\u1099\'fb \u1074\'e2 \u1073\'e1\u1083\'eb\u1086\'ee\u1082\'ea\u1085\'ed\u1086\'ee\u1090\'f2\u1077\'e5, \u1090\'f2\u1072\'e0\u1084\'ec \u1074\'e2\u1089\'f1\u1077\'e5 \u1087\'ef\u1086\'ee\u1085\'ed\u1103\'ff\u1090\'f2\u1085\'ed\u1086\'ee.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1059\'d3\u1095\'f7\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1086\'ee\u1090\'f2\u1095\'f7\u1077\'e5\u1090\'f2\u1072\'e0 \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1075\'e3\u1077\'e5\u1085\'ed\u1077\'e5\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1077\'e5 \u1089\'f1\u1091\'f3\u1090\'f2\u1086\'ee\u1082\'ea, \u1085\'ed\u1077\'e5 \u1089\'f1\u1090\'f2\u1086\'ee\u1080\'e8\u1090\'f2 \u1078\'e6\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1089\'f1\u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "1/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 50 * 192.168.0.2 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "2/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 80 * 192.168.0.3 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +countin "3/\u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2" M 30 * 192.168.0.4 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0 \u1101\'fd\u1090\'f2\u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1102\'fe\u1090\'f2 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1077\'e5 \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1095\'f7\u1085\'ed\u1099\'fb\u1077\'e5 (M) \u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1099\'fb \u1074\'e2\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1077\'e5\u1075\'e3\u1086\'ee (\u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea \u1085\'ed\u1072\'e0 \u1080\'e8\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1080\'e8\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1082\'ea\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8, \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1087\'ef\u1088\'f0\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1084\'ec\u1084\'ec\u1099\'fb \u1090\'f2\u1086\'ee\u1078\'e6\u1077\'e5 \u1086\'ee\u1073\'e1\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2 \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc) \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 \u1074\'e2 \u1084\'ec\u1077\'e5\u1075\'e3\u1072\'e0\u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0\u1093\'f5 \u1085\'ed\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1099\'fb \u1089\'f1 IP-\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0\u1084\'ec\u1080\'e8 192.168.0.2-192.168.0.4, \u1087\'ef\u1088\'f0\u1080\'e8\u1095\'f7\u1077\'e5\u1084\'ec \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1089\'f1\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1072\'e0\u1093\'f5 \u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1086\'ee\u1082\'ea\u1086\'ee\u1083\'eb\u1086\'ee\u1074\'e2.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1085\'ed\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee \u1082\'ea\u1072\'e0\u1082\'ea\u1086\'ee\u1084\'ec\u1091\'f3-\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1091\'f3\u1095\'f7\u1077\'e5\u1090\'f2 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 . \u1063\'d7\u1090\'f2\u1086\'ee \u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5? \u1057\'d1\u1072\'e0\u1084\'ec\u1086\'ee\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1077\'e5 \u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u8212\'97 \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1090\'f2\u1072\'e0\u1082\'ea\u1086\'ee\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1077\'e5 \u1086\'ee\u1085\'ed \u1085\'ed\u1077\'e5 \u1089\'f1\u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1080\'e8 \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec \u1078\'e6\u1077\'e5\u1083\'eb\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1087\'ef\u1072\'e0\u1088\'f0\u1091\'f3 \u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2. \u1048\'c8\u1083\'eb\u1080\'e8 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1091\'f3\u1102\'fe \u1082\'ea\u1074\'e2\u1086\'ee\u1090\'f2\u1091\'f3 \u1085\'ed\u1072\'e0 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0 \u1085\'ed\u1077\'e5\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1087\'ef\u1077\'e5\u1088\'f0\u1080\'e8\u1086\'ee\u1076\'e4 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8. \u1042\'c2 \u1090\'f2\u1072\'e0\u1082\'ea\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea \u1089\'f1 \u1087\'ef\u1077\'e5\u1088\'f0\u1080\'e8\u1086\'ee\u1076\'e4\u1086\'ee\u1084\'ec \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1080\'e8\u1103\'ff N (\u1085\'ed\u1080\'e8\u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0) \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee Y(\u1075\'e3\u1086\'ee\u1076\'e4).} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1072\'e0\u1078\'e6\u1085\'ed\u1086\'ee - \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2 (\u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 1,2,3) \u1085\'ed\u1077\'e5 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1089\'f1\u1086\'ee\u1074\'e2\u1087\'ef\u1072\'e0\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc. \u1048\'c8\u1084\'ec\u1077\'e5\u1085\'ed\u1072\'e0, \u1074\'e2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1077\'e5, \u1092\'f4\u1072\'e0\u1084\'ec\u1080\'e8\u1083\'eb\u1080\'e8\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1072\'e0, \u1080\'e8\u1076\'e4\u1091\'f3\u1097\'f9\u1080\'e8\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1082\'ea\u1086\'ee\u1089\'f1\u1086\'ee\u1081\'e9 \u1095\'f7\u1077\'e5\u1088\'f0\u1090\'f2\u1099\'fb - \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1099\'fb \u1076\'e4\u1083\'eb\u1103\'ff \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1072\'e0, \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1086\'ee\u1085\'ed\u1080\'e8 \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1080\'e8, \u1085\'ed\u1086\'ee \u1101\'fd\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1079\'e7\u1078\'e6\u1077\'e5... } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1091\'f3 \u1074\'e2\u1072\'e0\u1089\'f1 \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1078\'e6\u1077\'e5\u1083\'eb\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1080\'e8\u1081\'e9 \u1086\'ee\u1073\'e1\u1097\'f9\u1080\'e8\u1081\'e9 \u1080\'e8\u1079\'e7\u1088\'f0\u1072\'e0\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9, \u1090\'f2\u1086\'ee \u1085\'ed\u1077\'e5 \u1089\'f1\u1087\'ef\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1077\'e5 \u1074\'e2\u1086\'ee\u1086\'ee\u1088\'f0\u1091\'f3\u1078\'e6\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1082\'ea\u1091\'f3\u1083\'eb\u1103\'ff\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec, \u1101\'fd\u1090\'f2\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1088\'f0\u1077\'e5\u1076\'e4\u1089\'f1\u1090\'f2\u1074\'e2\u1072\'e0\u1084\'ec\u1080\'e8 3proxy. \u1044\'c4\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea, \u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1099\'fb\u1074\'e2\u1102\'fe\u1097\'f9\u1080\'e8\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1090\'f2\u1072\'e0\u1082\'ea:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +countin 100/month M 1000000 * } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +countin 101/day D 1000000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1088\'f0\u1074\'e2\u1072\'e0\u1103\'ff \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1072\'e0 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1086\'ee\u1073\'e1\u1097\'f9\u1080\'e8\u1081\'e9 \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea, \u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0\u1103\'ff \u1086\'ee\u1073\'e1\u1097\'f9\u1080\'e8\u1081\'e9 \u1076\'e4\u1085\'ed\u1077\'e5\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9. \u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1082\'ea\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1080\'e8 \u1091\'f3 \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff (\u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1091\'f3 \u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0) \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1103\'ff\u1090\'f2\u1089\'f1\u1103\'ff \u1076\'e4\u1074\'e2\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1080\'e8, \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5 \u1090\'f2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1080\'e8\u1077\'e5 \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1080\'e8 \u1076\'e4\u1085\'ed\u1077\'e5\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1080\'e8, \u1087\'ef\u1088\'f0\u1086\'ee\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1080\'e8\u1077\'e5 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 nocountin, \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1085\'ed\u1077\'e5 \u1089\'f1\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1087\'ef\u1086\'ee \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 \u1088\'f0\u1103\'ff\u1076\'e4\u1091\'f3 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nocountin * 192.168.0.4 * 110 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1084\'ec\u1077\'e5\u1097\'f9\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1055\'cf\u1045\'c5\u1056\'d0\u1045\'c5\u1044\'c4 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8 countin, \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1086\'ee\u1090\'f2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1076\'e4\u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 \u1076\'e4\u1083\'eb\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1 IP .4 \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1087\'ef\u1086\'ee 110 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0\u1076\'e4\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc \u1074\'e2 \u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1080\'e8\u1089\'f1\u1095\'f7\u1077\'e5\u1088\'f0\u1087\'ef\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 \u1089\'f1\u1091\'f3\u1097\'f9\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5 \u1089\'f1\u1086\'ee\u1077\'e5\u1076\'e4\u1080\'e8\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1085\'ed\u1077\'e5 \u1086\'ee\u1073\'e1\u1088\'f0\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1080\'e8, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1074\'e2 \u1072\'e0\u1089\'f1\u1100\'fc\u1082\'ea\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1072\'e0 \u1076\'e4\u1085\'ed\u1103\'ff \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1088\'f0\u1077\'e5\u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1080\'e8 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0. \u1048\'c8\u1083\'eb\u1080\'e8, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1086\'ee\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb, \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1077\'e5\u1074\'e2\u1099\'fb\u1096\'f8\u1072\'e0\u1102\'fe\u1097\'f9\u1080\'e8\u1081\'e9 \u1074\'e2\u1099\'fb\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u8212\'97 \u1087\'ef\u1088\'f0\u1080\'e8 \u1091\'f3\u1089\'f1\u1083\'eb\u1086\'ee\u1074\'e2\u1080\'e8\u1080\'e8, \u1095\'f7\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1085\'ed\u1077\'e5 \u1089\'f1\u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1100\'fc \u1077\'e5\u1075\'e3\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1084\'ec\u1077\'e5\u1088\'f0 \u1074\'e2 \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1094\'f6\u1077\'e5\u1089\'f1\u1089\'f1\u1072\'e0 \u1079\'e7\u1072\'e0\u1082\'ea\u1072\'e0\u1095\'f7\u1082\'ea\u1080\'e8. \u1040\'c0 \u1074\'e2\u1086\'ee\u1090\'f2 \u1089\'f1\u1086\'ee\u1079\'e7\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1086\'ee\u1074\'e2\u1086\'ee\u1077\'e5 \u1089\'f1\u1086\'ee\u1077\'e5\u1076\'e4\u1080\'e8\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1087\'ef\u1088\'f0\u1077\'e5\u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 \u1091\'f3\u1078\'e6\u1077\'e5 \u1085\'ed\u1077\'e5 \u1091\'f3\u1076\'e4\u1072\'e0\u1089\'f1\u1090\'f2\u1089\'f1\u1103\'ff.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1085\'ed\u1086\'ee\u1074\'e2\u1072\'e0 \u1089\'f1\u1086\'ee\u1073\'e1\u1080\'e8\u1088\'f0\u1072\'e0\u1077\'e5\u1084\'ec \u1086\'ee\u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4\u1085\'ed\u1091\'f3\u1102\'fe \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1102\'fe \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1089\'f1 \u1091\'f3\u1095\'f7\u1077\'e5\u1090\'f2\u1086\'ee\u1084\'ec \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 4): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 24000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nocountin * 192.168.0.4 * 110 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "1/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 50 * 192.168.0.2 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "2/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 80 * 192.168.0.3 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "3/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 30 * 192.168.0.4 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +proxy -t} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1091\'f3 \u1074\'e2\u1086\'ee\u1090\'f2, \u1084\'ec\u1099\'fb \u1091\'f3\u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8 \u1074\'e2\u1089\'f1\u1077\'e5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1080\'e8\u1083\'eb\u1080\'e8, \u1085\'ed\u1086\'ee \u1074\'e2\u1077\'e5\u1076\'e4\u1100\'fc \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2 - \u1101\'fd\u1090\'f2\u1086\'ee \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee WEB-\u1089\'f1\u1077\'e5\u1088\'f0\u1092\'f4\u1080\'e8\u1085\'ed\u1075\'e3 \u1080\'e8 FTP. \u1069\'dd\u1083\'eb\u1077\'e5\u1082\'ea\u1090\'f2\u1088\'f0\u1086\'ee\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1072\'e0! \u1042\'c2\u1086\'ee\u1090\'f2 \u1077\'e5\u1081\'e9 \u1084\'ec\u1099\'fb \u1080\'e8 \u1079\'e7\u1072\'e0\u1081\'e9\u1084\'ec\u1077\'e5\u1084\'ec\u1089\'f1\u1103\'ff. \u1044\'c4\u1083\'eb\u1103\'ff \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1072\'e0 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1080\'e8\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb. \u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1074\'e2 \u1089\'f1\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1077\'e5 3proxy \u1080\'e8\u1084\'ec\u1077\'e5\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1074\'e2\u1086\'ee\u1081\'e9 pop3-\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3p} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2\u1072\'e0\u1096\'f8\u1080\'e8 \u1084\'ec\u1101\'fd\u1081\'e9\u1083\'eb-\u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1099\'fb. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1076\'e4\u1083\'eb\u1103\'ff \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0 vasya.pupkin@mail.ru \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1084\'ec\u1086\'ee\u1077\'e5\u1075\'e3\u1086\'ee \u1083\'eb\u1102\'fe\u1073\'e1\u1080\'e8\u1084\'ec\u1086\'ee\u1075\'e3\u1086\'ee TheBat! \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1082\'ea\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb (\u1079\'e7\u1072\'e0\u1082\'ea\u1083\'eb\u1072\'e0\u1076\'e4\u1082\'ea\u1072\'e0 \u1058\'d2\u1088\'f0\u1072\'e0\u1085\'ed\u1089\'f1\u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2) \u1088\'f0\u1072\'e0\u1085\'ed\u1100\'fc\u1096\'f8\u1077\'e5 \u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1083\'eb\u1080\'e8 \u1090\'f2\u1072\'e0\u1082\'ea\u1080\'e8\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1099\'fb: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: pop.mail.ru } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: vasya.pupkin } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1086\'ee \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1091\'f3 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8, \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1080\'e8\u1093\'f5 \u1087\'ef\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: vasya.pupkin@pop.mail.ru } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1074\'e2\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5, \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc "\u1080\'e8\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff"@"POP3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0", \u1072\'e0 \u1085\'ed\u1077\'e5 \u1074\'e2\u1072\'e0\u1096\'f8 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1083\'eb\u1103\'ff \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1077\'e5\u1081\'e9 \u1085\'ed\u1072\'e0\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1077\'e5\u1097\'f9\u1077\'e5 \u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1072\'e0\u1085\'ed\u1090\'f2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1080\'e8 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: mail.example.com } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: vasya.pupkin@example.com } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1087\'ef\u1088\'f0\u1080\'e8\u1096\'f8\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc \u1073\'e1\u1099\'fb \u1087\'ef\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1080\'e8 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0 \u1085\'ed\u1072\'e0 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: vasya.pupkin@example.com@mail.example.com } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1082\'ea\u1072\'e0\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5 \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1079\'e7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc \u1074\'e2\u1099\'fb\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0\u1077\'e5\u1090\'f2 @, \u1085\'ed\u1086\'ee \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee, \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1081\'e9 \u1089\'f1\u1080\'e8\u1084\'ec\u1074\'e2\u1086\'ee\u1083\'eb, \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1103\'ff \u1076\'e4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 delimchar:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +delimchar #} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1063\'d7\u1090\'f2\u1086\'ee \u1078\'e6\u1077\'e5 \u1082\'ea\u1072\'e0\u1089\'f1\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1086\'ee\u1090\'f2\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1082\'ea\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb, \u1090\'f2\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1088\'f0\u1077\'e5\u1082\'ea\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1076\'e4\u1091\'f3\u1077\'e5\u1090\'f2 \u1074\'e2\u1086\'ee\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1076\'e4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1080\'e8\u1085\'ed\u1075\'e3\u1086\'ee\u1084\'ec: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 25 smtp.provider.ru 25} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc, \u1085\'ed\u1077\'e5 \u1084\'ec\u1091\'f3\u1076\'e4\u1088\'f0\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1103\'ff \u1083\'eb\u1091\'f3\u1082\'ea\u1072\'e0\u1074\'e2\u1086\'ee, \u1084\'ec\u1099\'fb \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1087\'ef\u1086\'ee \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 25, \u1087\'ef\u1086\'ee \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1084\'ec\u1091\'f3, \u1089\'f1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1080\'e8 \u1086\'ee\u1090\'f2\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1077\'e5 \u1089\'f1\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff, \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1082\'ea\u1080\'e8\u1076\'e4\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1085\'ed\u1072\'e0 25-\u1099\'fb\u1081\'e9 \u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0 \u1074\'e2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1076\'e4\u1083\'eb\u1103\'ff \u1091\'f3\u1087\'ef\u1086\'ee\u1084\'ec\u1103\'ff\u1085\'ed\u1091\'f3\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0 \u1074\'e2 \u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1079\'e7\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1100\'fc \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff SMTP-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +SMTP-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1077\'e5\u1084\'ec \u1089\'f1 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1080\'e8\u1085\'ed\u1075\'e3\u1086\'ee\u1084\'ec \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1073\'e1\u1099\'fb \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +tcppm -i192.168.0.1 2110 pop.mail.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1090\'f2\u1100\'fc \u1074\'e2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1072\'e0\u1085\'ed\u1090\'f2\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1072\'e0 \u1085\'ed\u1077\'e5\u1087\'ef\u1088\'f0\u1080\'e8\u1103\'ff\u1090\'f2\u1085\'ed\u1072\'e0\u1103\'ff \u1089\'f1\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1085\'ed\u1072\'e0 - \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1080\'e8 \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8 \u1085\'ed\u1072\'e0 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1093\'f5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1093\'f5 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5, \u1073\'e1\u1083\'eb\u1072\'e0\u1075\'e3\u1086\'ee \u1095\'f7\u1090\'f2\u1086\'ee \u1080\'e8\u1093\'f5 \u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1074\'e2\u1077\'e5\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc (yandex, rambler,newmail...), \u1090\'f2\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1079\'e7\u1072\'e0\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1085\'ed\u1086\'ee\u1074\'e2\u1091\'f3\u1102\'fe \u1079\'e7\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1100\'fc \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1080\'e8\u1085\'ed\u1075\'e3\u1072\'e0 \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 3110 pop.yandex.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1074\'e2\u1088\'f0\u1103\'ff\u1076\'e4 \u1083\'eb\u1080\'e8 \u1080\'e8\u1093\'f5 \u1095\'f7\u1080\'e8\u1089\'f1\u1083\'eb\u1086\'ee \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1074\'e2 \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1086\'ee\u1084\'ec \u1086\'ee\u1092\'f4\u1080\'e8\u1089\'f1\u1077\'e5 \u1087\'ef\u1088\'f0\u1077\'e5\u1074\'e2\u1099\'fb\u1089\'f1\u1080\'e8\u1090\'f2 10-15. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1099\'fb \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0 \u1074\'e2 \u1084\'ec\u1101\'fd\u1081\'e9\u1083\'eb-\u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1077\'e5 \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: vasya.pupkin } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8 \u1076\'e4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 \u1085\'ed\u1072\'e0 2110 \u1080\'e8 \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff\u1084\'ec \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1085\'ed\u1072\'e0 \u1101\'fd\u1090\'f2\u1086\'ee\u1090\'f2 \u1085\'ed\u1077\'e5\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 2110,25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1082\'ea\u1086\'ee\u1081\'e9 \u1080\'e8\u1079\'e7 \u1089\'f1\u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1\u1086\'ee\u1074\'e2 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1074\'e2\u1099\'fb\u1073\'e1\u1080\'e8\u1088\'f0\u1072\'e0\u1090\'f2\u1100\'fc - \u1076\'e4\u1077\'e5\u1083\'eb\u1086\'ee \u1074\'e2\u1082\'ea\u1091\'f3\u1089\'f1\u1072\'e0, \u1084\'ec\u1085\'ed\u1077\'e5 \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1099\'fb\u1095\'f7\u1077\'e5\u1085\'ed \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1080\'e8\u1085\'ed\u1075\'e3, \u1077\'e5\u1075\'e3\u1086\'ee \u1080\'e8 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1084\'ec \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1087\'ef\u1088\'f0\u1086\'ee\u1075\'e3\u1088\'f0\u1077\'e5\u1089\'f1\u1089\'f1 \u1085\'ed\u1077\'e5 \u1089\'f1\u1090\'f2\u1086\'ee\u1080\'e8\u1090\'f2 \u1085\'ed\u1072\'e0 \u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1077\'e5 \u1080\'e8 \u1090\'f2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1076\'e4\u1083\'eb\u1103\'ff \u1086\'ee\u1090\'f2\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1082\'ea\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc smtp-\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8, \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1102\'fe\u1097\'f9\u1080\'e8\u1081\'e9 \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee pop3p:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +smtpp} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1077\'e5 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1099\'fb \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1080\'e8\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1077\'e5 \u1089\'f1 pop3p: \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 \u1080\'e8 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1073\'e1\u1077\'e5\u1079\'e7 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9, \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee pop3-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec IP \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0, \u1072\'e0 \u1074\'e2 \u1087\'ef\u1086\'ee\u1083\'eb\u1077\'e5 \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1079\'e7\u1072\'e0\u1073\'e1\u1080\'e8\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1080\'e8\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff@POP_SERVER. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1085\'ed\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1077\'e5 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0 }{{\field{\*\fldinst HYPERLINK "mailto:ivan@mail.ru" }{\fldrslt {\cf2\ul\ulc0\langfe255\lang255\cf2\ul\ulc0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +ivan@mail.ru}{}}}\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1087\'ef\u1086\'ee\u1083\'eb\u1077\'e5 \u171\'ab\u1059\'d3\u1095\'f7\u1077\'e5\u1090\'f2\u1085\'ed\u1072\'e0\u1103\'ff \u1079\'e7\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1100\'fc\u187\'bb \u1074\'e2\u1085\'ed\u1086\'ee\u1089\'f1\u1080\'e8\u1084\'ec }{{\field{\*\fldinst HYPERLINK "mailto:ivan@smtp.mail.ru" }{\fldrslt {\cf2\ul\ulc0\langfe255\lang255\cf2\ul\ulc0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +ivan@smtp.mail.ru}{}}}\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 25 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1073\'e1\u1077\'e5\u1079\'e7 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9, \u1082\'ea\u1072\'e0\u1082\'ea \u1080\'e8 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc. \u1040\'c0 \u1074\'e2 \u1087\'ef\u1086\'ee\u1083\'eb\u1077\'e5 \u171\'ab\u1057\'d1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 \u1080\'e8\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1077\'e5\u1081\'e9 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb\u187\'bb \u1079\'e7\u1072\'e0\u1073\'e1\u1080\'e8\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec IP \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1086\'ee\u1073\'e1\u1080\'e8\u1088\'f0\u1072\'e0\u1077\'e5\u1084\'ec \u1086\'ee\u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4\u1085\'ed\u1091\'f3\u1102\'fe \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1102\'fe \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1089\'f1 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 pop3p (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 5): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 24000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nocountin * 192.168.0.4 * 110 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "1/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 50 * 192.168.0.2 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "2/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 80 * 192.168.0.3 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "3/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 30 * 192.168.0.4 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1054\'ce\u1063\'d7\u1058\'d2\u1040\'c0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 25}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +00}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + smtp.provider.ru 25} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop3p} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +smtpr} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1084\'ec\u1072\'e0\u1087\'ef\u1087\'ef\u1080\'e8\u1085\'ed\u1075\'e3 \u1089\'f1\u1077\'e5\u1082\'ea\u1094\'f6\u1080\'e8\u1103\'ff \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1080\'e8\u1076\'e4\u1091\'f3\u1097\'f9\u1072\'e0\u1103\'ff \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1082\'ea\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0\u1088\'f0\u1080\'e8\u1103\'ff # \u1055\'cf\u1054\'ce\u1063\'d7\u1058\'d2\u1040\'c0 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0 \u1073\'e1\u1099\'fb \u1085\'ed\u1077\'e5\u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1084\'ec\u1091\'f3: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1054\'ce\u1063\'d7\u1058\'d2\u1040\'c0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 25}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +00}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + smtp.provider.ru 25} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 2110 pop.mail.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 3110 pop.yandex.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1099\'fb, \u1085\'ed\u1072\'e0\u1074\'e2\u1077\'e5\u1088\'f0\u1085\'ed\u1086\'ee\u1077\'e5, \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1080\'e8\u1083\'eb\u1080\'e8 \u1085\'ed\u1086\'ee\u1074\'e2\u1091\'f3\u1102\'fe \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 flush. \u1052\'cc\u1099\'fb \u1077\'e5\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8\u1083\'eb\u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1089\'f1\u1073\'e1\u1088\'f0\u1086\'ee\u1089\'f1\u1072\'e0 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9. \u1047\'c7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1089\'f1\u1073\'e1\u1088\'f0\u1086\'ee\u1089\'f1 \u1085\'ed\u1077\'e5 \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1077\'e5 \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb. \u1048\'c8 \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1059\'d3\u1095\'f7\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee smtpr}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee \u1091\'f3\u1084\'ec\u1086\'ee\u1083\'eb\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1079\'e7\u1072\'e0\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 25, \u1087\'ef\u1086\'ee\u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3 \u1085\'ed\u1072\'e0 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 \u1085\'ed\u1077\'e5 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1074\'e2\u1080\'e8\u1089\'f1\u1077\'e5\u1090\'f2\u1100\'fc \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1077\'e5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8 \u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1094\'f6, \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1074\'e2\u1072\'e0\u1078\'e6\u1085\'ed\u1091\'f3\u1102\'fe \u1089\'f1\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1102\'fe\u1097\'f9\u1091\'f3\u1102\'fe \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 - WEB-\u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1 \u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff. \u1044\'c4\u1083\'eb\u1103\'ff \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea \u1085\'ed\u1077\'e5\u1084\'ec\u1091\'f3 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +admin } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1083\'eb\u1103\'ff \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1087\'ef\u1080\'e8\u1096\'f8\u1080\'e8\u1090\'f2\u1077\'e5 \u1074\'e2 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1085\'ed\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1077\'e5 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1081\'e9 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1: http://192.168.0.1:80, \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1099\'fb\u1074\'e2, \u1082\'ea\u1086\'ee\u1085\'ed\u1077\'e5\u1095\'f7\u1085\'ed\u1086\'ee, \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1085\'ed\u1072\'e0 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb admin \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1072\'e0 80. \u1042\'c2 \u1086\'ee\u1090\'f2\u1082\'ea\u1088\'f0\u1099\'fb\u1074\'e2\u1096\'f8\u1077\'e5\u1084\'ec\u1089\'f1\u1103\'ff \u1086\'ee\u1082\'ea\u1085\'ed\u1077\'e5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea \u1080\'e8\u1085\'ed\u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 \u1086\'ee \u1084\'ec\u1072\'e0\u1082\'ea\u1089\'f1\u1080\'e8\u1084\'ec\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1076\'e4\u1086\'ee\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1084\'ec\u1086\'ee\u1084\'ec \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1077\'e5 \u1080\'e8 \u1077\'e5\u1075\'e3\u1086\'ee \u1090\'f2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1077\'e5\u1084\'ec \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1080\'e8, \u1087\'ef\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1094\'f6\u1077\'e5\u1083\'eb\u1080\'e8\u1082\'ea\u1086\'ee\u1084\'ec \u1080\'e8 \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0. \u1055\'cf\u1086\'ee\u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3 \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1085\'ed\u1072\'e0 \u1101\'fd\u1090\'f2\u1091\'f3 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1091\'f3 \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1081\'e9\u1090\'f2\u1077\'e5 \u1082\'ea\u1088\'f0\u1072\'e0\u1081\'e9\u1085\'ed\u1077\'e5 \u1074\'e2\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee! \u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1091\'f3 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb admin \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7 -s, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1085\'ed\u1077\'e5 \u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1077\'e5\u1076\'e4\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0\u1076\'e4\u1086\'ee \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc \u1074\'e2 \u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1080\'e8 \u1074\'e2 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1075\'e3\u1072\'e0\u1083\'eb\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 \u1053\'cd\u1077\'e5 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1080\'e8 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1085\'ed\u1080\'e8\u1078\'e6\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1097\'f9\u1077\'e5\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1077\'e5 \u1072\'e0\u1081\'e9-\u1087\'ef\u1080\'e8 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0\u8203\'3f, \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee 192.168.0.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1049\rtlch \ltrch\fs20\lang1049\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1102\'fe \u1089\'f1\u1074\'e2\u1086\'ee\u1080\'e8\u1084\'ec \u1076\'e4\u1086\'ee\u1083\'eb\u1075\'e3\u1086\'ee\u1084\'ec \u1091\'f3\u1087\'ef\u1086\'ee\u1084\'ec\u1103\'ff\u1085\'ed\u1091\'f3\u1090\'f2\u1100\'fc \u1086\'ee \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1077\'e5 writable, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0\u1103\'ff, \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1095\'f7\u1080\'e8 \u1088\'f0\u1072\'e0\u1079\'e7\u1084\'ec\u1077\'e5\u1097\'f9\u1077\'e5\u1085\'ed\u1072\'e0 \u1074\'e2 \u1089\'f1\u1072\'e0\u1084\'ec\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1077\'e5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 WEB-\u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1, \u1085\'ed\u1086\'ee \u1080\'e8 \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1077\'e5\u1075\'e3\u1086\'ee! \u1040\'c0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1087\'ef\u1088\'f0\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1084\'ec\u1084\'ec\u1099\'fb \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1083\'eb\u1072\'e0\u1075\'e3\u1072\'e0\u1077\'e5\u1090\'f2 \u1076\'e4\u1074\'e2\u1072\'e0\u1078\'e6\u1076\'e4\u1099\'fb \u1087\'ef\u1086\'ee\u1076\'e4\u1091\'f3\u1084\'ec\u1072\'e0\u1090\'f2\u1100\'fc, \u1087\'ef\u1088\'f0\u1077\'e5\u1078\'e6\u1076\'e4\u1077\'e5 \u1095\'f7\u1077\'e5\u1084\'ec \u1074\'e2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1101\'fd\u1090\'f2\u1091\'f3 \u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1102\'fe. \u1063\'d7\u1090\'f2\u1086\'ee \u1082\'ea\u1072\'e0\u1089\'f1\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1072\'e0 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1072\'e0\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0, \u1084\'ec\u1080\'e8\u1084\'ec\u1086\'ee \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1081\'e9 \u1103\'ff \u1085\'ed\u1077\'e5 \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1081\'e9\u1090\'f2\u1080\'e8. \u1069\'dd\u1090\'f2\u1086\'ee \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 monitor, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0\u1103\'ff \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1091\'f3 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc \u1079\'e7\u1072\'e0 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1086\'ee\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 (\u1080\'e8 \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1099\'fb\u1084\'ec \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1086\'ee\u1084\'ec 3proxy.cfg, \u1085\'ed\u1086\'ee \u1080\'e8 \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1084\'ec \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1084\'ec, \u1074\'e2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1084\'ec \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 ) \u1080\'e8 \u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1086\'ee\u1073\'e1\u1085\'ed\u1072\'e0\u1088\'f0\u1091\'f3\u1078\'e6\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2 \u1085\'ed\u1077\'e5\u1081\'e9 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9 \u1085\'ed\u1077\'e5\u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1076\'e4\u1083\'eb\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee (\u1087\'ef\u1086\'ee \u1084\'ec\u1086\'ee\u1080\'e8\u1084\'ec \u1085\'ed\u1072\'e0\u1073\'e1\u1083\'eb\u1102\'fe\u1076\'e4\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff, \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 2-3 \u1089\'f1\u1077\'e5\u1082\'ea\u1091\'f3\u1085\'ed\u1076\'e4\u1099\'fb \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1089\'f1\u1086\'ee\u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff) \u1079\'e7\u1072\'e0\u1075\'e3\u1088\'f0\u1091\'f3\u1078\'e6\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1086\'ee\u1074\'e2\u1091\'f3\u1102\'fe \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe. \u1055\'cf\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1086\'ee\u1090\'f2\u1083\'eb\u1080\'e8\u1095\'f7\u1085\'ed\u1072\'e0\u1103\'ff \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1081\'e9 \u1084\'ec\u1085\'ed\u1077\'e5 \u1090\'f2\u1072\'e0\u1082\'ea \u1085\'ed\u1077\'e5 \u1093\'f5\u1074\'e2\u1072\'e0\u1090\'f2\u1072\'e0\u1083\'eb\u1086\'ee \u1074\'e2 ES Proxy! } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc \u1074\'e2 \u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1101\'fd\u1090\'f2\u1080\'e8 \u1076\'e4\u1074\'e2\u1077\'e5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb \u8212\'97 writable \u1080\'e8 monitor - \u1085\'ed\u1077\'e5\u1083\'eb\u1100\'fc\u1079\'e7\u1103\'ff \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1077\'e5.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +monitor "c:\\3proxy\\bin\\3proxy.cfg"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1072\'e0\u1079\'e7\u1091\'f3\u1084\'ec\u1077\'e5\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 \u1084\'ec\u1086\'ee\u1085\'ed\u1080\'e8\u1090\'f2\u1086\'ee\u1088\'f0 \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1089\'f1 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1099\'fb\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1086\'ee\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0. \u1044\'c4\u1077\'e5\u1083\'eb\u1086\'ee \u1074\'e2 \u1090\'f2\u1086\'ee\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1074\'e2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1077\'e5 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1099\'fb \u1089\'f1\u1086\'ee \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9, \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1081\'e9, \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1077\'e5\u1081\'e9 \u1080\'e8 \u1090\'f2.\u1076\'e4. \u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1084\'ec\u1072\'e0\u1082\'ea\u1088\'f0\u1086\'ee\u1089\'f1 $. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1086\'ee\u1081\'e9 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea IP \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2, \u1080\'e8\u1084\'ec\u1077\'e5\u1102\'fe\u1097\'f9\u1080\'e8\u1093\'f5 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1077\'e5, \u1084\'ec\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1084\'ec \u1089\'f1\u1086\'ee\u1079\'e7\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb IP_list.txt, \u1074\'e2 \u1085\'ed\u1077\'e5\u1075\'e3\u1086\'ee \u1074\'e2\u1085\'ed\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1079\'e7\u1072\'e0\u1087\'ef\u1103\'ff\u1090\'f2\u1091\'f3\u1102\'fe (\u1073\'e1\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1086\'ee\u1074\'e2!) \u1074\'e2\u1089\'f1\u1077\'e5 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1099\'fb\u1077\'e5 \u1085\'ed\u1072\'e0\u1084\'ec IP, \u1090\'f2\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0, \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1102\'fe\u1097\'f9\u1072\'e0\u1103\'ff \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1077\'e5 \u1080\'e8 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1103\'ff\u1097\'f9\u1072\'e0\u1103\'ff \u1090\'f2\u1072\'e0\u1082\'ea: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 2110,25,110 * 1-5} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * $"c:\\3proxy\\IP_list.txt" * 2110,25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1084\'ec\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1084\'ec \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1083\'eb\u1077\'e5\u1078\'e6\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1080\'e8 \u1079\'e7\u1072\'e0 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1086\'ee\u1084\'ec \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2 \u1080\'e8\u1079\'e7 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1072\'e0 IP_list.txt \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +monitor "c:\\3proxy\\bin\\IP_list.txt"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1072\'e0 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1072\'e0\u1103\'ff \u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 - \u1087\'ef\u1088\'f0\u1080\'e8 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb monitor \u1084\'ec\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1084\'ec \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1082\'ea\u1086\'ee\u1088\'f0\u1088\'f0\u1077\'e5\u1082\'ea\u1090\'f2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1080\'e8 \u1074\'e2\u1089\'f1\u1077\'e5 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1073\'e1\u1091\'f3\u1076\'e4\u1091\'f3\u1090\'f2 \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1083\'eb\u1077\'e5\u1090\'f2\u1091\'f3, \u1085\'ed\u1086\'ee \u1080\'e8, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1087\'ef\u1086\'ee\u1076\'e4\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1077\'e5\u1075\'e3\u1086\'ee \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1084\'ec \u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1072\'e0\u1085\'ed\u1090\'f2\u1086\'ee\u1084\'ec, \u1090\'f2\u1072\'e0\u1082\'ea \u1082\'ea\u1072\'e0\u1082\'ea \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1085\'ed\u1077\'e5 \u1073\'e1\u1083\'eb\u1086\'ee\u1082\'ea\u1080\'e8\u1088\'f0\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1084\'ec, \u1072\'e0 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1086\'ee\u1090\'f2\u1089\'f1\u1083\'eb\u1077\'e5\u1078\'e6\u1080\'e8\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1095\'f7\u1080\'e8\u1077\'e5 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9. \u1069\'dd\u1090\'f2\u1086\'ee \u1073\'e1\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1086\'ee\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1085\'ed\u1086\'ee. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1091\'f3 \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1076\'e4\u1074\'e2\u1072\'e0 \u1075\'e3\u1086\'ee\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1093\'f5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 - \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed \u1076\'e4\u1083\'eb\u1103\'ff \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1099\'fb \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 ADSL, \u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1081\'e9 - \u1076\'e4\u1083\'eb\u1103\'ff \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1099\'fb \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1091\'f3\u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1089\'f1\u1087\'ef\u1091\'f3\u1090\'f2\u1085\'ed\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1072\'e0, \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1080\'e8 \u1086\'ee\u1090\'f2\u1083\'eb\u1080\'e8\u1095\'f7\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee. \u1055\'cf\u1088\'f0\u1080\'e8 \u1085\'ed\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1081\'e9 \u1082\'ea\u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb \u1103\'ff \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1086\'ee\u1074\'e2\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe (\u1080\'e8\u1083\'eb\u1080\'e8 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1086\'ee\u1096\'f8\u1091\'f3 \u1074\'e2 \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1091\'f3\u1102\'fe \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1091\'f3) \u1080\'e8\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1085\'ed\u1099\'fb\u1081\'e9 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3, \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1085\'ed\u1077\'e5\u1075\'e3\u1086\'ee \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1083\'eb\u1102\'fe \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1081\'e9 - \u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1080\'e8 \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1077\'e5 \u1091\'f3\u1089\'f1\u1087\'ef\u1077\'e5\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc, \u1090\'f2\u1072\'e0\u1082\'ea \u1082\'ea\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1085\'ed\u1077\'e5 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee \u1085\'ed\u1080\'e8 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1072\'e0\u1074\'e2\u1083\'eb\u1080\'e8\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc, \u1085\'ed\u1080\'e8 \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1087\'ef\u1072\'e0\u1091\'f3\u1079\'e7\u1091\'f3. \u1054\'ce\u1090\'f2\u1083\'eb\u1080\'e8\u1095\'f7\u1085\'ed\u1072\'e0\u1103\'ff \u1092\'f4\u1080\'e8\u1095\'f7\u1072\'e0, \u1085\'ed\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1102\'fe \u1085\'ed\u1080\'e8 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1089\'f1 \u1090\'f2\u1072\'e0\u1082\'ea\u1086\'ee\u1081\'e9! \u1053\'cd\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1077\'e5 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5: \u1101\'fd\u1090\'f2\u1072\'e0 \u1092\'f4\u1080\'e8\u1095\'f7\u1072\'e0 \u1089\'f1 \u1080\'e8\u1079\'e7\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1085\'ed\u1072\'e0 \u1083\'eb\u1077\'e5\u1090\'f2\u1091\'f3 \u1085\'ed\u1077\'e5 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1074\'e2 \u1089\'f1\u1086\'ee\u1095\'f7\u1077\'e5\u1090\'f2\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1089\'f1 writable. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1072\'e0, \u1095\'f7\u1091\'f3\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1099\'fb\u1083\'eb\u1080\'e8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1076\'e4\u1074\'e2\u1077\'e5 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb - FTP-\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1080\'e8 SOCKS-\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8, \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1077\'e5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1084\'ec\u1080\'e8 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +ftppr } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +socks} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1086\'ee \u1091\'f3\u1084\'ec\u1086\'ee\u1083\'eb\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1086\'ee\u1085\'ed\u1080\'e8 \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1072\'e0\u1074\'e2\u1083\'eb\u1080\'e8\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1099\'fb 21 \u1080\'e8 1080 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1049\rtlch \ltrch\fs20\lang1049\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0 ftppr \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc "\u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1097\'f9\u1080\'e8\u1081\'e9" FTP-\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8, \u1089\'f1 \u1087\'ef\u1086\'ee\u1076\'e4\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1082\'ea\u1086\'ee\u1081\'e9 \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1086\'ee \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1085\'ed\u1072\'e0\u1073\'e1\u1086\'ee\u1088\'f0\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4 \u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1086\'ee\u1082\'ea\u1086\'ee\u1083\'eb\u1072\'e0 FTP, \u1085\'ed\u1077\'e5 \u1079\'e7\u1072\'e0\u1073\'e1\u1091\'f3\u1076\'e4\u1100\'fc\u1090\'f2\u1077\'e5 \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee FTP-\u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0 (\u1074\'e2 \u1084\'ec\u1086\'ee\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee FAR) \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 192.168.0.1 \u1085\'ed\u1072\'e0 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 21. \u1040\'c0 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0 SOCKS \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1080\'e8\u1090\'f2 \u1074\'e2\u1072\'e0\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1074\'e2\u1072\'e0\u1096\'f8\u1077\'e5\u1081\'e9 \u1083\'eb\u1102\'fe\u1073\'e1\u1080\'e8\u1084\'ec\u1086\'ee\u1081\'e9 \u1072\'e0\u1089\'f1\u1100\'fc\u1082\'ea\u1086\'ee\u1081\'e9, \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1074\'e2 \u1077\'e5\u1077\'e5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1091\'f3 SOCKS5, \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 192.168.0.1 \u1080\'e8 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 1080. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1086\'ee ICQ \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 SOCKS, \u1085\'ed\u1086\'ee \u1080\'e8 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1089\'f1\u1087\'ef\u1077\'e5\u1094\'f6\u1080\'e8\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 icqpr. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1091\'f3 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1079\'e7 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0 ICQ 123456789, \u1090\'f2\u1086\'ee \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1090\'f2\u1100\'fc:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth useronly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow 123456789} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +icqpr 5190 login.icq.com 5190} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1054\'ce\u1073\'e1\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1090\'f2\u1077\'e5 \u1074\'e2\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1085\'ed\u1072\'e0 \u1089\'f1\u1087\'ef\u1077\'e5\u1094\'f6\u1080\'e8\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1081\'e9 \u1074\'e2\u1080\'e8\u1076\'e4 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 useronly. \u1058\'d2\u1077\'e5, \u1082\'ea\u1086\'ee\u1084\'ec\u1091\'f3 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1083\'eb\u1077\'e5\u1085\'ed\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1087\'ef\u1080\'e8\u1089\'f1\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0 \u1076\'e4\u1083\'eb\u1103\'ff \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff, \u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1091\'f3\u1102\'fe \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff icqpr, \u1090\'f2\u1086\'ee \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1089\'f1\u1087\'ef\u1077\'e5\u1094\'f6\u1080\'e8\u1092\'f4\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1082\'ea\u1086\'ee\u1081\'e9. \u1053\'cd\u1077\'e5 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1075\'e3\u1072\'e0\u1083\'eb\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 \u171\'ab\u1048\'c8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8\u187\'bb, \u1072\'e0 \u1074\'e2\u1086\'ee\u1090\'f2 \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1083\'eb\u1072\'e0\u1075\'e3\u1072\'e0\u1102\'fe\u1097\'f9\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee \u1091\'f3\u1084\'ec\u1086\'ee\u1083\'eb\u1095\'f7\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 login.icq.com \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1085\'ed\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 IP \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0.\u1054\'ce\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1086\'ee\u1089\'f1\u1100\'fc \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1080\'e8\u1074\'e2\u1096\'f8\u1080\'e8\u1081\'e9\u1089\'f1\u1103\'ff \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1080\'e8\u1081\'e9 \u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1072\'e0\u1085\'ed\u1090\'f2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 6): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +service} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +monitor "c:\\3proxy\\bin\\3proxy.cfg"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +monitor "c:\\3proxy\\IP_list.txt"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 24000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nocountin * 192.168.0.4 * 110 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "1/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 50 * 192.168.0.2 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "2/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 80 * 192.168.0.3 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "3/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 30 * 192.168.0.4 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.200.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1054\'ce\u1063\'d7\u1058\'d2\u1040\'c0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3,192.168.0.4 * 25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 2500 smtp.provider.ru 25} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 2110 pop.mail.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 3110 pop.yandex.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +pop3p} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 21,1080 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +ftppr } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +socks} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +icqpr} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +admin } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1047\'c7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc \u1084\'ec\u1099\'fb \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1077\'e5\u1084\'ec \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0 \u1091\'f3\u1078\'e6\u1077\'e5 \u1085\'ed\u1077\'e5 \u1082\'ea\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1083\'eb\u1086\'ee\u1078\'e6\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5, \u1072\'e0 \u1082\'ea\u1072\'e0\u1082\'ea \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1091\'f3, \u1076\'e4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 service. \u1053\'cd\u1072\'e0\u1087\'ef\u1086\'ee\u1084\'ec\u1080\'e8\u1085\'ed\u1072\'e0\u1102\'fe, \u1095\'f7\u1090\'f2\u1086\'ee \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2\u1082\'ea\u1072\'e0 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb \u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1079\'e7\u1074\'e2\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 \u1080\'e8\u1079\'e7 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1085\'ed\u1086\'ee\u1081\'e9 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1080\'e8 Windows \u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1075\'e3\u1086\'ee \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb-\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1076\'e4\u1078\'e6\u1077\'e5\u1088\'f0\u1072\'e0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +3proxy --install } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb \u1085\'ed\u1077\'e5 \u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1074\'e2\u1080\'e8\u1089\'f1\u1077\'e5\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1099\'fb\u1093\'f5 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1072\'e0\u1093\'f5, \u1083\'eb\u1102\'fe\u1073\'e1\u1091\'f3\u1102\'fe \u1080\'e8\u1079\'e7 \u1085\'ed\u1080\'e8\u1093\'f5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1089\'f1\u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1081\'e9 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 \u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1077\'e5\u1081\'e9 -p\u1053\'cd\u1054\'ce\u1052\'cc\u1045\'c5\u1056\'d0_\u1055\'cf\u1054\'ce\u1056\'d0\u1058\'d2\u1040\'c0, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy -p8080} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +ftppr -p2121} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +admin -p8081} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1061\'d5\u1086\'ee\u1095\'f7\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1103\'ff\u1089\'f1\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5 \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1080\'e8\u1085\'ed \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1103\'ff \u1089\'f1\u1072\'e0\u1084\'ec \u1087\'ef\u1086\'ee\u1085\'ed\u1103\'ff\u1083\'eb \u1085\'ed\u1077\'e5 \u1089\'f1\u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3 \u1080\'e8 \u1087\'ef\u1086\'ee\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1075\'e3\u1086\'ee, \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee, \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1079\'e7\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1083\'eb\u1077\'e5\u1084\'ec\u1099\'fb \u1080\'e8 \u1091\'f3 \u1074\'e2\u1072\'e0\u1089\'f1. \u1069\'dd\u1090\'f2\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 auth strong. \u1055\'cf\u1088\'f0\u1077\'e5\u1076\'e4\u1087\'ef\u1086\'ee\u1083\'eb\u1086\'ee\u1078\'e6\u1080\'e8\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1085\'ed\u1072\'e0\u1084\'ec \u1093\'f5\u1086\'ee\u1095\'f7\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1095\'f7\u1090\'f2\u1086\'ee \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea WEB-\u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1073\'e1\u1099\'fb\u1083\'eb \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1077\'e5\u1085\'ed \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1089\'f1 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 192.168.0.4, \u1087\'ef\u1088\'f0\u1080\'e8\u1095\'f7\u1077\'e5\u1084\'ec \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1074\'e2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1096\'f8\u1080\'e8\u1074\'e2\u1072\'e0\u1083\'eb\u1089\'f1\u1103\'ff \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1102\'fe\u1097\'f9\u1072\'e0\u1103\'ff \u1089\'f1\u1077\'e5\u1082\'ea\u1094\'f6\u1080\'e8\u1103\'ff \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth strong} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow Administrator 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +admin} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8 \u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3\u1084\'ec\u1077\'e5\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1087\'ef\u1088\'f0\u1077\'e5\u1078\'e6\u1076\'e4\u1077\'e5 \u1095\'f7\u1077\'e5\u1084\'ec \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1077\'e5\u1081\'e9 strong, \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1079\'e7\u1072\'e0\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff, \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee Administrator: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +users Administrator:CL:password} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1082\'ea\u1077\'e5 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1091\'f3 WEB-\u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1089\'f1 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 \u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1096\'f8\u1080\'e8\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc, \u1072\'e0 \u1085\'ed\u1072\'e0 \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc\u1102\'fe \u1079\'e7\u1072\'e0\u1082\'ea\u1088\'f0\u1099\'fb\u1090\'f2. \u1050\'ca\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 deny * \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1076\'e4\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1089\'f1\u1091\'f3\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1085\'ed\u1077\'e5\u1103\'ff\u1074\'e2\u1085\'ed\u1086\'ee \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1077\'e5 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0, \u1080\'e8 \u1077\'e5\u1077\'e5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1073\'e1\u1099\'fb \u1085\'ed\u1077\'e5 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc, \u1085\'ed\u1086\'ee \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1077\'e5\u1077\'e5 \u1085\'ed\u1077\'e5 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2, \u1090\'f2\u1086\'ee \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1096\'f8\u1080\'e8\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1091\'f3 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1080\'e8 \u1089\'f1 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1081\'e9 \u1084\'ec\u1072\'e0\u1096\'f8\u1080\'e8\u1085\'ed\u1099\'fb, \u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1103\'ff\u1090\'f2 \u1074\'e2\u1089\'f1\u1077\'e5 \u1088\'f0\u1072\'e0\u1074\'e2\u1085\'ed\u1086\'ee \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1089\'f1 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0 192.168.0.4. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1078\'e6\u1077\'e5 \u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc\u1103\'ff \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1072\'e0 \u1074\'e2 \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5 \u1089\'f1\u1077\'e5\u1082\'ea\u1094\'f6\u1080\'e8\u1080\'e8 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow Administrator * * 80 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1086\'ee \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea \u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1102\'fe \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1089\'f1 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1075\'e3\u1086\'ee \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8 \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1098\'fa\u1103\'ff\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1080\'e8 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1103\'ff \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff Administrator. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1078\'e6\u1076\'e4\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5, \u1087\'ef\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5\u1081\'e9 \u1074\'e2\u1080\'e8\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8, \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1080\'e8\u1079\'e7\u1088\'f0\u1072\'e0\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1080\'e8\u1084\'ec \u1085\'ed\u1072\'e0 \u1090\'f2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1080\'e8\u1081\'e9 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2. \u1044\'c4\u1083\'eb\u1103\'ff \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1090\'f2\u1072\'e0\u1082\'ea\u1091\'f3\u1102\'fe \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc, \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1086\'ee \u1083\'eb\u1080\'e8\u1096\'f8\u1100\'fc \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1077\'e5\u1084\'ec\u1091\'f3 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1091\'f3 WEB-\u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff, \u1085\'ed\u1086\'ee \u1089\'f1 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1084\'ec\u1080\'e8 \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1072\'e0\u1084\'ec\u1080\'e8, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1086\'ee\u1085\'ed \u1084\'ec\u1086\'ee\u1075\'e3 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1077\'e5\u1082\'ea\u1091\'f3\u1097\'f9\u1080\'e8\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1089\'f1\u1074\'e2\u1086\'ee\u1077\'e5\u1075\'e3\u1086\'ee (\u1080\'e8 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1089\'f1\u1074\'e2\u1086\'ee\u1077\'e5\u1075\'e3\u1086\'ee!) \u1080\'e8\u1079\'e7\u1088\'f0\u1072\'e0\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8 \u1084\'ec\u1072\'e0\u1082\'ea\u1089\'f1\u1080\'e8\u1084\'ec\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1076\'e4\u1086\'ee\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1084\'ec\u1086\'ee\u1075\'e3\u1086\'ee \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0. \u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1091\'f3 admin \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1077\'e5\u1097\'f9\u1077\'e5 \u1088\'f0\u1072\'e0\u1079\'e7, \u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0 \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1086\'ee\u1084\'ec \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 \u1080\'e8 \u1089\'f1 \u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1086\'ee\u1084\'ec -s (\u1089\'f1\u1086\'ee\u1082\'ea\u1088\'f0\u1072\'e0\u1097\'f9\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1086\'ee\u1090\'f2 \u1089\'f1\u1083\'eb\u1086\'ee\u1074\'e2\u1072\'e0 security), \u1076\'e4\u1083\'eb\u1103\'ff \u1095\'f7\u1077\'e5\u1075\'e3\u1086\'ee \u1076\'e4\u1086\'ee\u1087\'ef\u1080\'e8\u1089\'f1\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1080\'e8: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +admin -p8081 -s} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1082\'ea\u1072\'e0\u1078\'e6\u1076\'e4\u1099\'fb\u1081\'e9 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1086\'ee\u1090\'f2\u1082\'ea\u1088\'f0\u1099\'fb\u1090\'f2\u1100\'fc \u1074\'e2 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1091\'f3 http://192.168.0.1:8081/C \u1080\'e8 \u1091\'f3\u1074\'e2\u1080\'e8\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1084\'ec \u1089\'f1\u1074\'e2\u1086\'ee\u1102\'fe \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1091\'f3. \u1040\'c0 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc Administrator \u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1077\'e5 http://192.168.0.1:8080/C \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1087\'ef\u1086\'ee\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1091\'f3 \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5. \u1055\'cf\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1072\'e0\u1103\'ff \u1093\'f5\u1080\'e8\u1090\'f2\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc: \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1087\'ef\u1086\'ee IP-\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3, \u1082\'ea\u1072\'e0\u1082\'ea \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5, \u1090\'f2\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1086\'ee\u1085\'ed \u1074\'e2\u1080\'e8\u1076\'e4\u1077\'e5\u1083\'eb \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1089\'f1\u1074\'e2\u1086\'ee\u1102\'fe \u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1080\'e8\u1089\'f1\u1090\'f2\u1080\'e8\u1082\'ea\u1091\'f3, \u1085\'ed\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1073\'e1\u1088\'f0\u1072\'e0\u1091\'f3\u1079\'e7\u1077\'e5\u1088\'f0\u1072\'e0 (\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0 Internet Explorer) \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea http://192.168.0.1 \u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1089\'f1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1083\'eb \u1073\'e1\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0. \u1048\'c8\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5 \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1072\'e0 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0 admin \u1091\'f3\u1074\'e2\u1080\'e8\u1076\'e4\u1080\'e8\u1090\'f2 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1089\'f1\u1072\'e0\u1084\'ec\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0, \u1090\'f2.\u1082\'ea. \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea \u1085\'ed\u1077\'e5\u1081\'e9 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1080\'e8 \u1086\'ee\u1090\'f2\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1085\'ed\u1077\'e5\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1079\'e7 \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1103\'ff\u1089\'f1\u1085\'ed\u1086\'ee, \u1095\'f7\u1090\'f2\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1103\'ff strong \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1087\'ef\u1086\'ee\u1083\'eb\u1072\'e0\u1075\'e3\u1072\'e0\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1077\'e5\u1088\'f0\u1082\'ea\u1091\'f3 \u1087\'ef\u1086\'ee \u1085\'ed\u1072\'e0\u1080\'e8\u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1091\'f3 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2: IP \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1077\'e5\u1081\'e9 \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1094\'f6\u1080\'e8\u1080\'e8, \u1080\'e8\u1084\'ec\u1103\'ff \u1080\'e8 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff, \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1093\'f5\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2, \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1086\'ee\u1074\'e2 \u1080\'e8 \u1090\'f2.\u1076\'e4., \u1074\'e2 \u1086\'ee\u1090\'f2\u1083\'eb\u1080\'e8\u1095\'f7\u1080\'e8\u1077\'e5 \u1086\'ee\u1090\'f2 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 iponly, \u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1080\'e8\u1084\'ec\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1077\'e5\u1088\'f0\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff - \u1085\'ed\u1086\'ee \u1079\'e7\u1074\'e2\u1077\'e5\u1079\'e7\u1076\'e4\u1086\'ee\u1095\'f7\u1082\'ea\u1091\'f3 \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed\u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1074\'e2 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1077\'e5 allow \u1084\'ec\u1099\'fb \u1074\'e2\u1089\'f1\u1077\'e5 \u1078\'e6\u1077\'e5 \u1074\'e2\u1099\'fb\u1085\'ed\u1091\'f3\u1078\'e6\u1076\'e4\u1077\'e5\u1085\'ed\u1099\'fb \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1076\'e4\u1083\'eb\u1103\'ff \u1089\'f1\u1086\'ee\u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8\u1084\'ec\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8! } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1040\'c0 \u1090\'f2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1087\'ef\u1086\'ee\u1083\'eb\u1086\'ee\u1078\'e6\u1080\'e8\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1085\'ed\u1072\'e0\u1084\'ec \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee \u1088\'f0\u1103\'ff\u1076\'e4\u1091\'f3 \u1087\'ef\u1088\'f0\u1080\'e8\u1095\'f7\u1080\'e8\u1085\'ed \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1085\'ed\u1072\'e0 \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1099\'fb, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5\u1080\'e8\u1079\'e7\u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9 www.anekdot.ru. \u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 nsrecord: } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nsrecord www.anekdot.ru 127.0.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1077\'e5\u1084\'ec \u1089\'f1\u1072\'e0\u1084\'ec\u1099\'fb\u1084\'ec \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1077\'e5\u1084\'ec \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0 \u1089\'f1 \u1072\'e0\u1085\'ed\u1077\'e5\u1082\'ea\u1076\'e4\u1086\'ee\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8 \u1085\'ed\u1072\'e0 \u1083\'eb\u1086\'ee\u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1081\'e9 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1101\'fd\u1090\'f2\u1091\'f3 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 \u1074\'e2 \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1080\'e8\u1079\'e7\u1086\'ee\u1097\'f9\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec \u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1072\'e0\u1085\'ed\u1090\'f2\u1077\'e5, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +nsrecord www.anekdot.ru 87.250.251.11} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0 www.anekdot.ru \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2 www.yandex.ru. \u1042\'c2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1103\'ff\u1085\'ed\u1076\'e4\u1077\'e5\u1082\'ea\u1089\'f1\u1072\'e0 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1073\'e1\u1099\'fb \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1085\'ed\u1072\'e0 \u1082\'ea\u1086\'ee\u1088\'f0\u1087\'ef\u1086\'ee\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1074\'e2\u1085\'ed\u1099\'fb\u1081\'e9 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1074\'e2 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 0.6 \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1080\'e8\u1083\'eb\u1072\'e0\u1089\'f1\u1100\'fc \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1085\'ed\u1086\'ee \u1091\'f3\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1103\'ff\u1090\'f2\u1100\'fc \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1086\'ee\u1084\'ec \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1085\'ed\u1072\'e0 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1099\'fb. \u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1091\'f3\u1078\'e6\u1077\'e5 \u1093\'f5\u1086\'ee\u1088\'f0\u1086\'ee\u1096\'f8\u1086\'ee \u1079\'e7\u1085\'ed\u1072\'e0\u1082\'ea\u1086\'ee\u1084\'ec\u1091\'f3\u1102\'fe \u1085\'ed\u1072\'e0\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 deny \u1089\'f1 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1096\'f8\u1072\'e0\u1073\'e1\u1083\'eb\u1086\'ee\u1085\'ed\u1086\'ee\u1074\'e2, \u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * * www.anekdot.ru *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1073\'e1\u1077\'e5\u1079\'e7\u1091\'f3\u1089\'f1\u1083\'eb\u1086\'ee\u1074\'e2\u1085\'ed\u1086\'ee \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1085\'ed\u1072\'e0 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2 }{{\field{\*\fldinst HYPERLINK "http://www.anekdot.ru/" }{\fldrslt {\cf2\ul\ulc0\langfe255\lang255\cf2\ul\ulc0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +www.anekdot.ru}}}} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * * anekdot* *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\tx1080\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs18\lang1049\loch\f7 +-\tab }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1099\'fb, \u1074\'e2 \u1085\'ed\u1072\'e0\u1079\'e7\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1093\'f5 \u1074\'e2\u1089\'f1\u1090\'f2\u1088\'f0\u1077\'e5\u1095\'f7\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff anekdot.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1087\'ef\u1088\'f0\u1086\'ee\u1076\'e4\u1074\'e2\u1080\'e8\u1085\'ed\u1091\'f3\u1090\'f2\u1099\'fb\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1080\'e8 \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3\u1090\'f2 \u1086\'ee\u1073\'e1\u1086\'ee\u1081\'e9\u1090\'f2\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1090\'f2 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1090\'f2, \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1097\'f9\u1072\'e0\u1103\'ff\u1089\'f1\u1100\'fc \u1082\'ea \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1091\'f3 \u1087\'ef\u1086\'ee \u1077\'e5\u1075\'e3\u1086\'ee IP \u1080\'e8\u1083\'eb\u1080\'e8 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1103\'ff \u1072\'e0\u1085\'ed\u1086\'ee\u1085\'ed\u1080\'e8\u1084\'ec\u1085\'ed\u1099\'fb\u1077\'e5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1099\'fb.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1059\'d3 \u1089\'f1\u1077\'e5\u1073\'e1\u1103\'ff \u1103\'ff \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1102\'fe \u1094\'f6\u1077\'e5\u1083\'eb\u1099\'fb\u1081\'e9 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1096\'f8\u1072\'e0\u1073\'e1\u1083\'eb\u1086\'ee\u1085\'ed\u1086\'ee\u1074\'e2, \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee, \u1082\'ea\u1086\'ee\u1084\'ec\u1091\'f3-\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1075\'e3\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * * *sex*,*porn*,*adult*,*xxx*,*gamepark*,*vagina*,*mpp3*,*seks*,*virgin*,*pipisk*,*pastushka*,*1xuk.ru*,*teens*,*zaycev*,*lubovmorkov*,*mp3*,*bannerbank*,*yadro*,*dosug.nu*,*lesbo*,*lesbian*,*eroti*,*viporg.ru*,*intim*,*erohost*,*eross*,*teenfant*,*nudist*,*pimpserver*,*banner*,*ads.sup.com*,*rb.mail.ru*,*counter.rambler.ru*,*carol.ru*,*video.mail.ru*,*pelotka*,*akadostream*,*media.kino-govno.com*,*odnoklassniki.ru*,*vkontakte.ru*,*zhuki.mail.ru*,*fishki.net*,*dofiga.net*} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1063\'d7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1085\'ed\u1072\'e0 \u1079\'e7\u1072\'e0\u1075\'e3\u1088\'f0\u1086\'ee\u1084\'ec\u1086\'ee\u1078\'e6\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1076\'e4\u1083\'eb\u1080\'e8\u1085\'ed\u1085\'ed\u1099\'fb\u1084\'ec\u1080\'e8 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8, \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 include \u1080\'e8 \u1084\'ec\u1072\'e0\u1082\'ea\u1088\'f0\u1086\'ee\u1089\'f1 $. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1099\'fb\u1076\'e4\u1091\'f3\u1097\'f9\u1072\'e0\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 \u1084\'ec\u1086\'ee\u1075\'e3\u1083\'eb\u1072\'e0 \u1073\'e1\u1099\'fb \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * * $c:\\3proxy\\ban.txt} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1076\'e4\u1077\'e5 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb ban.txt \u8212\'97 \u1101\'fd\u1090\'f2\u1086\'ee \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1081\'e9 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb, \u1089\'f1\u1086\'ee\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1072\'e0\u1097\'f9\u1080\'e8\u1081\'e9 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1090\'f2\u1085\'ed\u1099\'fb\u1093\'f5 \u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3\u1088\'f0\u1089\'f1\u1086\'ee\u1074\'e2 (\u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1079\'e7\u1072\'e0\u1087\'ef\u1103\'ff\u1090\'f2\u1091\'f3\u1102\'fe, \u1073\'e1\u1077\'e5\u1079\'e7 \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1086\'ee\u1074\'e2)} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1083\'eb\u1080\'e8\u1073\'e1\u1086\'ee}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1090\'f2\u1072\'e0\u1082\'ea}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +include c\\3proxy\\ban\-include.txt} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1076\'e4\u1077\'e5 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb ban_include.txt \u1089\'f1\u1086\'ee\u1076\'e4\u1077\'e5\u1088\'f0\u1078\'e6\u1072\'e0\u1083\'eb \u1073\'e1\u1099\'fb \u1074\'e2 \u1089\'f1\u1077\'e5\u1073\'e1\u1077\'e5 \u1074\'e2\u1089\'f1\u1102\'fe \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1091\'f3 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1089\'f1 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1077\'e5\u1090\'f2\u1072\'e0\u1084\'ec\u1080\'e8.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1046\'c6\u1077\'e5\u1083\'eb\u1072\'e0\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5 \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3\u1090\'f2 \u1085\'ed\u1072\'e0\u1081\'e9\u1090\'f2\u1080\'e8 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1080\'e8 \u1073\'e1\u1072\'e0\u1085\'ed-\u1083\'eb\u1080\'e8\u1089\'f1\u1090\'f2\u1086\'ee\u1074\'e2 \u1074\'e2 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1077\'e5 \u1080\'e8 \u1072\'e0\u1076\'e4\u1072\'e0\u1087\'ef\u1090\'f2\u1080\'e8\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1091\'f3 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 3proxy, \u1073\'e1\u1083\'eb\u1072\'e0\u1075\'e3\u1086\'ee \u1095\'f7\u1090\'f2\u1086\'ee \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9 \u1085\'ed\u1072\'e0 \u1088\'f0\u1072\'e0\u1079\'e7\u1084\'ec\u1077\'e5\u1088\'f0 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1085\'ed\u1077\'e5\u1090\'f2. \u1058\'d2\u1072\'e0\u1082\'ea \u1078\'e6\u1077\'e5 \u1082\'ea\u1072\'e0\u1082\'ea \u1085\'ed\u1077\'e5\u1090\'f2 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1081\'e9 \u1085\'ed\u1072\'e0 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1099\'fb, \u1074\'e2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1077\'e5 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 include. \u1053\'cd\u1072\'e0 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1099\'fb, \u1074\'e2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1077\'e5 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1084\'ec\u1072\'e0\u1082\'ea\u1088\'f0\u1086\'ee\u1089\'f1 $, \u1089\'f1\u1091\'f3\u1097\'f9\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1074\'e2 64 \u1082\'ea\u1080\'e8\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1083\'eb\u1103\'ff \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1072\'e0 \u1076\'e4\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1077\'e5\u1081\'e9\u1096\'f8\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1073\'e1\u1080\'e8\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1082\'ea\u1080\'e8\u1077\'e5 \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1077\'e5\u1083\'eb\u1099\'fb \u1080\'e8 \u1087\'ef\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0\u1088\'f0\u1080\'e8\u1103\'ff\u1084\'ec\u1080\'e8. \u1071\'df \u1101\'fd\u1090\'f2\u1086\'ee \u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1102\'fe \u1089\'f1 \u1087\'ef\u1086\'ee\u1084\'ec\u1086\'ee\u1097\'f9\u1100\'fc \u1089\'f1\u1080\'e8\u1084\'ec\u1074\'e2\u1086\'ee\u1083\'eb\u1072\'e0 #. \u1053\'cd\u1072\'e0\u1087\'ef\u1086\'ee\u1084\'ec\u1085\'ed\u1102\'fe, \u1095\'f7\u1090\'f2\u1086\'ee \u1083\'eb\u1102\'fe\u1073\'e1\u1072\'e0\u1103\'ff \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1072\'e0 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1085\'ed\u1072\'e0\u1102\'fe\u1097\'f9\u1072\'e0\u1103\'ff\u1089\'f1\u1103\'ff \u1089\'f1 \u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1077\'e5\u1083\'eb\u1072\'e0 \u1080\'e8\u1083\'eb\u1080\'e8 \u1089\'f1 \u1089\'f1\u1080\'e8\u1084\'ec\u1074\'e2\u1086\'ee\u1083\'eb\u1072\'e0 #, \u1074\'e2\u1086\'ee\u1089\'f1\u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1080\'e8\u1084\'ec\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1084\'ec \u1082\'ea\u1072\'e0\u1082\'ea \u1082\'ea\u1086\'ee\u1084\'ec\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0\u1088\'f0\u1080\'e8\u1081\'e9. \u1042\'c2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1086\'ee\u1082\'ea\u1086\'ee\u1085\'ed\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee "\u1074\'e2\u1099\'fb\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9" \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea (\u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1103\'ff 7): } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1054\'ce\u1041\'c1\u1065\'d9\u1048\'c8\u1045\'c5}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1040\'c0\u1056\'d0\u1040\'c0\u1052\'cc\u1045\'c5\u1058\'d2\u1056\'d0\u1067\'db} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +service} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +internal 192.168.0.1 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +external 211.80.11.12} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.100.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nserver 213.153.101.1} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nscache 65536} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * * anekdot* *monitor "c:\\3proxy\\bin\\3proxy.cfg"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +monitor "c:\\3proxy\\IP_list.txt"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +log c:\\3proxy\\logs\\3proxy.log D} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +rotate 30} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +archiver rar \u8220\'93\u8221\'94"c:\\Program Files\\WinRAR\\rar.exe\u8221\'94\u8221\'94" a -df -inul %A %F} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +# \u1047\'c7\u1040\'c0\u1044\'c4\u1040\'c0\u1045\'c5\u1052\'cc \u1055\'cf\u1054\'ce\u1051\'cb\u1068\'dc\u1047\'c7\u1054\'ce\u1042\'c2\u1040\'c0\u1058\'d2\u1045\'c5\u1051\'cb\u1045\'c5\u1049\'c9, \u1054\'ce\u1043\'c3\u1056\'d0\u1040\'c0\u1053\'cd\u1048\'c8\u1063\'d7\u1045\'c5\u1053\'cd\u1048\'c8\u1071\'df \u1057\'d1\u1050\'ca\u1054\'ce\u1056\'d0\u1054\'ce\u1057\'d1\u1058\'d2\u1048\'c8 \u1048\'c8 \u1057\'d1\u1063\'d7\u1045\'c5\u1058\'d2\u1063\'d7\u1048\'c8\u1050\'ca\u1048\'c8} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +users Administrator:CL:password} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nobandlimin * * * 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 24000 * 192.168.0.2,192.168.0.3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimin 48000 * 192.168.0.4} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +bandlimout 24000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +counter "c:\\3proxy\\3proxy.3cf" D "C:\\3proxy\\traf\\traf"} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +nocountin * 192.168.0.4 * 110 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "1/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1074\'e2\u1072\'e0\u1085\'ed\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 50 * 192.168.0.2 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin "2/}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1077\'e5\u1090\'f2\u1088\'f0\u1086\'ee\u1074\'e2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +" M 80 * 192.168.0.3 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +countin "3/\u1057\'d1\u1080\'e8\u1076\'e4\u1086\'ee\u1088\'f0\u1086\'ee\u1074\'e2" M 30 * 192.168.0.4 * * *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +# \u1056\'d0\u1040\'c0\u1047\'c7\u1044\'c4\u1040\'c0\u1045\'c5\u1052\'cc WEB} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * * *sex*,*porn*,*adult*,*xxx*,*gamepark*,*vagina*,*mpp3*,*seks*,*virgin*,*pipisk*,*pastushka*,*1xuk.ru*,*teens*,*zaycev*,*lubovmorkov*,*mp3*,*bannerbank*,*yadro*,*dosug.nu*,*lesbo*,*lesbian*,*eroti*,*viporg.ru*,*intim*,*erohost*,*eross*,*teenfant*,*nudist*,*pimpserver*,*banner*,*ads.sup.com*,*rb.mail.ru*,*counter.rambler.ru*,*carol.ru*,*video.mail.ru*,*pelotka*,*akadostream*,*media.kino-govno.com*,*odnoklassniki.ru*,*vkontakte.ru*,*zhuki.mail.ru*,*fishki.net*,*dofiga.net*} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.4 * * * 1-5 09:00:00-18:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 80,443 * 1-7 00:00:00-23:59:59} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +proxy \u8211\'96a -t} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1040\'c0\u1047\'c7\u1044\'c4\u1040\'c0\u1045\'c5\u1052\'cc}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1054\'ce\u1063\'d7\u1058\'d2\u1059\'d3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +deny * 192.168.200.4 * 110 * 1-5 18:00:00-23:59:59,00:00:00-08:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * $"c:\\3proxy\\IP_list.txt" * 3110,25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 25 smtp.provider.ru 25} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 2110 pop.mail.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 3110 pop.yandex.ru 110} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +# }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1040\'c0\u1047\'c7\u1044\'c4\u1040\'c0\u1045\'c5\u1052\'cc}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + FTP }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1040\'c0\u1057\'d1\u1068\'dc\u1050\'ca\u1059\'d3} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow * 192.168.0.2,192.168.0.3 * 2110,25,110 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +ftppr } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +socks} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +icqpr} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +# \u1040\'c0\u1044\'c4\u1052\'cc\u1048\'c8\u1053\'cd\u1048\'c8\u1057\'d1\u1058\'d2\u1056\'d0\u1040\'c0\u1058\'d2\u1048\'c8\u1042\'c2\u1053\'cd\u1067\'db\u1049\'c9 \u1044\'c4\u1054\'ce\u1057\'d1\u1058\'d2\u1059\'d3\u1055\'cf} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth strong} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow Administrator 192.168.0.4 * 80 * 1-5 00:00:00-20:00:00} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +admin} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +flush} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +auth iponly} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +allow *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +admin -p8081 -s} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +dnspr} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +end} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +# \u1050\'ca\u1054\'ce\u1053\'cd\u1045\'c5\u1062\'d6 \u1050\'ca\u1054\'ce\u1053\'cd\u1060\'d4\u1048\'c8\u1043\'c3\u1040\'c0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +###############################################################} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1086\'ee\u1075\'e3\u1083\'eb\u1072\'e0\u1089\'f1\u1080\'e8\u1090\'f2\u1077\'e5\u1089\'f1\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1090\'f2\u1072\'e0\u1082\'ea \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1085\'ed\u1072\'e0\u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1085\'ed\u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2\u1080\'e8\u1074\'e2\u1085\'ed\u1077\'e5\u1077\'e5 \u1080\'e8 \u1083\'eb\u1077\'e5\u1075\'e3\u1095\'f7\u1077\'e5 \u1074\'e2 \u1074\'e2\u1086\'ee\u1089\'f1\u1087\'ef\u1088\'f0\u1080\'e8\u1103\'ff\u1090\'f2\u1080\'e8\u1080\'e8. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1083\'eb\u1102\'fe\u1095\'f7 -\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1087\'ef\u1086\'ee\u1079\'e7\u1074\'e2\u1086\'ee\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2 \u1089\'f1\u1082\'ea\u1088\'f0\u1099\'fb\u1090\'f2\u1100\'fc \u1074\'e2\u1085\'ed\u1091\'f3\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1080\'e8\u1081\'e9 IP \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff, \u1074\'e2 \u1095\'f7\u1077\'e5\u1084\'ec \u1083\'eb\u1077\'e5\u1075\'e3\u1082\'ea\u1086\'ee \u1091\'f3\u1073\'e1\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3, \u1079\'e7\u1072\'e0\u1081\'e9\u1076\'e4\u1103\'ff \u1085\'ed\u1072\'e0 2ip.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1080\'e8 \u1085\'ed\u1077\'e5\u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1091\'f3\u1102\'fe \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 end. \u1042\'c2\u1089\'f1\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee \u1085\'ed\u1072\'e0\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1089\'f1\u1103\'ff \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1085\'ed\u1077\'e5\u1077\'e5, \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1084\'ec \u1085\'ed\u1077\'e5 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff. \u1050\'ca\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 end - \u1101\'fd\u1090\'f2\u1086\'ee \u1089\'f1\u1074\'e2\u1086\'ee\u1077\'e5\u1075\'e3\u1086\'ee \u1088\'f0\u1086\'ee\u1076\'e4\u1072\'e0 \u1079\'e7\u1085\'ed\u1072\'e0\u1082\'ea \u1075\'e3\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee, \u1076\'e4\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1072\'e0 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1082\'ea\u1086\'ee\u1084\'ec\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1072\'e0\u1088\'f0\u1080\'e8\u1103\'ff. \u1041\'c1\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1080\'e8\u1085\'ed\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1091\'f3\u1076\'e4\u1086\'ee\u1073\'e1\u1085\'ed\u1086\'ee \u1086\'ee\u1090\'f2\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1091\'f3\u1102\'fe \u1095\'f7\u1072\'e0\u1089\'f1\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1074\'e2 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4 \u1085\'ed\u1077\'e5\u1081\'e9 \u1101\'fd\u1090\'f2\u1091\'f3 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1088\'f0\u1086\'ee\u1084\'ec\u1077\'e5 \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1074\'e2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1083\'eb\u1080\'e8 \u1082\'ea\u1101\'fd\u1096\'f8\u1080\'e8\u1088\'f0\u1091\'f3\u1102\'fe\u1097\'f9\u1080\'e8\u1081\'e9 dns \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 dnspr, \u1090\'f2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1089\'f1\u1082\'ea\u1080\'e8\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1100\'fc\u1102\'fe\u1090\'f2\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5 \u1074\'e2 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0\u1093\'f5 \u1089\'f1\u1077\'e5\u1090\'f2\u1080\'e8 \u1085\'ed\u1072\'e0\u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2\u1100\'fc IP \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0 \u1082\'ea\u1072\'e0\u1082\'ea DNS \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1090\'f2\u1077\'e5\u1087\'ef\u1077\'e5\u1088\'f0\u1100\'fc \u1085\'ed\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4\u1082\'ea\u1080\'e8\u1081\'e9 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1081\'e9, \u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1085\'ed\u1091\'f3\u1078\'e6\u1085\'ed\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1088\'f0\u1072\'e0 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0, \u1090\'f2.\u1077\'e5. \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1081\'e9 \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1097\'f9\u1077\'e5\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8. \u1050\'ca\u1088\'f0\u1086\'ee\u1084\'ec\u1077\'e5 \u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee, \u1101\'fd\u1090\'f2\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1080\'e8\u1075\'e3\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 \u1091\'f3\u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1089\'f1\u1087\'ef\u1091\'f3\u1090\'f2\u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0, \u1082\'ea\u1072\'e0\u1082\'ea \u1101\'fd\u1090\'f2\u1086\'ee \u1073\'e1\u1099\'fb\u1083\'eb\u1086\'ee \u1091\'f3 \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1074\'e2\u1103\'ff\u1079\'e7\u1082\'ea\u1072\'e0 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff parent \u1080\'e8 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb allow. \u1056\'d0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1097\'f9\u1077\'e5\u1085\'ed \u1085\'ed\u1072\'e0 \u1083\'eb\u1086\'ee\u1082\'ea\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1084\'ec \u1093\'f5\u1086\'ee\u1089\'f1\u1090\'f2\u1077\'e5 127.0.0.1, \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2 3128 \u8212\'97 \u1090\'f2\u1080\'e8\u1087\'ef\u1080\'e8\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1081\'e9 \u1076\'e4\u1083\'eb\u1103\'ff \u1091\'f3\u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff \u1089\'f1\u1087\'ef\u1091\'f3\u1090\'f2\u1085\'ed\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1085\'ed\u1077\'e5\u1090\'f2\u1072\'e0. \u1042\'c2 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1077\'e5\u1081\'e9\u1096\'f8\u1080\'e8\u1081\'e9 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4\u1077\'e5\u1090\'f2\u1100\'fc \u1090\'f2\u1072\'e0\u1082\'ea:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +fakeresolve } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +auth iponly } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +parent 1000 http 127.0.0.1 3128} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +proxy -p8080} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1047\'c7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 fakeresolve, \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1084\'ec\u1072\'e0\u1103\'ff \u1076\'e4\u1083\'eb\u1103\'ff \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1080\'e8\u1084\'ec\u1077\'e5\u1085\'ed \u1074\'e2 \u1089\'f1\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1086\'ee\u1074\'e2 \u1085\'ed\u1072\'e0 \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee\u1103\'ff\u1097\'f9\u1080\'e8\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1077\'e5\u1086\'ee\u1073\'e1\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1084\'ec\u1086\'ee\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1089\'f1\u1083\'eb\u1086\'ee\u1074\'e2\u1080\'e8\u1077\'e5} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1074\'e2\u1099\'fb\u1096\'f8\u1077\'e5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1073\'e1\u1083\'eb\u1080\'e8\u1079\'e7\u1086\'ee\u1082\'ea \u1082\'ea \u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1103\'ff \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1102\'fe \u1074\'e2 \u1086\'ee\u1092\'f4\u1080\'e8\u1089\'f1\u1077\'e5, \u1079\'e7\u1072\'e0 \u1080\'e8\u1089\'f1\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1083\'eb\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1090\'f2\u1074\'e2\u1072\'e0 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 \u1080\'e8 \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1093\'f5 \u1089\'f1\u1087\'ef\u1077\'e5\u1094\'f6\u1080\'e8\u1092\'f4\u1080\'e8\u1095\'f7\u1085\'ed\u1099\'fb\u1093\'f5 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1086\'ee\u1074\'e2. \u1055\'cf\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1080\'e8\u1084\'ec\u1077\'e5\u1090\'f2\u1100\'fc \u1074\'e2 \u1074\'e2\u1080\'e8\u1076\'e4\u1091\'f3, \u1095\'f7\u1090\'f2\u1086\'ee \u1095\'f7\u1072\'e0\u1089\'f1\u1090\'f2\u1100\'fc \u1092\'f4\u1091\'f3\u1085\'ed\u1082\'ea\u1094\'f6\u1080\'e8\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8, \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1074\'e2 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0\u1093\'f5, \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1074\'e2 \u1074\'e2\u1077\'e5\u1088\'f0\u1089\'f1\u1080\'e8\u1080\'e8 0.6, \u1091\'f3\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1080\'e8\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee \u1082\'ea\u1086\'ee\u1085\'ed\u1082\'ea\u1088\'f0\u1077\'e5\u1090\'f2\u1085\'ed\u1099\'fb\u1084\'ec \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1084\'ec \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1074\'e2 changelog: http://3proxy.ru/current/Changelog.txt} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1087\'ef\u1088\'f0\u1080\'e8\u1079\'e7\u1085\'ed\u1072\'e0\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff, \u1095\'f7\u1090\'f2\u1086\'ee \u1084\'ec\u1099\'fb \u1085\'ed\u1077\'e5 \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1083\'eb\u1080\'e8 \u1080\'e8 \u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1080\'e8 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1099\'fb\u1093\'f5 \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1077\'e5\u1082\'ea \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0. \u1045\'c5\u1089\'f1\u1090\'f2\u1100\'fc \u1077\'e5\u1097\'f9\u1077\'e5 \u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1074\'e2\u1072\'e0\u1084\'ec \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3\u1090\'f2 \u1087\'ef\u1086\'ee\u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee\u1073\'e1\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff - dialer, maxconn, system, i, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1080\'e8\u1089\'f1\u1100\'fc \u1085\'ed\u1077\'e5 \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1084\'ec\u1080\'e8 \u1074\'e2\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5, \u1076\'e4\u1072\'e0 \u1080\'e8 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1086\'ee\u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1079\'e7\u1080\'e8\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1099\'fb\u1093\'f5 \u1089\'f1\u1086\'ee\u1095\'f7\u1077\'e5\u1090\'f2\u1072\'e0\u1085\'ed\u1080\'e8\u1081\'e9 \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4 \u1085\'ed\u1072\'e0\u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1073\'e1\u1086\'ee\u1075\'e3\u1072\'e0\u1095\'f7\u1077\'e5. \u1053\'cd\u1086\'ee \u1103\'ff \u1080\'e8 \u1085\'ed\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb \u1089\'f1\u1077\'e5\u1073\'e1\u1077\'e5 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1095\'f7\u1091\'f3 \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5-\u1084\'ec\u1077\'e5\u1085\'ed\u1077\'e5\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1086\'ee\u1077\'e5 \u1086\'ee\u1087\'ef\u1080\'e8\u1089\'f1\u1072\'e0\u1085\'ed\u1080\'e8\u1077\'e5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1080\'e8\u1074\'e2\u1096\'f8\u1080\'e8\u1089\'f1\u1100\'fc \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1089\'f1\u1082\'ea\u1088\'f0\u1086\'ee\u1084\'ec\u1085\'ed\u1086\'ee\u1081\'e9 - \u1088\'f0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1088\'f0\u1103\'ff\u1076\'e4\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2, \u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1082\'ea\u1072\'e0\u1082\'ea \u1084\'ec\u1072\'e0\u1090\'f2\u1088\'f0\u1077\'e5\u1096\'f8\u1082\'ea\u1072\'e0 - \u1086\'ee\u1090\'f2 \u1089\'f1\u1072\'e0\u1084\'ec\u1086\'ee\u1075\'e3\u1086\'ee \u1084\'ec\u1072\'e0\u1083\'eb\u1077\'e5\u1085\'ed\u1100\'fc\u1082\'ea\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8 \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1076\'e4\u1086\'ee \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1086\'ee \u1089\'f1\u1083\'eb\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8 "\u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee" - \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1085\'ed\u1072\'e0 \u1080\'e8\u1093\'f5 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1077\'e5 \u1087\'ef\u1086\'ee\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1099\'fb\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1094\'f6\u1080\'e8\u1087\'ef\u1099\'fb. \u1053\'cd\u1077\'e5\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1103\'ff \u1085\'ed\u1072\'e0 \u1082\'ea\u1072\'e0\u1078\'e6\u1091\'f3\u1097\'f9\u1091\'f3\u1102\'fe\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1099\'fb\u1081\'e9 \u1074\'e2\u1079\'e7\u1075\'e3\u1083\'eb\u1103\'ff\u1076\'e4 \u1089\'f1\u1083\'eb\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1100\'fc \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1082\'ea\u1080\'e8 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1085\'ed\u1072\'e0\u1076\'e4\u1077\'e5\u1102\'fe\u1089\'f1\u1100\'fc, \u1074\'e2 \u1087\'ef\u1088\'f0\u1086\'ee\u1094\'f6\u1077\'e5\u1089\'f1\u1089\'f1\u1077\'e5 \u1095\'f7\u1090\'f2\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1090\'f2\u1077\'e5\u1082\'ea\u1089\'f1\u1090\'f2\u1072\'e0 \u1074\'e2\u1099\'fb \u1091\'f3\u1078\'e6\u1077\'e5 \u1091\'f3\u1073\'e1\u1077\'e5\u1076\'e4\u1080\'e8\u1083\'eb\u1080\'e8\u1089\'f1\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2 \u1085\'ed\u1077\'e5\u1084\'ec \u1074\'e2\u1089\'f1\u1077\'e5 \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee. \u1054\'ce\u1087\'ef\u1103\'ff\u1090\'f2\u1100\'fc \u1078\'e6\u1077\'e5 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1087\'ef\u1088\'f0\u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1084\'ec\u1084\'ec\u1099\'fb \u1086\'ee\u1073\'e1\u1077\'e5\u1097\'f9\u1072\'e0\u1077\'e5\u1090\'f2 \u1082\'ea \u1088\'f0\u1077\'e5\u1083\'eb\u1080\'e8\u1079\'e7\u1091\'f3 \u1089\'f1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3 \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1084\'ec \u1080\'e8 \u1087\'ef\u1086\'ee\u1085\'ed\u1103\'ff\u1090\'f2\u1085\'ed\u1099\'fb\u1084\'ec. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1072\'e0\u1078\'e6\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc, \u1082\'ea\u1072\'e0\u1082\'ea \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2 \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0. \u1054\'ce\u1095\'f7\u1077\'e5\u1085\'ed\u1100\'fc \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee - \u1074\'e2 \u1087\'ef\u1086\'ee\u1088\'f0\u1103\'ff\u1076\'e4\u1082\'ea\u1077\'e5 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4 \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1091\'f3 \u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1100\'fc, \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1083\'eb\u1080\'e8 \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1085\'ed\u1072\'e0 \u1090\'f2\u1086\'ee\u1090\'f2 \u1080\'e8\u1083\'eb\u1080\'e8 \u1080\'e8\u1085\'ed\u1086\'ee\u1081\'e9 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1 - \u1086\'ee\u1085\'ed \u1080\'e8\u1097\'f9\u1077\'e5\u1090\'f2 \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1077\'e5 \u1091\'f3\u1076\'e4\u1086\'ee\u1074\'e2\u1083\'eb\u1077\'e5\u1090\'f2\u1074\'e2\u1086\'ee\u1088\'f0\u1103\'ff\u1102\'fe\u1097\'f9\u1077\'e5\u1077\'e5 \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1086\'ee \u1080\'e8\u1079\'e7 \u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1082\'ea\u1072\'e0 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1086\'ee\u1074\'e2 (ACL) \u1080\'e8 \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1074\'e2 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1080\'e8\u1080\'e8 \u1089\'f1 \u1085\'ed\u1080\'e8\u1084\'ec, \u1076\'e4\u1072\'e0\u1078\'e6\u1077\'e5 \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1085\'ed\u1077\'e5\u1075\'e3\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1077\'e5 \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1072\'e0. \u1048\'c8 \u1077\'e5\u1097\'f9\u1077\'e5 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee - \u1074\'e2\u1089\'f1\u1077\'e5 \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1099\'fb \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1044\'c4\u1054\'ce \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1102\'fe\u1097\'f9\u1077\'e5\u1081\'e9 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb - \u1076\'e4\u1086\'ee\u1073\'e1\u1088\'f0\u1086\'ee \u1087\'ef\u1086\'ee\u1078\'e6\u1072\'e0\u1083\'eb\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0 \u1092\'f4\u1086\'ee\u1088\'f0\u1091\'f3\u1084\'ec http://3proxy.ru/board.html. \u1042\'c2\u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec, \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1091\'f3\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1090\'f2\u1080\'e8\u1087\'ef\u1072\'e0 "\u1072\'e0 \u1087\'ef\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec\u1091\'f3 \u1091\'f3 \u1084\'ec\u1077\'e5\u1085\'ed\u1103\'ff \u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1077\'e5 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1077\'e5\u1090\'f2?" \u1079\'e7\u1076\'e4\u1077\'e5\u1089\'f1\u1100\'fc, \u1082\'ea\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1086\'ee, \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1080\'e8 \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1074\'e2\u1072\'e0\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1077\'e5 \u1095\'f7\u1090\'f2\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1093\'f5\u1086\'ee\u1090\'f2\u1103\'ff \u1073\'e1\u1099\'fb FAQ \u1080\'e8 HowTO \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1085\'ed\u1086\'ee \u1080\'e8 \u1103\'ff\u1074\'e2\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1086\'ee\u1073\'e1\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1084\'ec. \u1053\'cd\u1072\'e0 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1089\'f1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1072\'e0 \u1084\'ec\u1086\'ee\u1075\'e3\u1091\'f3 \u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1074\'e2\u1077\'e5\u1090\'f2\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1089\'f1 \u1088\'f0\u1091\'f3\u1089\'f1\u1089\'f1\u1082\'ea\u1086\'ee\u1103\'ff\u1079\'e7\u1099\'fb\u1095\'f7\u1085\'ed\u1099\'fb\u1093\'f5 FAQ \u1080\'e8 HowTO, \u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1084\'ec \u1076\'e4\u1083\'eb\u1103\'ff \u1089\'f1\u1088\'f0\u1072\'e0\u1074\'e2\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1095\'f7\u1080\'e8\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1072\'e0\u1085\'ed\u1075\'e3\u1083\'eb\u1086\'ee\u1103\'ff\u1079\'e7\u1099\'fb\u1095\'f7\u1085\'ed\u1099\'fb\u1077\'e5 FAQ \u1080\'e8 HowTO, \u1103\'ff \u1074\'e2 \u1085\'ed\u1080\'e8\u1093\'f5 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1083\'eb \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1074\'e2\u1079\'e7\u1072\'e0\u1080\'e8\u1084\'ec\u1086\'ee\u1076\'e4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1103\'ff\u1102\'fe\u1097\'f9\u1080\'e8\u1077\'e5 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2\u1099\'fb. \u1053\'cd\u1091\'f3 \u1080\'e8 \u1088\'f0\u1072\'e0\u1079\'e7\u1091\'f3\u1084\'ec\u1077\'e5\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff, \u1084\'ec\u1077\'e5\u1076\'e4\u1080\'e8\u1090\'f2\u1072\'e0\u1094\'f6\u1080\'e8\u1103\'ff \u1085\'ed\u1072\'e0\u1076\'e4 man (\u1091\'f3\u1074\'e2\u1099\'fb, \u1086\'ee\u1085\'ed \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1085\'ed\u1072\'e0 \u1072\'e0\u1085\'ed\u1075\'e3\u1083\'eb\u1080\'e8\u1081\'e9\u1089\'f1\u1082\'ea\u1086\'ee\u1084\'ec) \u1076\'e4\u1072\'e0\u1089\'f1\u1090\'f2 \u1074\'e2\u1072\'e0\u1084\'ec \u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1099\'fb \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1080\'e8 \u1085\'ed\u1072\'e0 \u1074\'e2\u1089\'f1\u1077\'e5 \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1087\'ef\u1086\'ee \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3 \u1079\'e7\u1072\'e0\u1084\'ec\u1077\'e5\u1095\'f7\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1091\'f3. \u1052\'cc\u1086\'ee\u1075\'e3\u1091\'f3 \u1091\'f3\u1090\'f2\u1074\'e2\u1077\'e5\u1088\'f0\u1078\'e6\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1101\'fd\u1090\'f2\u1086\'ee \u1087\'ef\u1086\'ee \u1089\'f1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 \u1086\'ee\u1087\'ef\u1099\'fb\u1090\'f2\u1091\'f3. \u1053\'cd\u1072\'e0 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1096\'f8\u1080\'e8\u1077\'e5\u1089\'f1\u1103\'ff \u1077\'e5\u1097\'f9\u1077\'e5 \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0\u1081\'e9\u1090\'f2\u1080\'e8 \u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1099\'fb \u1074\'e2 changelog, \u1085\'ed\u1091\'f3 \u1072\'e0 \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1080\'e8 \u1090\'f2\u1072\'e0\u1084\'ec \u1074\'e2\u1099\'fb \u1085\'ed\u1077\'e5 \u1085\'ed\u1072\'e0\u1081\'e9\u1076\'e4\u1077\'e5\u1090\'f2\u1077\'e5 \u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1072\'e0 - \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1080\'e8\u1090\'f2, \u1091\'f3\u1078\'e6\u1077\'e5 \u1087\'ef\u1086\'ee\u1088\'f0\u1072\'e0 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1 \u1085\'ed\u1072\'e0 \u1092\'f4\u1086\'ee\u1088\'f0\u1091\'f3\u1084\'ec\u1077\'e5. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1086\'ee\u1090\'f2 30 \u1084\'ec\u1072\'e0\u1088\'f0\u1090\'f2\u1072\'e0 2010 \u1075\'e3\u1086\'ee\u1076\'e4\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1056\'d0\u1072\'e0\u1089\'f1\u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8\u1084\'ec \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1095\'f7\u1072\'e0\u1097\'f9\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1086\'ee \u1074\'e2\u1086\'ee\u1079\'e7\u1085\'ed\u1080\'e8\u1082\'ea\u1072\'e0\u1102\'fe\u1090\'f2 \u1091\'f3 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +3}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +proxy}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. \u1040\'c0 \u1090\'f2\u1072\'e0\u1082\'ea\u1078\'e6\u1077\'e5 \u1085\'ed\u1077\'e5\u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1077\'e5 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1085\'ed\u1099\'fb\u1077\'e5, \u1085\'ed\u1086\'ee \u1085\'ed\u1077\'e5\u1086\'ee\u1095\'f7\u1077\'e5\u1074\'e2\u1080\'e8\u1076\'e4\u1085\'ed\u1099\'fb\u1077\'e5 \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +1. \u1050\'ca\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1103\'ff\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +MAC}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +-}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1074\'e2\u1086\'ee\u1081\'e9 \u1082\'ea\u1072\'e0\u1088\'f0\u1090\'f2\u1099\'fb \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1083\'eb\u1103\'ff \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +system}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +system arp -s 1.2.3.4 AA:BB:CC:DD:EE:FF}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 + } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1101\'fd\u1090\'f2\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1072\'e0 \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1076\'e4\u1072\'e0\u1077\'e5\u1090\'f2 \u1086\'ee\u1090\'f2\u1089\'f1\u1099\'fb\u1083\'eb\u1082\'ea\u1091\'f3 \u1082\'ea \u1089\'f1\u1080\'e8\u1089\'f1\u1090\'f2\u1077\'e5\u1084\'ec\u1085\'ed\u1086\'ee\u1081\'e9 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1077\'e5}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +arp}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1072\'e0\u1103\'ff \u1087\'ef\u1088\'f0\u1080\'e8\u1074\'e2\u1103\'ff\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +IP}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1082\'ea \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1084\'ec\u1091\'f3 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +MAC}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +-}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +2. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1083\'eb\u1080\'e8 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1094\'f6\u1077\'e5\u1083\'eb\u1099\'fb\u1077\'e5 \u1089\'f1\u1077\'e5\u1090\'f2\u1082\'ea\u1080\'e8, \u1090\'f2.\u1077\'e5. \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1084\'ec\u1072\'e0\u1089\'f1\u1082\'ea\u1091\'f3 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +192.168.100.* }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1095\'f7\u1080\'e8\u1089\'f1\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +IP}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1072\'e0, \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +CIDR}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1082\'ea \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1091\'f3:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +allow}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + * 192.168.100/32} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +3}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. \u1045\'c5\u1089\'f1\u1090\'f2\u1100\'fc \u1083\'eb\u1080\'e8 \u1076\'e4\u1080\'e8\u1085\'ed\u1072\'e0\u1084\'ec\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1082\'ea\u1080\'e8\u1081\'e9 \u1096\'f8\u1077\'e5\u1081\'e9\u1087\'ef\u1077\'e5\u1088\'f0 \u1074\'e2 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +3}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +proxy}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1090\'f2.\u1077\'e5. \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1083\'eb\u1080\'e8 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1088\'f0\u1080\'e8\u1086\'ee\u1088\'f0\u1080\'e8\u1090\'f2\u1077\'e5\u1090\'f2\u1099\'fb \u1087\'ef\u1086\'ee \u1089\'f1\u1082\'ea\u1086\'ee\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8 \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0 \u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2 (\u1084\'ec\u1072\'e0\u1088\'f0\u1090\'f2 2010) \u1085\'ed\u1077\'e5\u1090\'f2, \u1085\'ed\u1086\'ee \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0 \u1086\'ee\u1073\'e1\u1077\'e5\u1097\'f9\u1072\'e0\u1083\'eb \u1087\'ef\u1088\'f0\u1080\'e8\u1082\'ea\u1088\'f0\u1091\'f3\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +4. \u1045\'c5\u1089\'f1\u1090\'f2\u1100\'fc \u1083\'eb\u1080\'e8 \u1072\'e0\u1085\'ed\u1090\'f2\u1080\'e8\u1074\'e2\u1080\'e8\u1088\'f0\u1091\'f3\u1089\'f1\u1085\'ed\u1099\'fb\u1081\'e9 \u1084\'ec\u1086\'ee\u1076\'e4\u1091\'f3\u1083\'eb\u1100\'fc \u1074\'e2 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +3}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +proxy}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1080\'e8 \u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2 \u1085\'ed\u1072\'e0 \u1074\'e2\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1 3.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +5. \u1043\'c3\u1076\'e4\u1077\'e5 \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1080\'e8\u1079\'e7\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0 \u1083\'eb\u1086\'ee\u1075\'e3\u1086\'ee\u1074\'e2 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +WRSpy}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +http://www.wrspy.ru/download/WrSpySetup.rar - \u1089\'f1\u1089\'f1\u1099\'fb\u1083\'eb\u1082\'ea\u1072\'e0 \u1085\'ed\u1072\'e0 \u1080\'e8\u1085\'ed\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1083\'eb\u1103\'ff\u1090\'f2\u1086\'ee\u1088\'f0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +http://www.wrspy.ru/download/WrSpyUp166.rar - \u1089\'f1\u1089\'f1\u1099\'fb\u1083\'eb\u1082\'ea\u1072\'e0 \u1085\'ed\u1072\'e0 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1085\'ed\u1077\'e5\u1077\'e5 \u1086\'ee\u1073\'e1\u1085\'ed\u1086\'ee\u1074\'e2\u1083\'eb\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +6. \u1050\'ca\u1072\'e0\u1082\'ea \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1075\'e3\u1083\'eb\u1086\'ee\u1073\'e1\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1099\'fb \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0, \u1086\'ee\u1090\'f2\u1085\'ed\u1086\'ee\u1089\'f1\u1103\'ff\u1097\'f9\u1080\'e8\u1077\'e5\u1089\'f1\u1103\'ff \u1082\'ea\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5\u1084\'ec \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1084\'ec \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0\u1084\'ec?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1099\'fb \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0 \u1074\'e2\u1099\'fb\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1103\'ff\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1085\'ed\u1077\'e5\u1087\'ef\u1086\'ee\u1089\'f1\u1088\'f0\u1077\'e5\u1076\'e4\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff, \u1090\'f2.\u1077\'e5. \u1082\'ea\u1072\'e0\u1082\'ea \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1077\'e5\u1085\'ed\u1072\'e0 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 "proxy" - \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1072\'e0 \u1089\'f1\u1090\'f2\u1072\'e0\u1088\'f0\u1090\'f2\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1 \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1086\'ee\u1081\'e9 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1077\'e5\u1081\'e9 \u1080\'e8 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1101\'fd\u1090\'f2\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1095\'f7\u1080\'e8\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1072\'e0\u1103\'ff \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0. \u1055\'cf\u1086\'ee\u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec\u1091\'f3 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1076\'e4\u1072\'e0 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1085\'ed\u1077\'e5\u1081\'e9 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9, \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1085\'ed\u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1075\'e3\u1086\'ee \u1085\'ed\u1077\'e5 \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1086\'ee \u1073\'e1\u1099\'fb\u1090\'f2\u1100\'fc, \u1082\'ea\u1088\'f0\u1086\'ee\u1084\'ec\u1077\'e5 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1091\'f3\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 \u1089\'f1\u1083\'eb\u1077\'e5\u1076\'e4\u1091\'f3\u1102\'fe\u1097\'f9\u1077\'e5\u1081\'e9 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb. \u1045\'c5\u1089\'f1\u1083\'eb\u1080\'e8 \u1095\'f7\u1090\'f2\u1086\'ee-\u1090\'f2\u1086\'ee \u1080\'e8 \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1072\'e0 \u1089\'f1\u1083\'eb\u1091\'f3\u1078\'e6\u1073\'e1\u1099\'fb - \u1101\'fd\u1090\'f2\u1086\'ee \u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1089\'f1\u1086\'ee\u1074\'e2\u1087\'ef\u1072\'e0\u1076\'e4\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5, \u1074\'e2 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1081\'e9 \u1084\'ec\u1086\'ee\u1084\'ec\u1077\'e5\u1085\'ed\u1090\'f2 \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +7. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1083\'eb\u1080\'e8 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1085\'ed\u1077\'e5\u1089\'f1\u1082\'ea\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1093\'f5 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1086\'ee\u1074\'e2 \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0 parent \u1089\'f1 \u1085\'ed\u1091\'f3\u1083\'eb\u1077\'e5\u1074\'e2\u1099\'fb\u1084\'ec \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1086\'ee\u1084\'ec \u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1072\'e0\u1074\'e2\u1083\'eb\u1080\'e8\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1084\'ec\u1086\'ee\u1075\'e3\u1086\'ee \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1\u1072\'e0. \u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow vasya } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +parent 1000 http 192.168.1.1 0 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow petya } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +parent 1000 http 192.168.2.1 0 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1091\'f3\u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1072\'e0\u1074\'e2\u1083\'eb\u1080\'e8\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1074\'e2\u1085\'ed\u1077\'e5\u1096\'f8\u1085\'ed\u1080\'e8\u1081\'e9 \u1080\'e8\u1085\'ed\u1090\'f2\u1077\'e5\u1088\'f0\u1092\'f4\u1077\'e5\u1081\'e9\u1089\'f1 192.168.1.1 \u1076\'e4\u1083\'eb\u1103\'ff vasya \u1080\'e8 192.168.2.1 \u1076\'e4\u1083\'eb\u1103\'ff petya} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +8. \u1050\'ca\u1072\'e0\u1082\'ea \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1080\'e8\u1090\'f2\u1100\'fc \u1092\'f4\u1080\'e8\u1083\'eb\u1100\'fc\u1090\'f2\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1102\'fe \u1085\'ed\u1077\'e5\u1078\'e6\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1093\'f5 \u1088\'f0\u1077\'e5\u1089\'f1\u1091\'f3\u1088\'f0\u1089\'f1\u1086\'ee\u1074\'e2 (\u1085\'ed\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1076\'e4\u1083\'eb\u1103\'ff \u1096\'f8\u1082\'ea\u1086\'ee\u1083\'eb\u1099\'fb)?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1086\'ee\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5\u1089\'f1\u1100\'fc }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +DNS}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + \u1057\'d1\u1080\'e8\u1089\'f1\u1090\'f2\u1077\'e5\u1084\'ec\u1099\'fb \u1082\'ea\u1086\'ee\u1085\'ed\u1090\'f2\u1077\'e5\u1085\'ed\u1090\'f2\u1085\'ed\u1086\'ee\u1081\'e9 \u1092\'f4\u1080\'e8\u1083\'eb\u1100\'fc\u1090\'f2\u1088\'f0\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +nserver}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + 81.176.72.82} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +nserver}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + 81.176.72.83} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2\u1089\'f1\u1077\'e5 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1099\'fb \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1089\'f1\u1080\'e8\u1089\'f1\u1090\'f2\u1077\'e5\u1084\'ec\u1086\'ee\u1081\'e9 \u1080\'e8 \u1087\'ef\u1088\'f0\u1072\'e0\u1082\'ea\u1090\'f2\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1082\'ea\u1080\'e8 \u1085\'ed\u1080\'e8 \u1086\'ee\u1076\'e4\u1085\'ed\u1072\'e0 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6\u1072\'e0 \u1089\'f1 \u1087\'ef\u1086\'ee\u1088\'f0\u1085\'ed\u1086\'ee \u1085\'ed\u1077\'e5 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1085\'ed\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1072\'e0\u1074\'e2\u1076\'e4\u1072\'e0, \u1089\'f1\u1080\'e8\u1089\'f1\u1090\'f2\u1077\'e5\u1084\'ec\u1072\'e0 \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1078\'e6\u1077\'e5\u1089\'f1\u1090\'f2\u1082\'ea\u1086\'ee \u1092\'f4\u1080\'e8\u1083\'eb\u1100\'fc\u1090\'f2\u1088\'f0\u1091\'f3\u1077\'e5\u1090\'f2 \u1082\'ea\u1086\'ee\u1085\'ed\u1090\'f2\u1077\'e5\u1085\'ed\u1090\'f2 \u1080\'e8 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1082\'ea\u1088\'f0\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1076\'e4\u1086\'ee\u1074\'e2\u1086\'ee\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1084\'ec\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee \u1089\'f1\u1088\'f0\u1072\'e0\u1074\'e2\u1085\'ed\u1080\'e8\u1090\'f2\u1077\'e5\u1100\'fc\u1085\'ed\u1086\'ee \u1073\'e1\u1077\'e5\u1079\'e7\u1086\'ee\u1087\'ef\u1072\'e0\u1089\'f1\u1085\'ed\u1099\'fb\u1093\'f5 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1086\'ee\u1074\'e2.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +9. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1083\'eb\u1080\'e8 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1079\'e7\u1076\'e4\u1077\'e5\u1083\'eb\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc \u1074\'e2 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1086\'ee\u1084\'ec \u1082\'ea\u1083\'eb\u1080\'e8\u1077\'e5\u1085\'ed\u1090\'f2\u1077\'e5, \u1086\'ee\u1090\'f2\u1083\'eb\u1080\'e8\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1086\'ee\u1090\'f2 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +#}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +delimchar} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +10. }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1082\'ea \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1073\'e1\u1077\'e5\u1079\'e7\u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5 \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1086\'ee\u1077\'e5 \u1086\'ee\u1085\'ed \u1085\'ed\u1077\'e5 \u1089\'f1\u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1074\'e2\u1099\'fb\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1087\'ef\u1088\'f0\u1080\'e8\u1085\'ed\u1094\'f6\u1080\'e8\u1087\'ef\u1077\'e5.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +11. \u1050\'ca\u1072\'e0\u1082\'ea \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1102\'fe \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1086\'ee\u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1082\'ea\u1086\'ee\u1090\'f2\u1086\'ee\u1088\'f0\u1099\'fb\u1081\'e9 \u1086\'ee\u1085\'ed \u1084\'ec\u1086\'ee\u1078\'e6\u1077\'e5\u1090\'f2 \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1074\'e2 \u1083\'eb\u1102\'fe\u1073\'e1\u1086\'ee\u1077\'e5 \u1074\'e2\u1088\'f0\u1077\'e5\u1084\'ec\u1103\'ff, \u1072\'e0 \u1085\'ed\u1077\'e5 \u1090\'f2\u1086\'ee\u1083\'eb\u1100\'fc\u1082\'ea\u1086\'ee \u1074\'e2 \u1076\'e4\u1072\'e0\u1085\'ed\u1085\'ed\u1099\'fb\u1081\'e9 \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1094\'f6 \u1080\'e8\u1083\'eb\u1080\'e8 \u1076\'e4\u1077\'e5\u1085\'ed\u1100\'fc?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1048\'c8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + Y - }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1085\'ed\u1072\'e0}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1086\'ee\u1076\'e4}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +, N - }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1085\'ed\u1080\'e8\u1082\'ea\u1086\'ee\u1075\'e3\u1076\'e4\u1072\'e0}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1076\'e4\u1083\'eb\u1103\'ff}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1072\'e0\u1088\'f0\u1072\'e0\u1084\'ec\u1077\'e5\u1090\'f2\u1088\'f0\u1072\'e0}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +type: }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +1}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +2}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. \u1055\'cf\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec\u1091\'f3 \u1086\'ee\u1075\'e3\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea\u1072\'e0 \u1085\'ed\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1075\'e3\u1076\'e4\u1072\'e0 \u1076\'e4\u1077\'e5\u1081\'e9\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1087\'ef\u1088\'f0\u1080\'e8 \u1089\'f1\u1082\'ea\u1072\'e0\u1095\'f7\u1080\'e8\u1074\'e2\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1086\'ee\u1074\'e2?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +3proxy \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1077\'e5\u1088\'f0\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2 \u1079\'e7\u1072\'e0\u1082\'ea\u1072\'e0\u1095\'f7\u1082\'ea\u1091\'f3 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1072\'e0 \u1080\'e8 \u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2 \u1085\'ed\u1077\'e5 \u1103\'ff\u1074\'e2\u1083\'eb\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1078\'e6\u1077\'e5\u1089\'f1\u1090\'f2\u1082\'ea\u1080\'e8\u1084\'ec. \u1053\'cd\u1086\'ee \u1087\'ef\u1088\'f0\u1080\'e8 \u1085\'ed\u1072\'e0\u1095\'f7\u1072\'e0\u1083\'eb\u1077\'e5 \u1079\'e7\u1072\'e0\u1082\'ea\u1072\'e0\u1095\'f7\u1082\'ea\u1080\'e8, \u1087\'ef\u1086\'ee \u1074\'e2\u1086\'ee\u1079\'e7\u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8, \u1087\'ef\u1088\'f0\u1086\'ee\u1074\'e2\u1077\'e5\u1088\'f0\u1103\'ff\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1091\'f3\u1082\'ea\u1083\'eb\u1072\'e0\u1076\'e4\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1083\'eb\u1080\'e8 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb \u1087\'ef\u1086\'ee \u1088\'f0\u1072\'e0\u1079\'e7\u1084\'ec\u1077\'e5\u1088\'f0\u1072\'e0\u1084\'ec \u1074\'e2 \u1085\'ed\u1086\'ee\u1088\'f0\u1084\'ec\u1091\'f3.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +1}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +3}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. \u1050\'ca\u1072\'e0\u1082\'ea\u1086\'ee\u1081\'e9 \u1092\'f4\u1086\'ee\u1088\'f0\u1084\'ec\u1072\'e0\u1090\'f2 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1072\'e0\u1093\'f5 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2, \u1079\'e7\u1072\'e0\u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec\u1099\'fb\u1093\'f5 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 counter ?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1072\'e0 - \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea*4GB + \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea. \u1055\'cf\u1088\'f0\u1086\'ee\u1089\'f1\u1090\'f2\u1086\'ee \u1074\'e2 \u1094\'f6\u1077\'e5\u1083\'eb\u1099\'fb\u1081\'e9 \u1090\'f2\u1080\'e8\u1087\'ef \u1073\'e1\u1086\'ee\u1083\'eb\u1100\'fc\u1096\'f8\u1077\'e5 4GB \u1085\'ed\u1077\'e5 \u1074\'e2\u1083\'eb\u1072\'e0\u1079\'e7\u1080\'e8\u1090\'f2.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0\u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0, \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1072\'e0 00100 0000000021 3468801478 \u1089\'f1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1091\'f3\u1077\'e5\u1090\'f2 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1091\'f3 \u1085\'ed\u1086\'ee\u1084\'ec\u1077\'e5\u1088\'f0 100 \u1089\'f1\u1086\'ee \u1079\'e7\u1085\'ed\u1072\'e0\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec 21*4 + 3=89\u1043\'c3\u1073\'e1.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +1}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +4}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +. \u1052\'cc\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1083\'eb\u1080\'e8 \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5 \u1085\'ed\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5 \u1079\'e7\u1074\'e2\u1077\'e5\u1079\'e7\u1076\'e4\u1086\'ee\u1095\'f7\u1082\'ea\u1080\'e8 \u1074\'e2 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +ACL}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +* \u1074\'e2 \u1082\'ea\u1086\'ee\u1085\'ed\u1094\'f6\u1077\'e5 ACL \u1084\'ec\u1086\'ee\u1078\'e6\u1085\'ed\u1086\'ee \u1074\'e2\u1086\'ee\u1086\'ee\u1073\'e1\u1097\'f9\u1077\'e5 \u1085\'ed\u1077\'e5 \u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc. \u1058\'d2\u1086\'ee \u1077\'e5\u1089\'f1\u1090\'f2\u1100\'fc \u1074\'e2\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1077\'e5 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1095\'f7\u1077\'e5\u1081\'e9 \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1082\'ea\u1072\'e0 \u1074\'e2\u1080\'e8\u1076\'e4\u1072\'e0:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +allow}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +user} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +15. }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1082\'ea \u1072\'e0\u1076\'e4\u1084\'ec\u1080\'e8\u1085\'ed\u1080\'e8\u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1090\'f2\u1086\'ee\u1088\'f0\u1091\'f3 \u1089\'f1\u1084\'ec\u1086\'ee\u1090\'f2\u1088\'f0\u1077\'e5\u1090\'f2\u1100\'fc \u1086\'ee\u1073\'e1\u1097\'f9\u1080\'e8\u1081\'e9 (\u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1077\'e5\u1081\'e9) \u1089\'f1\u1091\'f3\u1090\'f2\u1086\'ee\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1080\'e8\u1083\'eb\u1080\'e8 \u1084\'ec\u1077\'e5\u1089\'f1\u1103\'ff\u1095\'f7\u1085\'ed\u1099\'fb\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin 100/month M 1000000 * } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +countin 101/day D 1000000 *} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +1}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +6}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +.}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1082\'ea \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1100\'fc \u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1103\'ff\u1084\'ec \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1082\'ea }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +ICQ}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1085\'ed\u1077\'e5 \u1076\'e4\u1072\'e0\u1074\'e2\u1072\'e0\u1103\'ff \u1087\'ef\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef\u1072\'e0 \u1082\'ea \u1083\'eb\u1102\'fe\u1073\'e1\u1099\'fb\u1084\'ec \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0\u1084\'ec?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +allow * [\u1089\'f1\u1087\'ef\u1080\'e8\u1089\'f1\u1086\'ee\u1082\'ea \u1089\'f1\u1074\'e2\u1086\'ee\u1080\'e8\u1093\'f5 \u1089\'f1\u1077\'e5\u1090\'f2\u1077\'e5\u1081\'e9] 64.12.0.0/16,205.188.0.0/16 3190 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +deny * } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1086\'ee \u1083\'eb\u1091\'f3\u1095\'f7\u1096\'f8\u1077\'e5 \u1080\'e8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1100\'fc }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +icqpr}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +17. }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1050\'ca\u1072\'e0\u1082\'ea \u1074\'e2 3proxy \u1088\'f0\u1072\'e0\u1079\'e7\u1088\'f0\u1077\'e5\u1096\'f8\u1080\'e8\u1090\'f2\u1100\'fc \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1086\'ee\u1082\'ea\u1086\'ee\u1083\'eb\u1072\'e0 IMAP \u1076\'e4\u1083\'eb\u1103\'ff outlook?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1081\'e9 tcppm \u1076\'e4\u1083\'eb\u1103\'ff \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1072\'e0 143. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +18. \u1055\'cf\u1086\'ee\u1095\'f7\u1077\'e5\u1084\'ec\u1091\'f3 \u1085\'ed\u1077\'e5 \u1087\'ef\u1088\'f0\u1080\'e8\u1093\'f5\u1086\'ee\u1076\'e4\u1080\'e8\u1090\'f2 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8 \u1090\'f2\u1072\'e0\u1082\'ea\u1086\'ee\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1049\rtlch \ltrch\fs20\lang1049\loch\f6 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +tcppm -i192.168.0.1 25 mail.infobox.ru 25 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +smtpp } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1058\'d2\u1099\'fb \u1087\'ef\u1099\'fb\u1090\'f2\u1072\'e0\u1077\'e5\u1096\'f8\u1100\'fc\u1089\'f1\u1103\'ff \u1085\'ed\u1072\'e0 \u1086\'ee\u1076\'e4\u1085\'ed\u1086\'ee\u1084\'ec 25-\u1086\'ee\u1084\'ec \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1091\'f3 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1090\'f2\u1080\'e8\u1090\'f2\u1100\'fc 2 \u1088\'f0\u1072\'e0\u1079\'e7\u1085\'ed\u1099\'fb\u1093\'f5 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1080\'e8\u1089\'f1\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +19. \u1045\'c5\u1089\'f1\u1090\'f2\u1100\'fc \u1089\'f1\u1077\'e5\u1090\'f2\u1100\'fc 10.10.1.0/24, \u1076\'e4\u1083\'eb\u1103\'ff \u1085\'ed\u1077\'e5\u1077\'e5 \u1079\'e7\u1072\'e0\u1074\'e2\u1077\'e5\u1076\'e4\u1077\'e5\u1085\'ed \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea: countin "60/\u1061\'d5\u1061\'d5\u1061\'d5" M 5000 * 10.10.1.0/24 * * *, \u1090\'f2\u1088\'f0\u1077\'e5\u1073\'e1\u1091\'f3\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1087\'ef\u1086\'ee\u1076\'e4\u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2 \u1076\'e4\u1083\'eb\u1103\'ff \u1076\'e4\u1074\'e2\u1091\'f3\u1093\'f5 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2 \u1080\'e8\u1079\'e7 \u1101\'fd\u1090\'f2\u1086\'ee\u1081\'e9 \u1089\'f1\u1077\'e5\u1090\'f2\u1080\'e8 \u1086\'ee\u1090\'f2\u1076\'e4\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u1086\'ee\u1090\'f2 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1086\'ee\u1075\'e3\u1086\'ee. \u1055\'cf\u1088\'f0\u1080\'e8 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec, \u1077\'e5\u1089\'f1\u1083\'eb\u1080\'e8 \u1086\'ee\u1089\'f1\u1085\'ed\u1086\'ee\u1074\'e2\u1085\'ed\u1072\'e0\u1103\'ff \u1089\'f1\u1077\'e5\u1090\'f2\u1100\'fc \u1091\'f3\u1078\'e6\u1077\'e5 \u1074\'e2\u1099\'fb\u1073\'e1\u1088\'f0\u1072\'e0\u1083\'eb\u1072\'e0 \u1089\'f1\u1074\'e2\u1086\'ee\u1081\'e9 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea, \u1091\'f3 \u1101\'fd\u1090\'f2\u1080\'e8\u1093\'f5 \u1076\'e4\u1074\'e2\u1091\'f3\u1093\'f5 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2 \u1076\'e4\u1086\'ee\u1089\'f1\u1090\'f2\u1091\'f3\u1087\'ef \u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1077\'e5\u1085\'ed \u1089\'f1\u1086\'ee\u1093\'f5\u1088\'f0\u1072\'e0\u1085\'ed\u1103\'ff\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff \u1074\'e2 \u1087\'ef\u1088\'f0\u1077\'e5\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1093\'f5 \u1080\'e8\u1093\'f5 \u1089\'f1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1083\'eb\u1080\'e8\u1084\'ec\u1080\'e8\u1090\'f2\u1086\'ee\u1074\'e2. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1090\'f2\u1100\'fc \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1099\'fb\u1077\'e5 \u1076\'e4\u1074\'e2\u1072\'e0 \u1089\'f1\u1095\'f7\u1077\'e5\u1090\'f2\u1095\'f7\u1080\'e8\u1082\'ea\u1072\'e0 \u1076\'e4\u1083\'eb\u1103\'ff \u1074\'e2\u1099\'fb\u1076\'e4\u1077\'e5\u1083\'eb\u1077\'e5\u1085\'ed\u1085\'ed\u1099\'fb\u1093\'f5 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1\u1086\'ee\u1074\'e2, \u1079\'e7\u1072\'e0\u1090\'f2\u1077\'e5\u1084\'ec \u1076\'e4\u1072\'e0\u1090\'f2\u1100\'fc \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1091\'f3 nocount}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +in}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +, \u1095\'f7\u1090\'f2\u1086\'ee\u1073\'e1\u1099\'fb \u1080\'e8\u1093\'f5 \u1090\'f2\u1088\'f0\u1072\'e0\u1092\'f4\u1080\'e8\u1082\'ea \u1085\'ed\u1077\'e5 \u1087\'ef\u1086\'ee\u1087\'ef\u1072\'e0\u1076\'e4\u1072\'e0\u1083\'eb \u1074\'e2 \u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee\u1081\'e9.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1072\'e0 countin \u1080\'e8 nocountin \u1086\'ee\u1073\'e1\u1088\'f0\u1072\'e0\u1073\'e1\u1072\'e0\u1090\'f2\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1074\'e2 \u1087\'ef\u1086\'ee\u1088\'f0\u1103\'ff\u1076\'e4\u1082\'ea\u1077\'e5 \u1086\'ee\u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1076\'e4\u1080\'e8 \u1076\'e4\u1086\'ee \u1087\'ef\u1077\'e5\u1088\'f0\u1074\'e2\u1086\'ee\u1075\'e3\u1086\'ee \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1072\'e0 nocountin/nocountout.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +20. }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1080\'e8 \u1072\'e0\u1074\'e2\u1090\'f2\u1086\'ee\u1088\'f0\u1080\'e8\u1079\'e7\u1072\'e0\u1094\'f6\u1080\'e8\u1080\'e8 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +strong}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1077\'e5\u1088\'f0\u1080\'e8\u1086\'ee\u1076\'e4\u1080\'e8\u1095\'f7\u1077\'e5\u1089\'f1\u1082\'ea\u1080\'e8 \u1087\'ef\u1088\'f0\u1080\'e8 \u1079\'e7\u1072\'e0\u1075\'e3\u1088\'f0\u1091\'f3\u1079\'e7\u1082\'ea\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1072\'e0\u1085\'ed\u1080\'e8\u1094\'f6 \u1087\'ef\u1086\'ee\u1103\'ff\u1074\'e2\u1083\'eb\u1103\'ff\u1102\'fe\u1090\'f2\u1089\'f1\u1103\'ff \u1086\'ee\u1082\'ea\u1085\'ed\u1072\'e0 \u1079\'e7\u1072\'e0\u1087\'ef\u1088\'f0\u1086\'ee\u1089\'f1\u1072\'e0 \u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1085\'ed\u1072\'e0-\u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1103\'ff. \u1050\'ca\u1072\'e0\u1082\'ea \u1080\'e8\u1079\'e7\u1073\'e1\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc\u1089\'f1\u1103\'ff?} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1055\'cf\u1086\'ee\u1087\'ef\u1088\'f0\u1086\'ee\u1073\'e1\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5 \u1087\'ef\u1086\'ee\u1089\'f1\u1083\'eb\u1077\'e5 \u1074\'e2\u1089\'f1\u1077\'e5\u1093\'f5 }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +allow}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1086\'ee\u1089\'f1\u1090\'f2\u1072\'e0\u1074\'e2\u1080\'e8\u1090\'f2\u1100\'fc }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +deny}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + *}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +- \u1048\'c8\u1089\'f1\u1087\'ef\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1091\'f3\u1081\'e9\u1090\'f2\u1077\'e5 \u1086\'ee\u1087\'ef\u1094\'f6\u1080\'e8\u1102\'fe }{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 +-}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f7 +n}{\cf1\kerning1\dbch\af11\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f7 + }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1088\'f0\u1080\'e8 \u1079\'e7\u1072\'e0\u1087\'ef\u1091\'f3\u1089\'f1\u1082\'ea\u1077\'e5 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1103\'ff \u1086\'ee\u1090\'f2 }{\cf1\b\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +25}{\cf1\b\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + \u1084\'ec\u1072\'e0\u1103\'ff 2015 \u1075\'e3\u1086\'ee\u1076\'e4\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1042\'c2 \u1089\'f1\u1074\'e2\u1103\'ff\u1079\'e7\u1080\'e8 \u1089\'f1 \u1090\'f2\u1077\'e5\u1084\'ec, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2 \u1087\'ef\u1088\'f0\u1086\'ee\u1096\'f8\u1083\'eb\u1086\'ee\u1084\'ec \u1075\'e3\u1086\'ee\u1076\'e4\u1091\'f3 \u1087\'ef\u1088\'f0\u1086\'ee\u1080\'e8\u1079\'e7\u1086\'ee\u1096\'f8\u1077\'e5\u1083\'eb \u1084\'ec\u1072\'e0\u1089\'f1\u1089\'f1\u1086\'ee\u1074\'e2\u1099\'fb\u1081\'e9 \u1089\'f1\u1083\'eb\u1080\'e8\u1074\'e2 \u1087\'ef\u1072\'e0\u1088\'f0\u1086\'ee\u1083\'eb\u1077\'e5\u1081\'e9 \u1089\'f1 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2 \u1085\'ed\u1072\'e0 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +mail.ru }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +yandex.ru, }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1082\'ea\u1086\'ee\u1084\'ec\u1087\'ef\u1072\'e0\u1085\'ed\u1080\'e8\u1080\'e8 \u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1096\'f8\u1083\'eb\u1080\'e8 \u1085\'ed\u1072\'e0 \u1073\'e1\u1086\'ee\u1083\'eb\u1077\'e5\u1077\'e5 \u1073\'e1\u1077\'e5\u1079\'e7\u1086\'ee\u1087\'ef\u1072\'e0\u1089\'f1\u1085\'ed\u1099\'fb\u1081\'e9 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1081\'e9 \u1087\'ef\u1088\'f0\u1086\'ee\u1090\'f2\u1086\'ee\u1082\'ea\u1086\'ee\u1083\'eb }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +TLS }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8 \u171\'ab\u1090\'f2\u1088\'f0\u1072\'e0\u1076\'e4\u1080\'e8\u1094\'f6\u1080\'e8\u1086\'ee\u1085\'ed\u1085\'ed\u1099\'fb\u1077\'e5\u187\'bb \u1089\'f1\u1093\'f5\u1077\'e5\u1084\'ec\u1099\'fb \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1099\'fb \u1089\'f1 \u1101\'fd\u1090\'f2\u1080\'e8\u1084\'ec\u1080\'e8 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1084\'ec\u1080\'e8 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8 \u1095\'f7\u1077\'e5\u1088\'f0\u1077\'e5\u1079\'e7 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +3proxy }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1077\'e5\u1088\'f0\u1077\'e5\u1089\'f1\u1090\'f2\u1072\'e0\u1083\'eb\u1080\'e8 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1072\'e0\u1090\'f2\u1100\'fc.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1054\'ce\u1087\'ef\u1080\'e8\u1089\'f1\u1099\'fb\u1074\'e2\u1072\'e0\u1102\'fe \u1072\'e0\u1082\'ea\u1090\'f2\u1091\'f3\u1072\'e0\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1081\'e9 \u1089\'f1\u1087\'ef\u1086\'ee\u1089\'f1\u1086\'ee\u1073\'e1 \u1088\'f0\u1072\'e0\u1073\'e1\u1086\'ee\u1090\'f2\u1099\'fb \u1089\'f1 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0\u1084\'ec\u1080\'e8 \u1085\'ed\u1072\'e0 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +TLS (}{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1082\'ea\u1072\'e0\u1089\'f1\u1072\'e0\u1077\'e5\u1090\'f2\u1089\'f1\u1103\'ff \u1082\'ea\u1072\'e0\u1082\'ea \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2 \u1085\'ed\u1077\'e5\u1087\'ef\u1086\'ee\u1089\'f1\u1088\'f0\u1077\'e5\u1076\'e4\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1085\'ed\u1072\'e0 \u1101\'fd\u1090\'f2\u1080\'e8\u1093\'f5 \u1087\'ef\u1083\'eb\u1086\'ee\u1097\'f9\u1072\'e0\u1076\'e4\u1082\'ea\u1072\'e0\u1093\'f5, \u1090\'f2\u1072\'e0\u1082\'ea \u1080\'e8 \u1082\'ea\u1086\'ee\u1088\'f0\u1087\'ef\u1086\'ee\u1088\'f0\u1072\'e0\u1090\'f2\u1080\'e8\u1074\'e2\u1085\'ed\u1086\'ee\u1081\'e9 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1099\'fb \u1089\'f1 \u1093\'f5\u1086\'ee\u1089\'f1\u1090\'f2\u1080\'e8\u1085\'ed\u1075\'e3\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0 \u1103\'ff\u1085\'ed\u1076\'e4\u1077\'e5\u1082\'ea\u1089\'f1\u1077\'e5).} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1080\'e8\u1074\'e2\u1077\'e5\u1076\'e4\u1091\'f3 \u1089\'f1\u1074\'e2\u1086\'ee\u1081\'e9 \u1082\'ea\u1091\'f3\u1089\'f1\u1086\'ee\u1082\'ea \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1072\'e0:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +tcppm 1995 pop.mail.ru 995} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +tcppm 1465 smtp.mail.ru 465} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +tcppm 2995 pop.yandex.ru 995} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +tcppm 2465 smtp.yandex.ru 465} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1086\'ee\u1086\'ee\u1090\'f2\u1074\'e2\u1077\'e5\u1090\'f2\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee \u1074\'e2 \u1092\'f4\u1072\'e0\u1081\'e9\u1083\'eb\u1077\'e5 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +hosts, }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1085\'ed\u1072\'e0\u1093\'f5\u1086\'ee\u1076\'e4\u1103\'ff\u1097\'f9\u1077\'e5\u1084\'ec\u1089\'f1\u1103\'ff \u1074\'e2 \u1087\'ef\u1072\'e0\u1087\'ef\u1082\'ea\u1077\'e5 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +Windows\\system32\\drivers\\etc, }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1085\'ed\u1072\'e0\u1076\'e4\u1086\'ee \u1073\'e1\u1091\'f3\u1076\'e4\u1077\'e5\u1090\'f2 \u1074\'e2\u1085\'ed\u1077\'e5\u1089\'f1\u1090\'f2\u1080\'e8 \u1076\'e4\u1086\'ee\u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1080\'e8\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc\u1085\'ed\u1099\'fb\u1077\'e5 \u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1095\'f7\u1082\'ea\u1080\'e8:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +192.168.200.1\tab pop.mail.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +192.168.200.1\tab smtp.mail.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +192.168.200.1\tab pop.yandex.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +192.168.200.1\tab smtp.yandex.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1075\'e3\u1076\'e4\u1077\'e5 192.168.200.1 \u8212\'97 \u1101\'fd\u1090\'f2\u1086\'ee }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +IP }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1088\'f0\u1086\'ee\u1074\'e2\u1077\'e5\u1088\'f0\u1080\'e8\u1090\'f2\u1100\'fc, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2\u1089\'f1\u1077\'e5 \u1087\'ef\u1088\'f0\u1072\'e0\u1074\'e2\u1080\'e8\u1083\'eb\u1100\'fc\u1085\'ed\u1086\'ee \u8212\'97 \u1082\'ea\u1086\'ee\u1084\'ec\u1072\'e0\u1085\'ed\u1076\'e4\u1086\'ee\u1081\'e9 } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +ping }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +pop.mail.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +- }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1076\'e4\u1086\'ee\u1083\'eb\u1078\'e6\u1085\'ed\u1099\'fb \u1087\'ef\u1086\'ee\u1083\'eb\u1091\'f3\u1095\'f7\u1072\'e0\u1090\'f2\u1100\'fc \u1086\'ee\u1090\'f2\u1082\'ea\u1083\'eb\u1080\'e8\u1082\'ea \u1086\'ee\u1090\'f2 \u1087\'ef\u1088\'f0\u1086\'ee\u1082\'ea\u1089\'f1\u1080\'e8-\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1072\'e0, \u1072\'e0\u1085\'ed\u1072\'e0\u1083\'eb\u1086\'ee\u1075\'e3\u1080\'e8\u1095\'f7\u1085\'ed\u1086\'ee \u1076\'e4\u1083\'eb\u1103\'ff \u1076\'e4\u1088\'f0\u1091\'f3\u1075\'e3\u1080\'e8\u1093\'f5 \u1087\'ef\u1086\'ee\u1095\'f7\u1090\'f2\u1086\'ee\u1074\'e2\u1099\'fb\u1093\'f5 \u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0\u1086\'ee\u1074\'e2.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1044\'c4\u1072\'e0\u1083\'eb\u1077\'e5\u1077\'e5 \u1074\'e2 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +TheBat }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8\u1083\'eb\u1080\'e8 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +OE }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1076\'e4\u1077\'e5\u1083\'eb\u1072\'e0\u1077\'e5\u1084\'ec \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1080\'e8 \u1089\'f1\u1086\'ee\u1075\'e3\u1083\'eb\u1072\'e0\u1089\'f1\u1085\'ed\u1086\'ee \u1080\'e8\u1085\'ed\u1089\'f1\u1090\'f2\u1088\'f0\u1091\'f3\u1082\'ea\u1094\'f6\u1080\'e8\u1080\'e8 \u1085\'ed\u1072\'e0 \u1089\'f1\u1072\'e0\u1081\'e9\u1090\'f2\u1072\'e0\u1093\'f5 }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +mail.ru }{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1080\'e8\u1083\'eb\u1080\'e8 \u1103\'ff\u1085\'ed\u1076\'e4\u1077\'e5\u1082\'ea\u1089\'f1\u1072\'e0 \u1079\'e7\u1072\'e0 \u1086\'ee\u1076\'e4\u1085\'ed\u1080\'e8\u1084\'ec \u1080\'e8\u1089\'f1\u1082\'ea\u1083\'eb\u1102\'fe\u1095\'f7\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5\u1084\'ec: \u1074\'e2\u1084\'ec\u1077\'e5\u1089\'f1\u1090\'f2\u1086\'ee \u1089\'f1\u1090\'f2\u1072\'e0\u1085\'ed\u1076\'e4\u1072\'e0\u1088\'f0\u1090\'f2\u1085\'ed\u1099\'fb\u1093\'f5 \u1087\'ef\u1086\'ee\u1088\'f0\u1090\'f2\u1086\'ee\u1074\'e2 995 \u1080\'e8 465 \u1091\'f3\u1082\'ea\u1072\'e0\u1079\'e7\u1099\'fb\u1074\'e2\u1072\'e0\u1077\'e5\u1084\'ec \u1090\'f2\u1077\'e5, \u1095\'f7\u1090\'f2\u1086\'ee \u1074\'e2 \u1085\'ed\u1072\'e0\u1096\'f8\u1077\'e5\u1084\'ec \u1082\'ea\u1086\'ee\u1085\'ed\u1092\'f4\u1080\'e8\u1075\'e3\u1077\'e5.} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1053\'cd\u1072\'e0 \u1087\'ef\u1088\'f0\u1080\'e8\u1084\'ec\u1077\'e5\u1088\'f0\u1077\'e5 smtp.mail.ru:} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +SMTP-}{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1089\'f1\u1077\'e5\u1088\'f0\u1074\'e2\u1077\'e5\u1088\'f0: smtp.mail.ru} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1086\'ee\u1077\'e5\u1076\'e4\u1080\'e8\u1085\'ed\u1077\'e5\u1085\'ed\u1080\'e8\u1077\'e5: \u1041\'c1\u1077\'e5\u1079\'e7\u1086\'ee\u1087\'ef\u1072\'e0\u1089\'f1\u1085\'ed\u1086\'ee\u1077\'e5 \u1085\'ed\u1072\'e0 \u1089\'f1\u1087\'ef\u1077\'e5\u1094\'f6. \u1055\'cf\u1086\'ee\u1088\'f0\u1090\'f2 (}{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +TLS)} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1086\'ee\u1088\'f0\u1090\'f2: 1465} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1055\'cf\u1086\'ee\u1083\'eb\u1100\'fc\u1079\'e7\u1086\'ee\u1074\'e2\u1072\'e0\u1090\'f2\u1077\'e5\u1083\'eb\u1100\'fc: \u1087\'ef\u1086\'ee\u1083\'eb\u1085\'ed\u1099\'fb\u1081\'e9 \u1072\'e0\u1076\'e4\u1088\'f0\u1077\'e5\u1089\'f1 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1072\'e0} +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{{\*\bkmkstart __DdeLink__10747_902618987}{\*\bkmkend __DdeLink__10747_902618987}\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +\u1057\'d1\u1086\'ee\u1073\'e1\u1089\'f1\u1090\'f2\u1074\'e2\u1077\'e5\u1085\'ed\u1085\'ed\u1086\'ee, \u1074\'e2\u1089\'f1\u1105\'b8, \u1085\'ed\u1072\'e0 \u1101\'fd\u1090\'f2\u1086\'ee\u1084\'ec \u1085\'ed\u1072\'e0\u1089\'f1\u1090\'f2\u1088\'f0\u1086\'ee\u1081\'e9\u1082\'ea\u1072\'e0 \u1103\'ff\u1097\'f9\u1080\'e8\u1082\'ea\u1086\'ee\u1074\'e2 \u1079\'e7\u1072\'e0\u1082\'ea\u1086\'ee\u1085\'ed\u1095\'f7\u1077\'e5\u1085\'ed\u1072\'e0. } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\b0\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 + +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +\u169\'a9 2006-201}{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1049\loch\f6 +5 }{\cf1\kerning1\dbch\af10\langfe1025\rtlch \ltrch\loch\fs20\lang1033\loch\f6 +by Kurmaeff Halit } +\par \pard\plain \s0\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af9\langfe1025\dbch\af13\afs24\alang1081\loch\f5\fs22\lang1049\sl276\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\kerning1\dbch\af10\langfe1033\rtlch \ltrch\fs20\lang1049\loch\f6 + } +\par } \ No newline at end of file From a93ffc825b33471e4afc5556e69b579cb7809f6a Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 5 Jun 2015 15:56:49 +0300 Subject: [PATCH 065/122] bugfix: archiver doesn't add suffix on logname with macro --- src/3proxy.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 09835e9..833c02e 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -358,9 +358,8 @@ unsigned char * dologname (unsigned char *buf, unsigned char *name, const unsign memset(&fakecli, 0, sizeof(fakecli)); dobuf2(&fakecli, buf, NULL, NULL, ts, (char *)name); - return buf; } - switch(lt){ + else switch(lt){ case NONE: sprintf((char *)buf, "%s", name); break; From 184eede38a076a0946ab91fd050439421f276d66 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 5 Jul 2015 14:51:30 +0300 Subject: [PATCH 066/122] Typo in pamauth corrected --- src/plugins/PamAuth/pamauth.c | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/PamAuth/pamauth.c b/src/plugins/PamAuth/pamauth.c index 252fadb..3c171c5 100644 --- a/src/plugins/PamAuth/pamauth.c +++ b/src/plugins/PamAuth/pamauth.c @@ -19,7 +19,7 @@ static int already_loaded = 0; static struct auth pamauth; #ifdef USERCASE static int usercaselow = 0; -#edif +#endif static unsigned char *service=NULL; static struct pluginlink * pl; diff --git a/src/version.h b/src/version.h index dfd75a5..e5d17f3 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150516170531" +#define BUILDDATE "150608002425" From ef67ef4072512c715279162559a36d41b7cdb706 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 24 Aug 2015 17:56:12 +0300 Subject: [PATCH 067/122] infinite loop in admin interface fixed --- src/datatypes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datatypes.c b/src/datatypes.c index 640a05c..230fe27 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -755,7 +755,7 @@ static struct property prop_server[] = { {prop_server + 16, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, {prop_server + 17, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, #ifndef NOIPV6 - {prop_server + 7, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"}, + {prop_server + 18, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"}, #endif {NULL, "next", ef_server_next, TYPE_SERVER, "next"} }; From 59cc68e8dd0a3af3fb0ca7c9e23124ce6004ef2c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 31 Aug 2015 22:01:31 +0300 Subject: [PATCH 068/122] Move FTP login prompt in proxy to common section --- src/proxy.c | 15 ++++++++------- src/version.h | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index ddb58e9..96fa1f2 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -133,6 +133,7 @@ char * proxy_stringtable[] = { #define BUFSIZE 8192 #define LINESIZE 4096 +#define FTPBUFSIZE 1536 static void logurl(struct clientparam * param, char * buf, char * req, int ftp){ char *sb; @@ -228,6 +229,8 @@ void * proxychild(struct clientparam* param) { int authenticate; struct pollfd fds[2]; SOCKET ftps; + char ftpbuf[FTPBUFSIZE]; + int inftpbuf = 0; #ifndef WITHMAIN FILTER_ACTION action; #endif @@ -539,23 +542,17 @@ for(;;){ #endif if((res = (*param->srv->authfunc)(param))) {RETURN(res);} -#define FTPBUFSIZE 1536 if(ftp && param->redirtype != R_HTTP){ SOCKET s; int mode = 0; int i=0; - char ftpbuf[FTPBUFSIZE]; - int inftpbuf = 0; + inftpbuf = 0; if(!ckeepalive){ inftpbuf = FTPBUFSIZE - 20; res = ftplogin(param, ftpbuf, &inftpbuf); if(res){ - if (res == 700 || res == 701){ - socksend(param->clisock, (unsigned char *)proxy_stringtable[16], (int)strlen(proxy_stringtable[16]), conf.timeouts[STRING_S]); - socksend(param->clisock, (unsigned char *)ftpbuf, inftpbuf, conf.timeouts[STRING_S]); - } RETURN(res); } } @@ -1052,6 +1049,10 @@ CLEANRET: if(param->res == 10) { socksend(param->clisock, (unsigned char *)proxy_stringtable[2], (int)strlen(proxy_stringtable[2]), conf.timeouts[STRING_S]); } + else if (res == 700 || res == 701){ + socksend(param->clisock, (unsigned char *)proxy_stringtable[16], (int)strlen(proxy_stringtable[16]), conf.timeouts[STRING_S]); + socksend(param->clisock, (unsigned char *)ftpbuf, inftpbuf, conf.timeouts[STRING_S]); + } else if(param->res == 100 || (param->res >10 && param->res < 20) || (param->res >701 && param->res <= 705)) { socksend(param->clisock, (unsigned char *)proxy_stringtable[1], (int)strlen(proxy_stringtable[1]), conf.timeouts[STRING_S]); } diff --git a/src/version.h b/src/version.h index e5d17f3..bcc70cd 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150608002425" +#define BUILDDATE "150831214516" From 3198f1614f35164276aad0fc67c1a837e496b6b6 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 1 Sep 2015 15:24:03 +0300 Subject: [PATCH 069/122] Fix FTP over HTTP authentication Send WWW-Authenticate instead of Proxy-Authenticate --- src/proxy.c | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index 96fa1f2..6c6c9e5 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -118,7 +118,7 @@ char * proxy_stringtable[] = { "

503 Service Unavailable

Your request violates configured policy

\r\n", /* 16*/ "HTTP/1.0 401 Authentication Required\r\n" - "Proxy-Authenticate: basic realm=\"FTP Server\"\r\n" + "WWW-Authenticate: basic realm=\"FTP Server\"\r\n" "Proxy-Connection: close\r\n" "Content-type: text/html; charset=us-ascii\r\n" "\r\n" diff --git a/src/version.h b/src/version.h index bcc70cd..588f32d 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150831214516" +#define BUILDDATE "150901150708" From 4ca8988831cd42523d80d3760bf9800b7cd10e5e Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 1 Sep 2015 16:24:40 +0300 Subject: [PATCH 070/122] Fix FTP over HTTP authentication request parsing --- src/proxy.c | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index 6c6c9e5..7a89123 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -461,7 +461,7 @@ for(;;){ } if(se)*se = '\r'; } - if(ftp && i > 19 && (!strncasecmp((char *)(buf+inbuf), "authorization", 19))){ + if(ftp && i > 13 && (!strncasecmp((char *)(buf+inbuf), "authorization", 13))){ sb = (unsigned char *)strchr((char *)(buf+inbuf), ':'); if(!sb)continue; ++sb; diff --git a/src/version.h b/src/version.h index 588f32d..8d912b7 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150901150708" +#define BUILDDATE "150901162209" From f88ea518b95c1dbaeb4076f59a28f1ba373b96dc Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 4 Sep 2015 00:22:06 +0300 Subject: [PATCH 071/122] Compile same plugins for Win64 version --- Makefile.msvc | 2 +- Makefile.msvc64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.msvc b/Makefile.msvc index da95036..83f806f 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -26,7 +26,7 @@ REMOVECOMMAND = del 2>NUL >NUL TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc -PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin lastFripper FilePlugin SSLPlugin +PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin FilePlugin SSLPlugin VERFILE = $(VERFILE) include Makefile.inc diff --git a/Makefile.msvc64 b/Makefile.msvc64 index b5d4a57..1e08362 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -26,7 +26,7 @@ REMOVECOMMAND = del 2>NUL >NUL TYPECOMMAND = type COMPATLIBS = MAKEFILE = Makefile.msvc64 -PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin SSLPlugin +PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin FilePlugin SSLPlugin VERFILE = $(VERFILE) #../3proxy.res: From d21f6b198d1df8af048308430fb9c510c3f27807 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 4 Sep 2015 00:28:26 +0300 Subject: [PATCH 072/122] fix static memory free() attempt --- src/plugins/FilePlugin/FilePlugin.c | 12 +++++++----- src/version.h | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/plugins/FilePlugin/FilePlugin.c b/src/plugins/FilePlugin/FilePlugin.c index 79354c5..273c79e 100644 --- a/src/plugins/FilePlugin/FilePlugin.c +++ b/src/plugins/FilePlugin/FilePlugin.c @@ -48,7 +48,7 @@ static pthread_mutex_t file_mutex; unsigned long preview = 0; -char path[256]; +char path[300]; static int counter = 0; static int timeo = 0; @@ -875,13 +875,15 @@ __declspec(dllexport) fp_symbols[1].next = pl->symbols.next; pl->symbols.next = fp_symbols; } - if(path) free(path); dirp = (argc > 1)? argv[1] : getenv("TEMP"); - if(strlen(dirp) > 200 || strchr(dirp, '%')) return (13001); + if(strlen(dirp) > 200 || strchr(dirp, '%')) { + fprintf(stderr, "FilePlugin: invalid directory path: %s\n", dirp); + return (13001); + } #ifdef _WIN32 - sprintf(path, "%s\\%%d.tmp", dirp); + sprintf(path, "%.256s\\%%07d.tmp", dirp); #else - sprintf(path, "%s/%%d.tmp", dirp); + sprintf(path, "%.256s/%%07d.tmp", dirp); #endif if(argc > 2) preview = atoi(argv[2]); if(!preview) preview = 32768; diff --git a/src/version.h b/src/version.h index 8d912b7..19350d5 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150901162209" +#define BUILDDATE "150904002243" From 6529b9cea10ccec036e1833d055938a3edef8669 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 4 Sep 2015 01:45:07 +0300 Subject: [PATCH 073/122] 3proxy.cfg manual pages updated to reflect 0.8 changes Pv6 functionality IP ranges in ACLs DNS over TCP redirection functionality dnspr -s behavior for NTLM --- man/3proxy.cfg.3 | 45 ++++++++++++++++++++++++++++++++++----------- src/version.h | 2 +- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/man/3proxy.cfg.3 b/man/3proxy.cfg.3 index 5e376ca..c1ffbc5 100644 --- a/man/3proxy.cfg.3 +++ b/man/3proxy.cfg.3 @@ -103,15 +103,29 @@ change default server port to NUMBER .B -n disable NTLM authentication (required if passwords are stored in Unix crypt format. .br +.B -n1 +enable NTLMv1 authentication. +.br .B -s -(for admin) - allow only secure operations (currently only traffic counters +(for admin) - secure, allow only secure operations (currently only traffic counters view without ability to reset). .br +(for dnspr) - simple, do not use 'resolver' and 3proxy cache, always use external DNS server. +.br +(for udppm) - singlepacket, expect only one packet from both client and server .B -a (for proxy) - anonymous proxy (no information about client reported) .br .B -a1 (for proxy) - anonymous proxy (random client information reported) +.B -6 +Only resolve IPv6 addresses +.B -4 +Only resolve IPv4 addresses +.B -46 +Resolve IPv6 addresses if IPv4 address is not resolvable +.B -64 +Resolve IPv4 addresses if IPv6 address is not resolvable .br Also, all options mentioned for .BR proxy (8) @@ -130,7 +144,9 @@ pop3username@pop3server. If POP3 proxy access must be authenticated, you can specify username as proxy_username:proxy_password:POP3_username@pop3server .br DNS proxy resolves any types of records but only hostnames are cached. It -requires nserver/nscache to be configured. +requires nserver/nscache to be configured. If nserver is configured as TCP, +redirections are applied on connection, so parent proxy may be used to resolve +names to IP. .br FTP proxy can be used as FTP server in any FTP client or configured as FTP proxy on a client with FTP proxy support. Username format is one of @@ -328,20 +344,25 @@ Sets timeout values .br .B nserver - + [:port][/tcp] .br -Nameserver to use for name resolutions. If none spcified system +Nameserver to use for name resolutions. If none specified or name server fails system routines for name resolution will be used. It's better to specify nserver because gethostbyname() may -be thread unsafe. +be thread unsafe. Optional port number may be specified. +If optional /tcp is added to IP address, name resolution will be +performed over TCP. .br .B nscache +.B nscache6 + .br -Cache records for name resolution. Cachesize usually -should be large enougth (for example 65536). +Cache records for name resolution (nscache for IPv4, +nscache6 for IPv6). Cachesize usually should be large enougth +(for example 65536). .br .B nsrecord @@ -375,7 +396,7 @@ http://dial.right.now/ from browser to set up connection. .br sets ip address of internal interface. This IP address will be used to bind gateways. Alternatively you can use -i option for individual -gateways +gateways. Since 0.8 version, IPv6 address may be used. .br .B external @@ -383,7 +404,8 @@ gateways .br sets ip address of external interface. This IP address will be source address for all connections made by proxy. Alternatively you can use --e option to specify individual address for gateway. +-e option to specify individual address for gateway. Since 0.8 version +External or -e can be given twice: once with IPv4 and once with IPv6 address. .br .B maxconn @@ -486,8 +508,9 @@ Use auth type 'cache' for cached authentication Access control entries. All lists are comma-separated, no spaces are allowed. Usernames are case sensitive (if used with authtype nbname username must be in uppercase). Source and target lists may contain -IP addresses (W.X.Y.Z) or CIDRs (W.X.Y.Z/L). Since 0.6, targetlist may also -contain host names, instead of addresses. It's possible to use wildmask in +IP addresses (W.X.Y.Z), ranges A.B.C.D - W.X.Y.Z (since 0.8) or CIDRs +(W.X.Y.Z/L). Since 0.6, targetlist may also contain host names, +instead of addresses. It's possible to use wildmask in the begginning and in the the end of hostname, e.g. *badsite.com or *badcontent*. Hostname is only checked if hostname presents in request. Targetportlist may contain ports (X) or port ranges lists (X-Y). For any field diff --git a/src/version.h b/src/version.h index 19350d5..75aca7f 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150904002243" +#define BUILDDATE "150904014330" From a2b5af6dabc8a5e2b90b30d9f6c3efa2204374ba Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 20 Sep 2015 21:01:50 +0300 Subject: [PATCH 074/122] Connect back proxy functionality added -r and -R options added to support connect back functionality between two instances of proxy --- src/common.c | 18 ++++ src/proxy.h | 2 + src/proxymain.c | 221 +++++++++++++++++++++++++++++++++-------------- src/structures.h | 6 +- src/version.h | 2 +- 5 files changed, 182 insertions(+), 67 deletions(-) diff --git a/src/common.c b/src/common.c index 52287c2..bcaa637 100644 --- a/src/common.c +++ b/src/common.c @@ -216,6 +216,24 @@ int ceparseargs(const char *str){ #endif +void parsehost(int family, char *host, struct sockaddr *sa){ + char *sp=NULL,*se=NULL; + unsigned short port; + + if(*host == '[') se=strchr(host, ']'); + if ( (sp = strchr(se?se:host, ':')) ) *sp = 0; + if(se){ + *se = 0; + } + if(sp){ + port = atoi(sp+1); + } + getip46(family, host + (se!=0), (struct sockaddr *)sa); + if(se) *se = ']'; + if(sp) *sp = ':'; + *SAPORT(sa) = htons(port); +} + int parsehostname(char *hostname, struct clientparam *param, unsigned short port){ char *sp=NULL,*se=NULL; diff --git a/src/proxy.h b/src/proxy.h index f72519a..6573d5b 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -235,10 +235,12 @@ void mschap(const unsigned char *win_password, struct hashtable; void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires); +void parsehost(int family, char *host, struct sockaddr *sa); int parsehostname(char *hostname, struct clientparam *param, unsigned short port); int parseusername(char *username, struct clientparam *param, int extpasswd); int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port); int ACLmatches(struct ace* acentry, struct clientparam * param); +int checkACL(struct clientparam * param); unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth); diff --git a/src/proxymain.c b/src/proxymain.c index 0306b99..5b94656 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -9,8 +9,46 @@ #include "proxy.h" - - +#define param ((struct clientparam *) p) +#ifdef _WIN32 +DWORD WINAPI threadfunc(LPVOID p) { +#else +void * threadfunc (void *p) { +#endif + if(param->srv->cbsock != INVALID_SOCKET){ + SASIZETYPE size = sizeof(param->sinsr); + param->remsock = so._accept(param->srv->cbsock, (struct sockaddr*)¶m->sinsr, &size); + if(param->remsock == INVALID_SOCKET) { + param->res = 13; + param->srv->logfunc(param, "Connect back accept() failed"); +#ifdef _WIN32 + return 0; +#else + return NULL; +#endif + } +#ifndef WITHMAIN + memcpy(¶m->req, ¶m->sinsr, size); + if(param->srv->acl) param->res = checkACL(param); + if(param->res){ + param->srv->logfunc(param, "Connect back ACL failed"); + } +#ifdef _WIN32 + return 0; +#else + return NULL; +#endif +#endif + + } + ((struct clientparam *) p)->srv->pf((struct clientparam *)p); +#ifdef _WIN32 + return 0; +#else + return NULL; +#endif +} +#undef param @@ -42,7 +80,7 @@ int MODULEMAINFUNC (int argc, char** argv){ - SOCKET sock = INVALID_SOCKET; + SOCKET sock = INVALID_SOCKET, new_sock = INVALID_SOCKET; int i=0; SASIZETYPE size; pthread_t thread; @@ -53,8 +91,15 @@ int MODULEMAINFUNC (int argc, char** argv){ unsigned sleeptime; unsigned char buf[256]; char *hostname=NULL; - int opt = 1, isudp; + int opt = 1, isudp = 0, iscbl = 0, iscbc = 0; + unsigned char *cbc_string = NULL, *cbl_string = NULL; +#ifndef NOIPV6 + struct sockaddr_in6 cbsa; +#else + struct sockaddr_in cbsa; +#endif FILE *fp = NULL; + struct linger lg; int nlog = 5000; char loghelp[] = #ifdef STDMAIN @@ -73,6 +118,8 @@ int MODULEMAINFUNC (int argc, char** argv){ " -t be silent (do not log service start/stop)\n" " -iIP ip address or internal interface (clients are expected to connect)\n" " -eIP ip address or external interface (outgoing connection will have this)\n" + " -rIP:PORT Use IP:port for connect back proxy instead of listen port\n" + " -RPORT Use PORT to listen connect back proxy connection to pass data to\n" " -4 Use IPv4 for outgoing connections\n" " -6 Use IPv6 for outgoing connections\n" " -46 Prefer IPv4 for outgoing connections, use both IPv4 and IPv6\n" @@ -85,8 +132,6 @@ int MODULEMAINFUNC (int argc, char** argv){ int inetd = 0; #endif #endif - SOCKET new_sock = INVALID_SOCKET; - struct linger lg; #ifdef _WIN32 HANDLE h; #endif @@ -222,6 +267,14 @@ int MODULEMAINFUNC (int argc, char** argv){ case 'h': hostname = argv[i] + 2; break; + case 'r': + cbc_string = mystrdup(argv[i] + 2); + iscbc = 1; + break; + case 'R': + cbl_string = mystrdup(argv[i] + 2); + iscbl = 1; + break; case 'u': srv.nouser = 1; break; @@ -255,6 +308,8 @@ int MODULEMAINFUNC (int argc, char** argv){ "Available options are:\n" "%s" " -pPORT - service port to accept connections\n" + " -RIP:PORT - connect back IP:PORT to listen and accept connections\n" + " -rIP:PORT - connect back IP:PORT to establish connect back connection\n" "%s" "\tExample: %s -i127.0.0.1\n\n" "%s", @@ -284,6 +339,8 @@ int MODULEMAINFUNC (int argc, char** argv){ " [-e] " " \n" "Available options are:\n" + " -RIP:PORT - connect back IP:PORT to listen and accept connections\n" + " -rIP:PORT - connect back IP:PORT to establish connect back connection\n" "%s" "%s" "\tExample: %s -d -i127.0.0.1 6666 serv.somehost.ru 6666\n\n" @@ -343,56 +400,7 @@ int MODULEMAINFUNC (int argc, char** argv){ #endif - if(srv.srvsock == INVALID_SOCKET){ - if(!isudp){ - lg.l_onoff = 1; - lg.l_linger = conf.timeouts[STRING_L]; - sock=so._socket(SASOCK(&srv.intsa), SOCK_STREAM, IPPROTO_TCP); - } - else { - sock=so._socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); - } - if( sock == INVALID_SOCKET) { - perror("socket()"); - return -2; - } -#ifdef _WIN32 - ioctlsocket(sock, FIONBIO, &ul); -#else - fcntl(sock,F_SETFL,O_NONBLOCK); -#endif - srv.srvsock = sock; - if(so._setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int)))perror("setsockopt()"); -#ifdef SO_REUSEPORT - so._setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int)); -#endif - } - - size = sizeof(srv.intsa); - for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&srv.intsa, size)==-1; usleep(sleeptime)) { - sprintf((char *)buf, "bind(): %s", strerror(errno)); - if(!srv.silent)(*srv.logfunc)(&defparam, buf); - sleeptime = (sleeptime<<1); - if(!sleeptime) { - so._closesocket(sock); - return -3; - } - } - if(!isudp){ - if(so._listen (sock, 1 + (srv.maxchild>>4))==-1) { - sprintf((char *)buf, "listen(): %s", strerror(errno)); - if(!srv.silent)(*srv.logfunc)(&defparam, buf); - return -4; - } - } - else - defparam.clisock = sock; - - if(!srv.silent){ - sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self()); - (*srv.logfunc)(&defparam, buf); - } memset(&defparam.sincr, 0, sizeof(defparam.sincr)); memset(&defparam.sincl, 0, sizeof(defparam.sincl)); memset(&defparam.sinsl, 0, sizeof(defparam.sinsl)); @@ -404,6 +412,76 @@ int MODULEMAINFUNC (int argc, char** argv){ *SAFAMILY(&defparam.sinsr) = AF_INET; *SAFAMILY(&defparam.req) = AF_INET; + if (!iscbc) { + if(srv.srvsock == INVALID_SOCKET){ + + if(!isudp){ + lg.l_onoff = 1; + lg.l_linger = conf.timeouts[STRING_L]; + sock=so._socket(SASOCK(&srv.intsa), SOCK_STREAM, IPPROTO_TCP); + } + else { + sock=so._socket(SASOCK(&srv.intsa), SOCK_DGRAM, IPPROTO_UDP); + } + if( sock == INVALID_SOCKET) { + perror("socket()"); + return -2; + } +#ifdef _WIN32 + ioctlsocket(sock, FIONBIO, &ul); +#else + fcntl(sock,F_SETFL,O_NONBLOCK); +#endif + srv.srvsock = sock; + if(so._setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int)))perror("setsockopt()"); +#ifdef SO_REUSEPORT + so._setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int)); +#endif + } + size = sizeof(srv.intsa); + for(sleeptime = SLEEPTIME * 100; so._bind(sock, (struct sockaddr*)&srv.intsa, size)==-1; usleep(sleeptime)) { + sprintf((char *)buf, "bind(): %s", strerror(errno)); + if(!srv.silent)(*srv.logfunc)(&defparam, buf); + sleeptime = (sleeptime<<1); + if(!sleeptime) { + so._closesocket(sock); + return -3; + } + } + if(!isudp){ + if(so._listen (sock, 1 + (srv.maxchild>>4))==-1) { + sprintf((char *)buf, "listen(): %s", strerror(errno)); + if(!srv.silent)(*srv.logfunc)(&defparam, buf); + return -4; + } + } + else + defparam.clisock = sock; + + if(!srv.silent && !iscbc){ + sprintf((char *)buf, "Accepting connections [%u/%u]", (unsigned)getpid(), (unsigned)pthread_self()); + (*srv.logfunc)(&defparam, buf); + } + } + else { + parsehost(srv.family, cbc_string, (struct sockaddr *)&defparam.sincr); + } + if(iscbl){ + parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa); + if((srv.cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) { + (*srv.logfunc)(&defparam, "Failed to allocate connect back socket"); + return -6; + } + if(so._bind(srv.cbsock, (struct sockaddr*)&cbsa, sizeof(cbsa))==-1) { + (*srv.logfunc)(&defparam, "Failed to bind connect back socket"); + return -7; + } + if(so._listen(srv.cbsock, 1 + (srv.maxchild>>4))==-1) { + (*srv.logfunc)(&defparam, "Failed to listen connect back socket"); + return -8; + } + } + srv.fds.fd = sock; srv.fds.events = POLLIN; @@ -419,6 +497,7 @@ int MODULEMAINFUNC (int argc, char** argv){ } usleep(SLEEPTIME); } + if (iscbc) break; if (conf.paused != srv.version) break; if (srv.fds.events & POLLIN) { error = so._poll(&srv.fds, 1, 1000); @@ -439,11 +518,23 @@ int MODULEMAINFUNC (int argc, char** argv){ if((conf.paused != srv.version) || (error < 0)) break; if(!isudp){ size = sizeof(defparam.sincr); - new_sock = so._accept(sock, (struct sockaddr*)&defparam.sincr, &size); - if(new_sock == INVALID_SOCKET){ - sprintf((char *)buf, "accept(): %s", strerror(errno)); - if(!srv.silent)(*srv.logfunc)(&defparam, buf); - continue; + if(iscbc){ + new_sock=so._socket(SASOCK(&defparam.sincr), SOCK_STREAM, IPPROTO_TCP); + if(new_sock != INVALID_SOCKET){ + if(so._connect(new_sock,(struct sockaddr *)&defparam.sincr,sizeof(defparam.sincr))) { + so._closesocket(new_sock); + new_sock = INVALID_SOCKET; + continue; + } + } + } + else { + new_sock = so._accept(sock, (struct sockaddr*)&defparam.sincr, &size); + if(new_sock == INVALID_SOCKET){ + sprintf((char *)buf, "accept(): %s", strerror(errno)); + if(!srv.silent)(*srv.logfunc)(&defparam, buf); + continue; + } } size = sizeof(defparam.sincl); if(so._getsockname(new_sock, (struct sockaddr *)&defparam.sincl, &size)){ @@ -490,9 +581,9 @@ int MODULEMAINFUNC (int argc, char** argv){ } #ifdef _WIN32 #ifndef _WINCE - h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, (unsigned)16384, (BEGINTHREADFUNC)srv.pf, (void *) newparam, 0, &thread); + h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, (unsigned)16384, threadfunc, (void *) newparam, 0, &thread); #else - h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)32768, (BEGINTHREADFUNC)srv.pf, (void *) newparam, 0, &thread); + h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)32768, threadfunc, (void *) newparam, 0, &thread); #endif srv.childcount++; if (h) { @@ -506,7 +597,7 @@ int MODULEMAINFUNC (int argc, char** argv){ } #else - error = pthread_create(&thread, &pa, (PTHREADFUNC)srv.pf, (void *)newparam); + error = pthread_create(&thread, &pa, threadfunc, (void *)newparam); srv.childcount++; if(error){ sprintf((char *)buf, "pthread_create(): %s", strerror(error)); @@ -527,6 +618,8 @@ int MODULEMAINFUNC (int argc, char** argv){ if(fp) fclose(fp); srvfree(&srv); if(defparam.hostname)myfree(defparam.hostname); + if(cbc_string)myfree(cbc_string); + if(cbl_string)myfree(cbc_string); #ifndef STDMAIN if(srv.next)srv.next->prev = srv.prev; @@ -553,6 +646,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ srv->srvsock = INVALID_SOCKET; srv->logdumpsrv = conf.logdumpsrv; srv->logdumpcli = conf.logdumpcli; + srv->cbsock = INVALID_SOCKET; memset(param, 0, sizeof(struct clientparam)); param->srv = srv; param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET; @@ -588,6 +682,7 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ void srvfree(struct srvparam * srv){ if(srv->srvsock != INVALID_SOCKET) so._closesocket(srv->srvsock); + if(srv->cbsock != INVALID_SOCKET) so._closesocket(srv->cbsock); srv->srvsock = INVALID_SOCKET; srv->service = S_ZOMBIE; while(srv->child) usleep(SLEEPTIME * 100); diff --git a/src/structures.h b/src/structures.h index 16b065e..e646c66 100644 --- a/src/structures.h +++ b/src/structures.h @@ -34,7 +34,6 @@ extern "C" { #define pthread_mutex_lock(x) EnterCriticalSection(x) #define pthread_mutex_unlock(x) LeaveCriticalSection(x) #define pthread_mutex_destroy(x) DeleteCriticalSection(x) -typedef unsigned (__stdcall *BEGINTHREADFUNC)(void *); #ifdef MSVC #pragma warning (disable : 4996) #endif @@ -140,6 +139,8 @@ typedef enum { S_FTPPR, S_SMTPP, S_ICQPR, + S_REVLI, + S_REVCO, /* S_MSNPR, */ @@ -162,7 +163,6 @@ typedef void * (*EXTENDFUNC) (struct node *node); typedef void (*CBFUNC)(void *cb, char * buf, int inbuf); typedef void (*PRINTFUNC) (struct node *node, CBFUNC cbf, void*cb); typedef int (*PLUGINFUNC) (struct pluginlink *pluginlink, int argc, char** argv); -typedef void * (*PTHREADFUNC)(void *); struct auth { struct auth *next; @@ -360,7 +360,7 @@ struct srvparam { LOGFUNC logfunc; AUTHFUNC authfunc; PROXYFUNC pf; - SOCKET srvsock; + SOCKET srvsock, cbsock; int childcount; int maxchild; int version; diff --git a/src/version.h b/src/version.h index 75aca7f..550d8ec 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150904014330" +#define BUILDDATE "150920205624" From a9ec5a085c7842b839b47b7622a9760e35fe3a3d Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 20 Sep 2015 22:36:54 +0300 Subject: [PATCH 075/122] Fixes infinite loop in previous commit --- src/proxymain.c | 31 ++++++++++++++++++++++++------- src/version.h | 2 +- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index 5b94656..56bb356 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -21,6 +21,7 @@ void * threadfunc (void *p) { if(param->remsock == INVALID_SOCKET) { param->res = 13; param->srv->logfunc(param, "Connect back accept() failed"); + freeparam(param); #ifdef _WIN32 return 0; #else @@ -32,13 +33,23 @@ void * threadfunc (void *p) { if(param->srv->acl) param->res = checkACL(param); if(param->res){ param->srv->logfunc(param, "Connect back ACL failed"); - } + freeparam(param); #ifdef _WIN32 - return 0; + return 0; #else - return NULL; + return NULL; #endif + } #endif + if(so._sendto(param->remsock, "C", 1, 0, (struct sockaddr*)¶m->sinsr, size) != 1){ + param->srv->logfunc(param, "Connect back sending command failed"); + freeparam(param); +#ifdef _WIN32 + return 0; +#else + return NULL; +#endif + } } ((struct clientparam *) p)->srv->pf((struct clientparam *)p); @@ -463,9 +474,6 @@ int MODULEMAINFUNC (int argc, char** argv){ (*srv.logfunc)(&defparam, buf); } } - else { - parsehost(srv.family, cbc_string, (struct sockaddr *)&defparam.sincr); - } if(iscbl){ parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa); if((srv.cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) { @@ -513,7 +521,6 @@ int MODULEMAINFUNC (int argc, char** argv){ if(!srv.silent)(*srv.logfunc)(&defparam, buf); break; } - continue; } if((conf.paused != srv.version) || (error < 0)) break; if(!isudp){ @@ -521,11 +528,21 @@ int MODULEMAINFUNC (int argc, char** argv){ if(iscbc){ new_sock=so._socket(SASOCK(&defparam.sincr), SOCK_STREAM, IPPROTO_TCP); if(new_sock != INVALID_SOCKET){ + parsehost(srv.family, cbc_string, (struct sockaddr *)&defparam.sincr); if(so._connect(new_sock,(struct sockaddr *)&defparam.sincr,sizeof(defparam.sincr))) { so._closesocket(new_sock); new_sock = INVALID_SOCKET; continue; } + if(so._recvfrom(new_sock,buf,1,0,(struct sockaddr*)&defparam.sincr, &size) != 1) { + so._closesocket(new_sock); + new_sock = INVALID_SOCKET; + continue; + } + } + else { + usleep(SLEEPTIME); + continue; } } else { diff --git a/src/version.h b/src/version.h index 550d8ec..119fa76 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150920205624" +#define BUILDDATE "150920223529" From c538d0c2f8ceb41feb089ccc91ba2db91f728dfc Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 20 Sep 2015 22:46:35 +0300 Subject: [PATCH 076/122] Prevent too fast connections on connect back Prevent to fast connections on connect back proxy if port is not reachable --- src/proxymain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/proxymain.c b/src/proxymain.c index 56bb356..3b186a4 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -532,11 +532,13 @@ int MODULEMAINFUNC (int argc, char** argv){ if(so._connect(new_sock,(struct sockaddr *)&defparam.sincr,sizeof(defparam.sincr))) { so._closesocket(new_sock); new_sock = INVALID_SOCKET; + usleep(SLEEPTIME); continue; } if(so._recvfrom(new_sock,buf,1,0,(struct sockaddr*)&defparam.sincr, &size) != 1) { so._closesocket(new_sock); new_sock = INVALID_SOCKET; + usleep(SLEEPTIME); continue; } } From 3e6b230128923b625d3001bc13edce30d9fea6df Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 24 Sep 2015 01:17:50 +0300 Subject: [PATCH 077/122] better listen/connection accept errors handling --- src/proxymain.c | 71 +++++++++++++++++++++++++++---------------------- src/version.h | 2 +- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index 3b186a4..508b157 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -15,44 +15,42 @@ DWORD WINAPI threadfunc(LPVOID p) { #else void * threadfunc (void *p) { #endif + int i = 0; if(param->srv->cbsock != INVALID_SOCKET){ SASIZETYPE size = sizeof(param->sinsr); - param->remsock = so._accept(param->srv->cbsock, (struct sockaddr*)¶m->sinsr, &size); - if(param->remsock == INVALID_SOCKET) { - param->res = 13; - param->srv->logfunc(param, "Connect back accept() failed"); - freeparam(param); -#ifdef _WIN32 - return 0; -#else - return NULL; -#endif - } + for(i=0; i<3; i++){ + param->remsock = so._accept(param->srv->cbsock, (struct sockaddr*)¶m->sinsr, &size); + if(param->remsock == INVALID_SOCKET) { + param->res = 13; + param->srv->logfunc(param, "Connect back accept() failed"); + continue; + } #ifndef WITHMAIN - memcpy(¶m->req, ¶m->sinsr, size); - if(param->srv->acl) param->res = checkACL(param); - if(param->res){ - param->srv->logfunc(param, "Connect back ACL failed"); - freeparam(param); -#ifdef _WIN32 - return 0; -#else - return NULL; + memcpy(¶m->req, ¶m->sinsr, size); + if(param->srv->acl) param->res = checkACL(param); + if(param->res){ + param->srv->logfunc(param, "Connect back ACL failed"); + so._closesocket(param->remsock); + param->remsock = INVALID_SOCKET; + continue; + } #endif - } -#endif - if(so._sendto(param->remsock, "C", 1, 0, (struct sockaddr*)¶m->sinsr, size) != 1){ - param->srv->logfunc(param, "Connect back sending command failed"); - freeparam(param); -#ifdef _WIN32 - return 0; -#else - return NULL; -#endif - } + if(so._sendto(param->remsock, "C", 1, 0, (struct sockaddr*)¶m->sinsr, size) != 1){ + param->srv->logfunc(param, "Connect back sending command failed"); + so._closesocket(param->remsock); + param->remsock = INVALID_SOCKET; + continue; + } + break; + } + } + if(i == 3){ + freeparam(param); + } + else { + ((struct clientparam *) p)->srv->pf((struct clientparam *)p); } - ((struct clientparam *) p)->srv->pf((struct clientparam *)p); #ifdef _WIN32 return 0; #else @@ -444,8 +442,10 @@ int MODULEMAINFUNC (int argc, char** argv){ fcntl(sock,F_SETFL,O_NONBLOCK); #endif srv.srvsock = sock; + opt = 1; if(so._setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int)))perror("setsockopt()"); #ifdef SO_REUSEPORT + opt = 1; so._setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int)); #endif } @@ -480,6 +480,13 @@ int MODULEMAINFUNC (int argc, char** argv){ (*srv.logfunc)(&defparam, "Failed to allocate connect back socket"); return -6; } + opt = 1; + so._setsockopt(srv.cbsock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int)); +#ifdef SO_REUSEPORT + opt = 1; + so._setsockopt(srv.cbsock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int)); +#endif + if(so._bind(srv.cbsock, (struct sockaddr*)&cbsa, sizeof(cbsa))==-1) { (*srv.logfunc)(&defparam, "Failed to bind connect back socket"); return -7; diff --git a/src/version.h b/src/version.h index 119fa76..ad94866 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150920223529" +#define BUILDDATE "150924011516" From 3c6eef6bb0788c5165783d4c9d6d023563594693 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 16 Oct 2015 17:14:01 +0300 Subject: [PATCH 078/122] Add Forwarded: header instead of X-Forwarded-For and Via Add Forwarded: header instead of X-Forwarded-For and Via in HTTP proxy. proxy -a3 changes to old behavior. --- src/proxy.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index 7a89123..b741652 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -810,11 +810,20 @@ for(;;){ } inbuf = 0; #ifndef ANONYMOUS - if(anonymous!=1){ + if(!anonymous){ + sprintf((char*)buf+strlen((char *)buf), "Forwared: for="); + if(*SAFAMILY(¶m->sincr) == AF_INET6) sprintf((char*)buf+strlen((char *)buf), "\"["); + myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128); + if(*SAFAMILY(¶m->sincr) == AF_INET6) sprintf((char*)buf+strlen((char *)buf), "]:%d\";by=", (int)ntohs(*SAPORT(¶m->sincr))); + else sprintf((char*)buf+strlen((char *)buf), ":%d;by=", (int)ntohs(*SAPORT(¶m->sincr))); + gethostname((char *)(buf+strlen((char *)buf)), 256); + sprintf((char*)buf+strlen((char *)buf), ":%d\r\n", (int)ntohs(*SAPORT(¶m->sincl))); + } + else if(anonymous>1){ sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 "); gethostname((char *)(buf+strlen((char *)buf)), 256); sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)""); - if(!anonymous)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128); + if(anonymous != 2)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128); else { unsigned long tmp; From f1beddc85a8ccee93b695e0ea7140c1a9e0271fc Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 16 Oct 2015 18:03:08 +0300 Subject: [PATCH 079/122] optimize Forwarded: generation --- src/proxy.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index b741652..d7483ce 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -811,12 +811,13 @@ for(;;){ inbuf = 0; #ifndef ANONYMOUS if(!anonymous){ - sprintf((char*)buf+strlen((char *)buf), "Forwared: for="); - if(*SAFAMILY(¶m->sincr) == AF_INET6) sprintf((char*)buf+strlen((char *)buf), "\"["); - myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128); - if(*SAFAMILY(¶m->sincr) == AF_INET6) sprintf((char*)buf+strlen((char *)buf), "]:%d\";by=", (int)ntohs(*SAPORT(¶m->sincr))); - else sprintf((char*)buf+strlen((char *)buf), ":%d;by=", (int)ntohs(*SAPORT(¶m->sincr))); - gethostname((char *)(buf+strlen((char *)buf)), 256); + int len = strlen((char *)buf); + len += sprintf((char*)buf + len, "Forwared: for="); + if(*SAFAMILY(¶m->sincr) == AF_INET6) len += sprintf((char*)buf + len, "\"["); + len += myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + len, 128); + if(*SAFAMILY(¶m->sincr) == AF_INET6) len += sprintf((char*)buf + len, "]:%d\";by=", (int)ntohs(*SAPORT(¶m->sincr))); + else len += sprintf((char*)buf + len, ":%d;by=", (int)ntohs(*SAPORT(¶m->sincr))); + gethostname((char *)(buf + len), 256); sprintf((char*)buf+strlen((char *)buf), ":%d\r\n", (int)ntohs(*SAPORT(¶m->sincl))); } else if(anonymous>1){ From a4e54079b5972537d306ab8b1d635b8734494ede Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 16 Oct 2015 18:04:00 +0300 Subject: [PATCH 080/122] Show internal interface on service startup --- src/proxymain.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index 508b157..11e3c5f 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -410,16 +410,6 @@ int MODULEMAINFUNC (int argc, char** argv){ #endif - memset(&defparam.sincr, 0, sizeof(defparam.sincr)); - memset(&defparam.sincl, 0, sizeof(defparam.sincl)); - memset(&defparam.sinsl, 0, sizeof(defparam.sinsl)); - memset(&defparam.sinsr, 0, sizeof(defparam.sinsr)); - memset(&defparam.req, 0, sizeof(defparam.req)); - *SAFAMILY(&defparam.sincr) = AF_INET; - *SAFAMILY(&defparam.sincl) = AF_INET; - *SAFAMILY(&defparam.sinsl) = AF_INET; - *SAFAMILY(&defparam.sinsr) = AF_INET; - *SAFAMILY(&defparam.req) = AF_INET; if (!iscbc) { if(srv.srvsock == INVALID_SOCKET){ @@ -698,7 +688,14 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat); } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); + memset(¶m->sinsl, 0, sizeof(param->sinsl)); + memset(¶m->sinsr, 0, sizeof(param->sinsr)); + memset(¶m->req, 0, sizeof(param->req)); + *SAFAMILY(¶m->sinsl) = AF_INET; + *SAFAMILY(¶m->sinsr) = AF_INET; + *SAFAMILY(¶m->req) = AF_INET; memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); + memcpy(¶m->sincl, &srv->intsa, sizeof(param->sincl)); #ifndef NOIPV6 memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl)); #else From 4ab2da228b0b01c66768777b7f26d5ad897a6d23 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 9 Nov 2015 17:05:31 +0300 Subject: [PATCH 081/122] Typo with Forwarded: header corrected in proxy.c --- src/proxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxy.c b/src/proxy.c index d7483ce..3d1ad0c 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -812,7 +812,7 @@ for(;;){ #ifndef ANONYMOUS if(!anonymous){ int len = strlen((char *)buf); - len += sprintf((char*)buf + len, "Forwared: for="); + len += sprintf((char*)buf + len, "Forwarded: for="); if(*SAFAMILY(¶m->sincr) == AF_INET6) len += sprintf((char*)buf + len, "\"["); len += myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + len, 128); if(*SAFAMILY(¶m->sincr) == AF_INET6) len += sprintf((char*)buf + len, "]:%d\";by=", (int)ntohs(*SAPORT(¶m->sincr))); From 6c187d167b3547bef7fce4a910d43d18fbac2c6c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 28 Nov 2015 22:56:20 +0300 Subject: [PATCH 082/122] Memory safety issues on configuration reload memcpy for potentially overlapped regions replaced with memmove --- src/3proxy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 833c02e..b22d541 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -313,7 +313,7 @@ int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned cha len = 0; if(argm[argc]!=(incbegin+1)) { len = (int)strlen((char *)argm[argc]); - memcpy(buf+*inbuf, argm[argc], len); + memmove(buf+*inbuf, argm[argc], len); } if((res = read(fd, buf+*inbuf+len, STRINGBUF-(1+len))) <= 0) { perror((char *)incbegin+1); @@ -1873,7 +1873,7 @@ int readconfig(FILE * fp){ struct commands * cm; int res = 0; - if( !(buf = myalloc(bufsize)) || ! (argv = myalloc(NPARAMS * sizeof(unsigned char *) + 1)) ) { + if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(unsigned char *))) ) { fprintf(stderr, "No memory for configuration"); return(10); } From 54bcff710c4286ac1ece06b56765175e5d4b81d0 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 28 Nov 2015 22:57:52 +0300 Subject: [PATCH 083/122] Fix for external connections linger was used without init, set bind port to zero --- src/common.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/common.c b/src/common.c index bcaa637..a70c2c8 100644 --- a/src/common.c +++ b/src/common.c @@ -630,7 +630,8 @@ int doconnect(struct clientparam * param){ if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &size)==-1) {return (15);} } else { - struct linger lg; + struct linger lg = {1,conf.timeouts[SINGLEBYTE_S]}; + int opt = 1; if(SAISNULL(¶m->sinsr)){ if(SAISNULL(¶m->req)) { @@ -642,6 +643,8 @@ int doconnect(struct clientparam * param){ if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req); if ((param->remsock=so._socket(SASOCK(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); + so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int)); + #ifndef NOIPV6 if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); else @@ -649,13 +652,7 @@ int doconnect(struct clientparam * param){ memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { -#ifndef NOIPV6 - if(*SAFAMILY(¶m->sinsr) == AF_INET) -#endif - memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); -#ifndef NOIPV6 - else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); -#endif + *SAPORT(¶m->sinsl) = 0; if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { return 12; } From 355d31f8aada4dac34fadfa9303c13ed3b25670f Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 28 Nov 2015 22:59:02 +0300 Subject: [PATCH 084/122] minor cleanups --- src/proxymain.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/proxymain.c b/src/proxymain.c index 11e3c5f..c5566cb 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -705,8 +705,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ void srvfree(struct srvparam * srv){ if(srv->srvsock != INVALID_SOCKET) so._closesocket(srv->srvsock); - if(srv->cbsock != INVALID_SOCKET) so._closesocket(srv->cbsock); srv->srvsock = INVALID_SOCKET; + if(srv->cbsock != INVALID_SOCKET) so._closesocket(srv->cbsock); + srv->cbsock = INVALID_SOCKET; srv->service = S_ZOMBIE; while(srv->child) usleep(SLEEPTIME * 100); #ifndef STDMAIN From 0e4a507dd8718b41de99197efd98a3a6493f8db4 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 28 Nov 2015 23:02:26 +0300 Subject: [PATCH 085/122] publish as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index ad94866..0c36b9f 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "150924011516" +#define BUILDDATE "151128230157" From 62775da1d544995ff9a8b959fa64e67df344705a Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 29 Nov 2015 00:01:41 +0300 Subject: [PATCH 086/122] race condition fixed on configuration reload Race condition on service free'ing --- src/3proxy.c | 119 ++++++++++++++++++++++++++++++++++++++++++---- src/proxy.h | 2 + src/proxymain.c | 124 +++++------------------------------------------- 3 files changed, 124 insertions(+), 121 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index b22d541..2baeb30 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -24,6 +24,7 @@ pthread_mutex_t bandlim_mutex; pthread_mutex_t tc_mutex; pthread_mutex_t pwl_mutex; pthread_mutex_t hash_mutex; +pthread_mutex_t config_mutex; #ifndef NOODBC pthread_mutex_t odbc_mutex; @@ -84,6 +85,113 @@ FILE * confopen(){ } +void freeconf(struct extparam *confp){ + struct bandlim * bl; + struct bandlim * blout; + struct trafcount * tc; + struct passwords *pw; + struct ace *acl; + struct filemon *fm; + int counterd, archiverc; + unsigned char *logname, *logtarget; + unsigned char **archiver; + unsigned char * logformat; + + int i; + + + + + pthread_mutex_lock(&tc_mutex); + confp->trafcountfunc = NULL; + tc = confp->trafcounter; + confp->trafcounter = NULL; + counterd = confp->counterd; + confp->counterd = -1; + pthread_mutex_unlock(&tc_mutex); + if(tc)dumpcounters(tc,counterd); + for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ + if(tc->comment)myfree(tc->comment); + freeacl(tc->ace); + } + confp->countertype = NONE; + + + + logtarget = confp->logtarget; + confp->logtarget = NULL; + logformat = confp->logformat; + confp->logformat = NULL; + + pthread_mutex_lock(&bandlim_mutex); + bl = confp->bandlimiter; + blout = confp->bandlimiterout; + confp->bandlimiter = NULL; + confp->bandlimiterout = NULL; + confp->bandlimfunc = NULL; + pthread_mutex_unlock(&bandlim_mutex); + + logname = confp->logname; + confp->logname = NULL; + archiverc = confp->archiverc; + confp->archiverc = 0; + archiver = confp->archiver; + confp->archiver = NULL; + fm = confp->fmon; + confp->fmon = NULL; + pw = confp->pwl; + confp->pwl = NULL; + confp->rotate = 0; + confp->logtype = NONE; + confp->authfunc = ipauth; + confp->bandlimfunc = NULL; + memset(&confp->intsa, 0, sizeof(confp->intsa)); + memset(&confp->extsa, 0, sizeof(confp->extsa)); +#ifndef NOIPV6 + memset(&confp->extsa6, 0, sizeof(confp->extsa6)); + *SAFAMILY(&confp->extsa6) = AF_INET6; +#endif + *SAFAMILY(&confp->intsa) = AF_INET; + *SAFAMILY(&confp->extsa) = AF_INET; + confp->singlepacket = 0; + confp->maxchild = 100; + resolvfunc = NULL; + numservers = 0; + acl = confp->acl; + confp->acl = NULL; + confp->logtime = confp->time = 0; + + usleep(SLEEPTIME); + + + freeacl(acl); + freepwl(pw); + for(; bl; bl = (struct bandlim *) itfree(bl, bl->next)) freeacl(bl->ace); + for(; blout; blout = (struct bandlim *) itfree(blout, blout->next))freeacl(blout->ace); + + if(counterd != -1) { + close(counterd); + } + for(; fm; fm = (struct filemon *)itfree(fm, fm->next)){ + if(fm->path) myfree(fm->path); + } + if(logtarget) { + myfree(logtarget); + } + if(logname) { + myfree(logname); + } + if(logformat) { + myfree(logformat); + } + if(archiver) { + for(i = 0; i < archiverc; i++) myfree(archiver[i]); + myfree(archiver); + } + +} + + void clearall(){ freeconf(&conf); } @@ -135,15 +243,7 @@ void __stdcall CommandHandler( DWORD dwCommand ) break; case SERVICE_CONTROL_CONTINUE: SetStatus( SERVICE_CONTINUE_PENDING, 0, 1 ); - clearall(); - fp = confopen(); - if(fp){ - error = readconfig(fp); - if(error) { - clearall(); - } - if(!writable)fclose(fp); - } + conf.needreload = 1; SetStatus( SERVICE_RUNNING, 0, 0 ); break; default: ; @@ -2087,6 +2187,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int return 1; } + pthread_mutex_init(&config_mutex, NULL); pthread_mutex_init(&bandlim_mutex, NULL); pthread_mutex_init(&hash_mutex, NULL); pthread_mutex_init(&tc_mutex, NULL); diff --git a/src/proxy.h b/src/proxy.h index 6573d5b..0d884fa 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -246,6 +246,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un struct ace * copyacl (struct ace *ac); struct auth * copyauth (struct auth *); +void * itfree(void *data, void * retval); void freeacl(struct ace *ac); void freeauth(struct auth *); void freefilter(struct filter *filter); @@ -308,6 +309,7 @@ struct dictionary; struct node; struct property; +extern pthread_mutex_t config_mutex; extern pthread_mutex_t bandlim_mutex; extern pthread_mutex_t hash_mutex; extern pthread_mutex_t tc_mutex; diff --git a/src/proxymain.c b/src/proxymain.c index c5566cb..48640ed 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -632,18 +632,21 @@ int MODULEMAINFUNC (int argc, char** argv){ if(!srv.silent) srv.logfunc(&defparam, (unsigned char *)"Exiting thread"); if(fp) fclose(fp); + srvfree(&srv); - if(defparam.hostname)myfree(defparam.hostname); - if(cbc_string)myfree(cbc_string); - if(cbl_string)myfree(cbc_string); #ifndef STDMAIN + pthread_mutex_lock(&config_mutex); if(srv.next)srv.next->prev = srv.prev; if(srv.prev)srv.prev->next = srv.next; else conf.services = srv.next; - freeacl(srv.acl); - freeauth(srv.authfuncs); + pthread_mutex_unlock(&config_mutex); #endif + + if(defparam.hostname)myfree(defparam.hostname); + if(cbc_string)myfree(cbc_string); + if(cbl_string)myfree(cbl_string); + return 0; } @@ -720,6 +723,9 @@ void srvfree(struct srvparam * srv){ } myfree(srv->filter); } + + if(srv->acl)freeacl(srv->acl); + if(srv->authfuncs)freeauth(srv->authfuncs); #endif pthread_mutex_destroy(&srv->counter_mutex); if(srv->target) myfree(srv->target); @@ -903,7 +909,7 @@ FILTER_ACTION makefilters (struct srvparam *srv, struct clientparam *param){ return res; } -static void * itfree(void *data, void * retval){ +void * itfree(void *data, void * retval){ myfree(data); return retval; } @@ -944,112 +950,6 @@ void freeacl(struct ace *ac){ } } -void freeconf(struct extparam *confp){ - struct bandlim * bl; - struct bandlim * blout; - struct trafcount * tc; - struct passwords *pw; - struct ace *acl; - struct filemon *fm; - int counterd, archiverc; - unsigned char *logname, *logtarget; - unsigned char **archiver; - unsigned char * logformat; - - int i; - - - - - pthread_mutex_lock(&tc_mutex); - confp->trafcountfunc = NULL; - tc = confp->trafcounter; - confp->trafcounter = NULL; - counterd = confp->counterd; - confp->counterd = -1; - pthread_mutex_unlock(&tc_mutex); - if(tc)dumpcounters(tc,counterd); - for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ - if(tc->comment)myfree(tc->comment); - freeacl(tc->ace); - } - confp->countertype = NONE; - - - - logtarget = confp->logtarget; - confp->logtarget = NULL; - logformat = confp->logformat; - confp->logformat = NULL; - - pthread_mutex_lock(&bandlim_mutex); - bl = confp->bandlimiter; - blout = confp->bandlimiterout; - confp->bandlimiter = NULL; - confp->bandlimiterout = NULL; - confp->bandlimfunc = NULL; - pthread_mutex_unlock(&bandlim_mutex); - - logname = confp->logname; - confp->logname = NULL; - archiverc = confp->archiverc; - confp->archiverc = 0; - archiver = confp->archiver; - confp->archiver = NULL; - fm = confp->fmon; - confp->fmon = NULL; - pw = confp->pwl; - confp->pwl = NULL; - confp->rotate = 0; - confp->logtype = NONE; - confp->authfunc = ipauth; - confp->bandlimfunc = NULL; - memset(&confp->intsa, 0, sizeof(confp->intsa)); - memset(&confp->extsa, 0, sizeof(confp->extsa)); -#ifndef NOIPV6 - memset(&confp->extsa6, 0, sizeof(confp->extsa6)); - *SAFAMILY(&confp->extsa6) = AF_INET6; -#endif - *SAFAMILY(&confp->intsa) = AF_INET; - *SAFAMILY(&confp->extsa) = AF_INET; - confp->singlepacket = 0; - confp->maxchild = 100; - resolvfunc = NULL; - numservers = 0; - acl = confp->acl; - confp->acl = NULL; - confp->logtime = confp->time = 0; - - usleep(SLEEPTIME); - - - freeacl(acl); - freepwl(pw); - for(; bl; bl = (struct bandlim *) itfree(bl, bl->next)) freeacl(bl->ace); - for(; blout; blout = (struct bandlim *) itfree(blout, blout->next))freeacl(blout->ace); - - if(counterd != -1) { - close(counterd); - } - for(; fm; fm = (struct filemon *)itfree(fm, fm->next)){ - if(fm->path) myfree(fm->path); - } - if(logtarget) { - myfree(logtarget); - } - if(logname) { - myfree(logname); - } - if(logformat) { - myfree(logformat); - } - if(archiver) { - for(i = 0; i < archiverc; i++) myfree(archiver[i]); - myfree(archiver); - } - -} - FILTER_ACTION handlereqfilters(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){ FILTER_ACTION action; int i; From 271d9bb91a4425b405eb48f83070b9f90e9444a1 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 29 Nov 2015 12:20:35 +0300 Subject: [PATCH 087/122] memcpy() replaced with memmove() in bitmap alloc not used by default --- src/myalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/myalloc.c b/src/myalloc.c index 23fa944..93c69b8 100644 --- a/src/myalloc.c +++ b/src/myalloc.c @@ -332,7 +332,7 @@ void *myrealloc(void *ptr, size_t size){ if(size <= memsizes[l]) return ptr; p = myalloc(size); if(p){ - memcpy(p,ptr,size); + memmove(p,ptr,size); myfree(ptr); } return p; From 74772de341f40417396aaa89ef1a9ab1c41e5cca Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 29 Nov 2015 12:38:16 +0300 Subject: [PATCH 088/122] Fixed handling of [] IPv6 addresses in hostnames --- src/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index a70c2c8..c3c97d3 100644 --- a/src/common.c +++ b/src/common.c @@ -250,7 +250,7 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port if(sp){ port = atoi(sp+1); } - getip46(param->srv->family, param->hostname + (se!=0), (struct sockaddr *)¶m->req); + getip46(param->srv->family, param->hostname, (struct sockaddr *)¶m->req); if(se) *se = ']'; if(sp) *sp = ':'; *SAPORT(¶m->req) = htons(port); From fcbb000b0e505bdab7d07a8b2fc763d2cc338178 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 30 Nov 2015 22:51:18 +0300 Subject: [PATCH 089/122] publish as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 0c36b9f..2f246b0 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151128230157" +#define BUILDDATE "151130225110" From 4709f7a7b9156cf09d209e7e15fef39d4700a2dc Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 3 Dec 2015 01:13:34 +0300 Subject: [PATCH 090/122] Fixed race conditions with users on configuration reload --- src/3proxy.c | 77 +++++++++++++++++++++++++++++-------------------- src/proxymain.c | 7 ----- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 2baeb30..50b8280 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -84,6 +84,13 @@ FILE * confopen(){ return fopen(curconf, "r"); } +void freepwl(struct passwords *pwl){ + for(; pwl; pwl = (struct passwords *)itfree(pwl, pwl->next)){ + if(pwl->user)myfree(pwl->user); + if(pwl->password)myfree(pwl->password); + } +} + void freeconf(struct extparam *confp){ struct bandlim * bl; @@ -108,20 +115,8 @@ void freeconf(struct extparam *confp){ confp->trafcounter = NULL; counterd = confp->counterd; confp->counterd = -1; - pthread_mutex_unlock(&tc_mutex); - if(tc)dumpcounters(tc,counterd); - for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ - if(tc->comment)myfree(tc->comment); - freeacl(tc->ace); - } confp->countertype = NONE; - - - - logtarget = confp->logtarget; - confp->logtarget = NULL; - logformat = confp->logformat; - confp->logformat = NULL; + pthread_mutex_unlock(&tc_mutex); pthread_mutex_lock(&bandlim_mutex); bl = confp->bandlimiter; @@ -131,18 +126,27 @@ void freeconf(struct extparam *confp){ confp->bandlimfunc = NULL; pthread_mutex_unlock(&bandlim_mutex); + pthread_mutex_lock(&pwl_mutex); + pw = confp->pwl; + confp->pwl = NULL; + pthread_mutex_unlock(&pwl_mutex); + + + logtarget = confp->logtarget; + confp->logtarget = NULL; + logformat = confp->logformat; + confp->logformat = NULL; logname = confp->logname; confp->logname = NULL; + confp->rotate = 0; + confp->logtype = NONE; + archiverc = confp->archiverc; confp->archiverc = 0; archiver = confp->archiver; confp->archiver = NULL; fm = confp->fmon; confp->fmon = NULL; - pw = confp->pwl; - confp->pwl = NULL; - confp->rotate = 0; - confp->logtype = NONE; confp->authfunc = ipauth; confp->bandlimfunc = NULL; memset(&confp->intsa, 0, sizeof(confp->intsa)); @@ -163,6 +167,12 @@ void freeconf(struct extparam *confp){ usleep(SLEEPTIME); + if(tc)dumpcounters(tc,counterd); + for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ + if(tc->comment)myfree(tc->comment); + freeacl(tc->ace); + } + freeacl(acl); freepwl(pw); @@ -219,8 +229,6 @@ int SetStatus( DWORD dwState, DWORD dwExitCode, DWORD dwProgress ) void __stdcall CommandHandler( DWORD dwCommand ) { - FILE *fp; - int error; switch( dwCommand ) { case SERVICE_CONTROL_STOP: @@ -1047,26 +1055,31 @@ static int h_users(int argc, unsigned char **argv){ return(1); } memset(pwl, 0, sizeof(struct passwords)); - pwl->next = conf.pwl; - conf.pwl = pwl; + arg = (unsigned char *)strchr((char *)argv[j], ':'); if(!arg||!arg[1]||!arg[2]||arg[3]!=':') { pwl->user = (unsigned char *)mystrdup((char *)argv[j]); pwl->pwtype = SYS; - continue; - } - *arg = 0; - pwl->user = (unsigned char *)mystrdup((char *)argv[j]); - if((arg[1] == 'C' && arg[2] == 'L' && (pwl->pwtype = CL)) || - (arg[1] == 'C' && arg[2] == 'R' && (pwl->pwtype = CR)) || - (arg[1] == 'N' && arg[2] == 'T' && (pwl->pwtype = NT)) || - (arg[1] == 'L' && arg[2] == 'M' && (pwl->pwtype = LM))){ - pwl->password = (unsigned char *)mystrdup((char *)arg+4); } else { - pwl->password = (unsigned char *) mystrdup((char *)arg + 1); - pwl->pwtype = UN; + *arg = 0; + pwl->user = (unsigned char *)mystrdup((char *)argv[j]); + if((arg[1] == 'C' && arg[2] == 'L' && (pwl->pwtype = CL)) || + (arg[1] == 'C' && arg[2] == 'R' && (pwl->pwtype = CR)) || + (arg[1] == 'N' && arg[2] == 'T' && (pwl->pwtype = NT)) || + (arg[1] == 'L' && arg[2] == 'M' && (pwl->pwtype = LM))){ + pwl->password = (unsigned char *)mystrdup((char *)arg+4); + } + else { + pwl->password = (unsigned char *) mystrdup((char *)arg + 1); + pwl->pwtype = UN; + } } + pthread_mutex_lock(&pwl_mutex); + pwl->next = conf.pwl; + conf.pwl = pwl; + pthread_mutex_unlock(&pwl_mutex); + } return 0; diff --git a/src/proxymain.c b/src/proxymain.c index 48640ed..d439f9b 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -914,13 +914,6 @@ void * itfree(void *data, void * retval){ return retval; } -void freepwl(struct passwords *pwl){ - for(; pwl; pwl = (struct passwords *)itfree(pwl, pwl->next)){ - if(pwl->user)myfree(pwl->user); - if(pwl->password)myfree(pwl->password); - } -} - void freeauth(struct auth * authfuncs){ for(; authfuncs; authfuncs = (struct auth *)itfree(authfuncs, authfuncs->next)); } From b2e415b8cbe22a4a101be4140cb1309ab2717e0d Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 3 Dec 2015 02:17:15 +0300 Subject: [PATCH 091/122] Code restructure ! configuration moved to config.c - msnpr.c removed - countersutil.c removed --- src/3proxy.c | 1708 +------------------------------------------- src/Makefile.inc | 16 +- src/conf.c | 1689 +++++++++++++++++++++++++++++++++++++++++++ src/countersutil.c | 144 ---- src/msnpr.c | 232 ------ src/proxy.h | 1 + src/structures.h | 12 + src/version.h | 2 +- 8 files changed, 1716 insertions(+), 2088 deletions(-) create mode 100644 src/conf.c delete mode 100644 src/countersutil.c delete mode 100644 src/msnpr.c diff --git a/src/3proxy.c b/src/3proxy.c index 50b8280..000e907 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -18,193 +18,19 @@ #define DEFAULTCONFIG conf.stringtable[25] #endif -typedef int (*MAINFUNC)(int, char**); - -pthread_mutex_t bandlim_mutex; -pthread_mutex_t tc_mutex; -pthread_mutex_t pwl_mutex; -pthread_mutex_t hash_mutex; -pthread_mutex_t config_mutex; - -#ifndef NOODBC -pthread_mutex_t odbc_mutex; -#endif - -int readconfig(FILE * fp); +FILE * confopen(); +extern unsigned char tmpbuf[1024]; +extern unsigned char *strings[]; +extern FILE *writable; +extern struct counter_header cheader; +extern struct counter_record crecord; -int haveerror = 0; -int linenum = 0; time_t basetime = 0; void doschedule(void); -struct counter_header { - unsigned char sig[4]; - time_t updated; -} cheader = {"3CF", (time_t)0}; - -struct counter_record { - uint64_t traf64; - time_t cleared; - time_t updated; -} crecord; - - -int mainfunc (int argc, char** argv); - -struct proxydef childdef = {NULL, 0, 0, S_NOSERVICE, ""}; - -#define STRINGBUF 65535 -#define NPARAMS 4096 - -unsigned char tmpbuf[1024]; -FILE *writable; - -extern unsigned char *strings[]; - -#ifndef _WIN32 -char *chrootp = NULL; -#endif -char * curconf = NULL; - -FILE * confopen(){ - curconf = conf.conffile; -#ifndef _WIN32 - if(chrootp){ - if(strstr(curconf, chrootp) == curconf) - curconf += strlen(chrootp); - } -#endif - if(writable) { - rewind(writable); - return writable; - } - return fopen(curconf, "r"); -} - -void freepwl(struct passwords *pwl){ - for(; pwl; pwl = (struct passwords *)itfree(pwl, pwl->next)){ - if(pwl->user)myfree(pwl->user); - if(pwl->password)myfree(pwl->password); - } -} - - -void freeconf(struct extparam *confp){ - struct bandlim * bl; - struct bandlim * blout; - struct trafcount * tc; - struct passwords *pw; - struct ace *acl; - struct filemon *fm; - int counterd, archiverc; - unsigned char *logname, *logtarget; - unsigned char **archiver; - unsigned char * logformat; - - int i; - - - - - pthread_mutex_lock(&tc_mutex); - confp->trafcountfunc = NULL; - tc = confp->trafcounter; - confp->trafcounter = NULL; - counterd = confp->counterd; - confp->counterd = -1; - confp->countertype = NONE; - pthread_mutex_unlock(&tc_mutex); - - pthread_mutex_lock(&bandlim_mutex); - bl = confp->bandlimiter; - blout = confp->bandlimiterout; - confp->bandlimiter = NULL; - confp->bandlimiterout = NULL; - confp->bandlimfunc = NULL; - pthread_mutex_unlock(&bandlim_mutex); - - pthread_mutex_lock(&pwl_mutex); - pw = confp->pwl; - confp->pwl = NULL; - pthread_mutex_unlock(&pwl_mutex); - - - logtarget = confp->logtarget; - confp->logtarget = NULL; - logformat = confp->logformat; - confp->logformat = NULL; - logname = confp->logname; - confp->logname = NULL; - confp->rotate = 0; - confp->logtype = NONE; - - archiverc = confp->archiverc; - confp->archiverc = 0; - archiver = confp->archiver; - confp->archiver = NULL; - fm = confp->fmon; - confp->fmon = NULL; - confp->authfunc = ipauth; - confp->bandlimfunc = NULL; - memset(&confp->intsa, 0, sizeof(confp->intsa)); - memset(&confp->extsa, 0, sizeof(confp->extsa)); -#ifndef NOIPV6 - memset(&confp->extsa6, 0, sizeof(confp->extsa6)); - *SAFAMILY(&confp->extsa6) = AF_INET6; -#endif - *SAFAMILY(&confp->intsa) = AF_INET; - *SAFAMILY(&confp->extsa) = AF_INET; - confp->singlepacket = 0; - confp->maxchild = 100; - resolvfunc = NULL; - numservers = 0; - acl = confp->acl; - confp->acl = NULL; - confp->logtime = confp->time = 0; - - usleep(SLEEPTIME); - - if(tc)dumpcounters(tc,counterd); - for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ - if(tc->comment)myfree(tc->comment); - freeacl(tc->ace); - } - - - freeacl(acl); - freepwl(pw); - for(; bl; bl = (struct bandlim *) itfree(bl, bl->next)) freeacl(bl->ace); - for(; blout; blout = (struct bandlim *) itfree(blout, blout->next))freeacl(blout->ace); - - if(counterd != -1) { - close(counterd); - } - for(; fm; fm = (struct filemon *)itfree(fm, fm->next)){ - if(fm->path) myfree(fm->path); - } - if(logtarget) { - myfree(logtarget); - } - if(logname) { - myfree(logname); - } - if(logformat) { - myfree(logformat); - } - if(archiver) { - for(i = 0; i < archiverc; i++) myfree(archiver[i]); - myfree(archiver); - } - -} - - -void clearall(){ - freeconf(&conf); -} #ifdef _WIN32 OSVERSIONINFO osv; @@ -305,201 +131,8 @@ void mysigterm (int sig){ void dumpmem(void); - -int reload (void){ - FILE *fp; - int error = -2; - - conf.paused++; - clearall(); - conf.paused++; - - fp = confopen(); - if(fp){ - error = readconfig(fp); - if(error) { - clearall(); - } - if(!writable)fclose(fp); - } - return error; -} - struct schedule *schedule; -#ifdef _WIN32 -DWORD WINAPI startsrv(LPVOID data) { -#else -void * startsrv(void * data) { -#endif - struct child *d = (struct child *)data; - mainfunc(d->argc, (char **)d->argv); - return 0; -} - -int included =0; - -int getrotate(char c){ - switch(c){ - case 'c': - case 'C': - return MINUTELY; - case 'h': - case 'H': - return HOURLY; - case 'd': - case 'D': - return DAILY; - case 'w': - case 'W': - return WEEKLY; - case 'y': - case 'Y': - return ANNUALLY; - case 'm': - case 'M': - return MONTHLY; - default: - return NEVER; - } -} - -int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize){ -#define buf (*buff) - int argc = 0; - int space = 1; - int comment = 0; - unsigned char * incbegin = 0; - int fd; - int res, len; - int i = 1; - unsigned char *str1; - - for(;;str++){ - if(*str == '\"'){ - str1 = str; - do { - *str1 = *(str1 + 1); - }while(*(str1++)); - if(!comment || *str != '\"'){ - comment = !comment; - } - } - switch(*str){ - case '\0': - if(comment) return -1; - argm[argc] = 0; - return argc; - case '$': - if(!comment && !included){ - incbegin = str; - *str = 0; - } - break; - case '\r': - case '\n': - case '\t': - case ' ': - if(!comment){ - *str = 0; - space = 1; - i = 0; - if(incbegin){ - argc--; - if((fd = open((char *)incbegin+1, O_RDONLY)) <= 0){ - fprintf(stderr, "Failed to open %s\n", incbegin+1); - break; - } - if((*bufsize - *inbuf) = nitems) return argc; - space = 0; - } - } - } -#undef buf -} - - -unsigned char * dologname (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t) { - struct tm *ts; - - ts = localtime(&t); - if(strchr((char *)name, '%')){ - struct clientparam fakecli; - - memset(&fakecli, 0, sizeof(fakecli)); - dobuf2(&fakecli, buf, NULL, NULL, ts, (char *)name); - } - else switch(lt){ - case NONE: - sprintf((char *)buf, "%s", name); - break; - case ANNUALLY: - sprintf((char *)buf, "%s.%04d", name, ts->tm_year+1900); - break; - case MONTHLY: - sprintf((char *)buf, "%s.%04d.%02d", name, ts->tm_year+1900, ts->tm_mon+1); - break; - case WEEKLY: - t = t - (ts->tm_wday * (60*60*24)); - ts = localtime(&t); - sprintf((char *)buf, "%s.%04d.%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday); - break; - case DAILY: - sprintf((char *)buf, "%s.%04d.%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday); - break; - case HOURLY: - sprintf((char *)buf, "%s.%04d.%02d.%02d-%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday, ts->tm_hour); - break; - case MINUTELY: - sprintf((char *)buf, "%s.%04d.%02d.%02d-%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday, ts->tm_hour, ts->tm_min); - break; - default: - break; - } - if(ext){ - strcat((char *)buf, "."); - strcat((char *)buf, (char *)ext); - } - return buf; -} int wday = 0; @@ -712,1329 +345,6 @@ void cyclestep(void){ #define RETURN(x) {res = x; goto CLEARRETURN;} -int start_proxy_thread(struct child * chp){ - pthread_t thread; -#ifdef _WIN32 - HANDLE h; -#endif - - conf.threadinit = 1; -#ifdef _WIN32 -#ifndef _WINCE - h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 16384, startsrv, (void *) chp, (DWORD)0, &thread); -#else - h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, 16384, startsrv, (void *) chp, (DWORD)0, &thread); -#endif - if(h)CloseHandle(h); -#else - pthread_attr_init(&pa); - pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + 16384); - pthread_attr_setdetachstate(&pa,PTHREAD_CREATE_DETACHED); - pthread_create(&thread, &pa, startsrv, (void *)chp); -#endif - while(conf.threadinit)usleep(SLEEPTIME); - if(haveerror) { - fprintf(stderr, "Service not started on line: %d\n", linenum); - return(40); - } - return 0; -} - -static int h_proxy(int argc, unsigned char ** argv){ - struct child ch; - - ch.argc = argc; - ch.argv = argv; - if(!strcmp((char *)argv[0], "proxy")) { - childdef.pf = proxychild; - childdef.port = 3128; - childdef.isudp = 0; - childdef.service = S_PROXY; - childdef.helpmessage = " -n - no NTLM support\n"; -#ifdef NOIPV6 - if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ - fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, proxy may run very slow\n", linenum); - } -#endif - } - else if(!strcmp((char *)argv[0], "pop3p")) { - childdef.pf = pop3pchild; - childdef.port = 110; - childdef.isudp = 0; - childdef.service = S_POP3P; - childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; - } - else if(!strcmp((char *)argv[0], "smtpp")) { - childdef.pf = smtppchild; - childdef.port = 25; - childdef.isudp = 0; - childdef.service = S_SMTPP; - childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; - } - else if(!strcmp((char *)argv[0], "ftppr")) { - childdef.pf = ftpprchild; - childdef.port = 21; - childdef.isudp = 0; - childdef.service = S_FTPPR; - childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; - } - else if(!strcmp((char *)argv[0], "socks")) { - childdef.pf = sockschild; - childdef.port = 1080; - childdef.isudp = 0; - childdef.service = S_SOCKS; - childdef.helpmessage = " -n - no NTLM support\n"; -#ifdef NOIPV6 - if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ - fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, socks may run very slow\n", linenum); - } -#endif - } - else if(!strcmp((char *)argv[0], "tcppm")) { - childdef.pf = tcppmchild; - childdef.port = 0; - childdef.isudp = 0; - childdef.service = S_TCPPM; - childdef.helpmessage = ""; - } - else if(!strcmp((char *)argv[0], "icqpr")) { - childdef.pf = icqprchild; - childdef.port = 0; - childdef.isudp = 0; - childdef.service = S_ICQPR; - childdef.helpmessage = ""; - } -/* - else if(!strcmp((char *)argv[0], "msnpr")) { - childdef.pf = msnprchild; - childdef.port = 0; - childdef.isudp = 0; - childdef.service = S_MSNPR; - childdef.helpmessage = ""; - } -*/ - else if(!strcmp((char *)argv[0], "udppm")) { - childdef.pf = udppmchild; - childdef.port = 0; - childdef.isudp = 1; - childdef.service = S_UDPPM; - childdef.helpmessage = " -s single packet UDP service for request/reply (DNS-like) services\n"; - } - else if(!strcmp((char *)argv[0], "admin")) { - childdef.pf = adminchild; - childdef.port = 80; - childdef.isudp = 0; - childdef.service = S_ADMIN; - } - else if(!strcmp((char *)argv[0], "dnspr")) { - childdef.pf = dnsprchild; - childdef.port = 53; - childdef.isudp = 1; - childdef.service = S_DNSPR; - childdef.helpmessage = " -s - simple DNS forwarding - do not use 3proxy resolver / name cache\n"; -#ifndef NOIPV6 - if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize) || resolvfunc == fakeresolver){ - fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, dnspr will not work as expected\n", linenum); - } -#endif - } - return start_proxy_thread(&ch); -} - -static int h_internal(int argc, unsigned char ** argv){ - getip46(46, argv[1], (struct sockaddr *)&conf.intsa); - return 0; -} - -static int h_external(int argc, unsigned char ** argv){ - int res; -#ifndef NOIPV6 - struct sockaddr_in6 sa6; - res = getip46(46, argv[1], (struct sockaddr *)&sa6); - if(!res) return 1; - memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&conf.extsa:(void *)&conf.extsa6, &sa6, SASIZE(&sa6)); -#else - res = getip46(46, argv[1], (struct sockaddr *)&conf.extsa); - if(!res) return 1; -#endif - return 0; -} - -static int h_log(int argc, unsigned char ** argv){ - conf.logfunc = logstdout; - if(conf.logtarget){ - myfree(conf.logtarget); - conf.logtarget = NULL; - } - if(argc > 1) { - conf.logtarget = (unsigned char *)mystrdup((char *)argv[1]); - if(*argv[1]=='@'){ -#ifndef _WIN32 - openlog((char *)conf.logtarget+1, LOG_PID, LOG_DAEMON); - conf.logfunc = logsyslog; -#endif - } -#ifndef NOODBC - else if(*argv[1]=='&'){ - pthread_mutex_lock(&odbc_mutex); - close_sql(); - init_sql((char *)argv[1]+1); - pthread_mutex_unlock(&odbc_mutex); - conf.logfunc = logsql; - } -#endif - else { - FILE *fp, *fp1; - if(argc > 2) { - conf.logtype = getrotate(*argv[2]); - } - conf.logtime = time(0); - if(conf.logname)myfree(conf.logname); - conf.logname = (unsigned char *)mystrdup((char *)argv[1]); - fp = fopen((char *)dologname (tmpbuf, conf.logname, NULL, conf.logtype, conf.logtime), "a"); - if(!fp){ - perror("fopen()"); - return 1; - } - else { - fp1 = conf.stdlog; - conf.stdlog = fp; - if(fp1) fclose(fp1); -#ifdef _WINCE - freopen(tmpbuf, "w", stdout); - freopen(tmpbuf, "w", stderr); -#endif - } - } - } - return 0; -} - -static int h_service(int argc, unsigned char **argv){ -#ifdef _WIN32 - if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT) service = 1; - else { - if(!conf.demon)daemonize(); - conf.demon = 1; - } -#endif - return 0; -} - -static int h_daemon(int argc, unsigned char **argv){ - if(!conf.demon)daemonize(); - conf.demon = 1; - return 0; -} - -static int h_config(int argc, unsigned char **argv){ - if(conf.conffile)myfree(conf.conffile); - conf.conffile = mystrdup((char *)argv[1]); - return 0; -} - -static int h_include(int argc, unsigned char **argv){ - int res; - FILE *fp1; - - fp1 = fopen((char *)argv[1], "r"); - if(!fp1){ - fprintf(stderr, "Unable to open included file: %s\n", argv[1]); - return 1; - } - res = readconfig(fp1); - fclose(fp1); - return res; -} - -static int h_archiver(int argc, unsigned char **argv){ - int j; - - conf.archiver = myalloc(argc * sizeof(char *)); - if(conf.archiver) { - conf.archiverc = argc; - for(j = 0; j < conf.archiverc; j++) conf.archiver[j] = (unsigned char *)mystrdup((char *)argv[j]); - } - return 0; -} - -static int h_counter(int argc, unsigned char **argv){ - struct counter_header ch1; - if(conf.counterd >=0)close(conf.counterd); - if(!conf.trafcountfunc) conf.trafcountfunc = trafcountfunc; - conf.counterd = open((char *)argv[1], O_BINARY|O_RDWR|O_CREAT, 0660); - if(conf.counterd<0){ - fprintf(stderr, "Unable to open counter file %s, line %d\n", argv[1], linenum); - return 1; - } - if(read(conf.counterd, &ch1, sizeof(ch1))==sizeof(ch1)){ - if(memcmp(&ch1, &cheader, 4)){ - fprintf(stderr, "Not a counter file %s, line %d\n", argv[1], linenum); - return 2; - } -#ifdef _MSC_VER -#ifdef _TIME64_T_DEFINED -#ifndef _MAX__TIME64_T -#define _MAX__TIME64_T 0x793406fffi64 -#endif -#endif - if(ch1.updated >= _MAX__TIME64_T){ - fprintf(stderr, "Invalid or corrupted counter file %s. Use countersutil utility to convert from older version\n", argv[1]); - return 3; - } -#endif - cheader.updated = ch1.updated; - } - if(argc >=4) { - conf.countertype = getrotate(*argv[2]); - if(conf.counterfile) myfree(conf.counterfile); - conf.counterfile = mystrdup((char *)argv[3]); - } - return 0; -} - -static int h_rotate(int argc, unsigned char **argv){ - conf.rotate = atoi((char *)argv[1]); - return 0; -} - -static int h_logformat(int argc, unsigned char **argv){ - if(conf.logformat) myfree(conf.logformat); - conf.logformat = (unsigned char *)mystrdup((char *)argv[1]); - return 0; -} - -static int h_timeouts(int argc, unsigned char **argv){ - int j; - - for(j = 0; conf.timeouts[j] && j + 1 < argc; j++) { - if((conf.timeouts[j] = atoi((char *)argv[j + 1])) <= 0 || conf.timeouts[j] > 2000000){ - fprintf(stderr, "Invalid timeout: %s, line %d\n", argv[j + 1], linenum); - return(1); - } - } - return 0; -} - -static int h_noop(int argc, unsigned char **argv){ - return 0; -} - -static int h_auth(int argc, unsigned char **argv){ - struct auth *au, * newau; - - freeauth(conf.authfuncs); - conf.authfuncs = NULL; - if(!conf.bandlimfunc)conf.bandlimfunc = bandlimitfunc; - for(argc--; argc; argc--){ - for(au = authfuncs; au; au=au->next){ - if(!strcmp((char *)argv[argc], au->desc)){ - newau = myalloc(sizeof(struct auth)); - newau->next = conf.authfuncs; - conf.authfuncs = newau; - conf.authfuncs->desc = au->desc; - conf.authfuncs->authenticate = au->authenticate; - conf.authfuncs->authorize = au->authorize; - break; - } - } - if(!au) return 1; - } - conf.authfunc = doauth; - return 0; -} - -static int h_users(int argc, unsigned char **argv){ - int j; - unsigned char *arg; - struct passwords *pwl = NULL; - - for (j = 1; juser = (unsigned char *)mystrdup((char *)argv[j]); - pwl->pwtype = SYS; - } - else { - *arg = 0; - pwl->user = (unsigned char *)mystrdup((char *)argv[j]); - if((arg[1] == 'C' && arg[2] == 'L' && (pwl->pwtype = CL)) || - (arg[1] == 'C' && arg[2] == 'R' && (pwl->pwtype = CR)) || - (arg[1] == 'N' && arg[2] == 'T' && (pwl->pwtype = NT)) || - (arg[1] == 'L' && arg[2] == 'M' && (pwl->pwtype = LM))){ - pwl->password = (unsigned char *)mystrdup((char *)arg+4); - } - else { - pwl->password = (unsigned char *) mystrdup((char *)arg + 1); - pwl->pwtype = UN; - } - } - pthread_mutex_lock(&pwl_mutex); - pwl->next = conf.pwl; - conf.pwl = pwl; - pthread_mutex_unlock(&pwl_mutex); - - - } - return 0; -} - -static int h_maxconn(int argc, unsigned char **argv){ - conf.maxchild = atoi((char *)argv[1]); - if(!conf.maxchild) { - return(1); - } -#ifndef _WIN32 - { - struct rlimit rl; - if(!getrlimit(RLIMIT_NOFILE, &rl)){ - if((conf.maxchild<<1) > rl.rlim_cur) - fprintf(stderr, "[line %d] Warning: current open file ulimits are too low (cur: %d/max: %d)," - " maxconn requires at least %d for every running service." - " Configure ulimits according to system documentation\n", - linenum, (int)rl.rlim_cur, (int)rl.rlim_max, (conf.maxchild<<1)); - } - } -#endif - return 0; -} - -static int h_flush(int argc, unsigned char **argv){ - freeacl(conf.acl); - conf.acl = NULL; - return 0; -} - -/* -static int h_flushusers(int argc, unsigned char **argv){ - freepwl(conf.pwl); - conf.pwl = NULL; - return 0; -} -*/ - -static int h_nserver(int argc, unsigned char **argv){ - char *str; - - if(numservers < MAXNSERVERS) { - if((str = strchr((char *)argv[1], '/'))) - *str = 0; - if(!getip46(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1; - *SAPORT(&nservers[numservers].addr) = htons(53); - if(str) { - nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0; - *str = '/'; - } - numservers++; - - } - resolvfunc = myresolver; - return 0; -} - -static int h_authnserver(int argc, unsigned char **argv){ - char *str; - - if((str = strchr((char *)argv[1], '/'))) - *str = 0; - if(!getip46(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1; - *SAPORT(&authnserver.addr) = htons(53); - if(str) { - authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; - *str = '/'; - } - return 0; -} - -static int h_fakeresolve(int argc, unsigned char **argv){ - resolvfunc = fakeresolver; - return 0; -} - -static int h_nscache(int argc, unsigned char **argv){ - int res; - - res = atoi((char *)argv[1]); - if(res < 256) { - fprintf(stderr, "Invalid NS cache size: %d\n", res); - return 1; - } - if(inithashtable(&dns_table, (unsigned)res)){ - fprintf(stderr, "Failed to initialize NS cache\n"); - return 2; - } - return 0; -} -static int h_nscache6(int argc, unsigned char **argv){ - int res; - - res = atoi((char *)argv[1]); - if(res < 256) { - fprintf(stderr, "Invalid NS cache size: %d\n", res); - return 1; - } - if(inithashtable(&dns6_table, (unsigned)res)){ - fprintf(stderr, "Failed to initialize NS cache\n"); - return 2; - } - return 0; -} - -static int h_nsrecord(int argc, unsigned char **argv){ -#ifndef NOIPV6 - struct sockaddr_in6 sa; -#else - struct sockaddr_in sa; -#endif - memset(&sa, 0, sizeof(sa)); - if(!getip46(46, argv[2], (struct sockaddr *)&sa)) return 1; - - hashadd(*SAFAMILY(&sa)==AF_INET6?&dns6_table:&dns_table, argv[1], SAADDR(&sa), (time_t)0xffffffff); - return 0; -} - -static int h_dialer(int argc, unsigned char **argv){ - if(conf.demanddialprog) myfree(conf.demanddialprog); - conf.demanddialprog = mystrdup((char *)argv[1]); - return 0; -} - -static int h_system(int argc, unsigned char **argv){ - int res; - - if((res = system((char *)argv[1])) == -1){ - fprintf(stderr, "Failed to start %s\n", argv[1]); - return(1); - } - return 0; -} - -static int h_pidfile(int argc, unsigned char **argv){ - FILE *pidf; - - if(!(pidf = fopen((char *)argv[1], "w"))){ - fprintf(stderr, "Failed to open pid file %s\n", argv[1]); - return(1); - } - fprintf(pidf,"%u", (unsigned)getpid()); - fclose(pidf); - return 0; -} - -static int h_monitor(int argc, unsigned char **argv){ - struct filemon * fm; - - fm = myalloc(sizeof (struct filemon)); - if(stat((char *)argv[1], &fm->sb)){ - myfree(fm); - fprintf(stderr, "Warning: file %s doesn't exist on line %d\n", argv[1], linenum); - } - else { - fm->path = mystrdup((char *)argv[1]); - fm->next = conf.fmon; - conf.fmon = fm; - } - return 0; -} - -static int h_parent(int argc, unsigned char **argv){ - struct ace *acl = NULL; - struct chain *chains; - - acl = conf.acl; - while(acl && acl->next) acl = acl->next; - if(!acl || (acl->action && acl->action != 2)) { - fprintf(stderr, "Chaining error: last ACL entry was not \"allow\" or \"redirect\" on line %d\n", linenum); - return(1); - } - acl->action = 2; - - chains = NULL; - if(!acl->chains) { - chains = acl->chains = myalloc(sizeof(struct chain)); - } - else { - chains = acl->chains; - while(chains->next)chains = chains->next; - chains->next = myalloc(sizeof(struct chain)); - chains = chains->next; - } - memset(chains, 0, sizeof(struct chain)); - if(!chains){ - fprintf(stderr, "Chainig error: unable to allocate memory for chain\n"); - return(2); - } - chains->weight = (unsigned)atoi((char *)argv[1]); - if(chains->weight == 0 || chains->weight >1000) { - fprintf(stderr, "Chaining error: bad chain weight %u line %d\n", chains->weight, linenum); - return(3); - } - if(!strcmp((char *)argv[2], "tcp"))chains->type = R_TCP; - else if(!strcmp((char *)argv[2], "http"))chains->type = R_HTTP; - else if(!strcmp((char *)argv[2], "connect"))chains->type = R_CONNECT; - else if(!strcmp((char *)argv[2], "socks4"))chains->type = R_SOCKS4; - else if(!strcmp((char *)argv[2], "socks5"))chains->type = R_SOCKS5; - else if(!strcmp((char *)argv[2], "connect+"))chains->type = R_CONNECTP; - else if(!strcmp((char *)argv[2], "socks4+"))chains->type = R_SOCKS4P; - else if(!strcmp((char *)argv[2], "socks5+"))chains->type = R_SOCKS5P; - else if(!strcmp((char *)argv[2], "socks4b"))chains->type = R_SOCKS4B; - else if(!strcmp((char *)argv[2], "socks5b"))chains->type = R_SOCKS5B; - else if(!strcmp((char *)argv[2], "pop3"))chains->type = R_POP3; - else if(!strcmp((char *)argv[2], "ftp"))chains->type = R_FTP; - else if(!strcmp((char *)argv[2], "admin"))chains->type = R_ADMIN; - else if(!strcmp((char *)argv[2], "icq"))chains->type = R_ICQ; - else if(!strcmp((char *)argv[2], "msn"))chains->type = R_MSN; - else { - fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]); - return(4); - } - if(!getip46(46, argv[3], (struct sockaddr *)&chains->addr)) return 5; - *SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4])); - if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]); - if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]); - return 0; - -} - -static int h_nolog(int argc, unsigned char **argv){ - struct ace *acl = NULL; - - acl = conf.acl; - if(!acl) { - fprintf(stderr, "Chaining error: last ACL entry was not \"allow/deny\" on line %d\n", linenum); - return(1); - } - while(acl->next) acl = acl->next; - if(!strcmp(argv[0],"nolog")) acl->nolog = 1; - else acl->weight = atoi((char*)argv[1]); - return 0; -} - -int scanipl(unsigned char *arg, struct iplist *dst){ -#ifndef NOIPV6 - struct sockaddr_in6 sa; -#else - struct sockaddr_in sa; -#endif - char * slash, *dash; - int masklen, addrlen; - if((slash = strchr(arg, '/'))) *slash = 0; - if((dash = strchr(arg,'-'))) *dash = 0; - - if(!getip46(46, arg, (struct sockaddr *)&sa)) return 1; - memcpy(&dst->ip_from, SAADDR(&sa), SAADDRLEN(&sa)); - dst->family = *SAFAMILY(&sa); - if(dash){ - if(!getip46(46, dash+1, (struct sockaddr *)&sa)) return 2; - memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa)); - if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3; - return 0; - } - memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)); - if(slash){ - addrlen = SAADDRLEN(&sa); - masklen = atoi(slash+1); - if(masklen < 0 || masklen > (addrlen*8)) return 4; - else { - int i, nbytes = masklen / 8, nbits = (8 - (masklen % 8)) % 8; - - for(i = addrlen; i>(nbytes + (nbits > 0)); i--){ - ((unsigned char *)&dst->ip_from)[i-1] = 0x00; - ((unsigned char *)&dst->ip_to)[i-1] = 0xff; - } - for(;nbits;nbits--){ - ((unsigned char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1)); - ((unsigned char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1)); - } - return 0; - } - } - return 0; -} - -struct ace * make_ace (int argc, unsigned char ** argv){ - struct ace * acl; - unsigned char *arg; - struct iplist *ipl=NULL; - struct portlist *portl=NULL; - struct userlist *userl=NULL; - struct hostname *hostnamel=NULL; - int res; - - acl = myalloc(sizeof(struct ace)); - if(!acl) return acl; - memset(acl, 0, sizeof(struct ace)); - if(argc > 0 && strcmp("*", (char *)argv[0])) { - arg = argv[0]; - arg = (unsigned char *)strtok((char *)arg, ","); - do { - if(!acl->users) { - acl->users = userl = myalloc(sizeof(struct userlist)); - } - else { - userl->next = myalloc(sizeof(struct userlist)); - userl = userl -> next; - } - if(!userl) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - memset(userl, 0, sizeof(struct userlist)); - userl->user=(unsigned char*)mystrdup((char *)arg); - } while((arg = (unsigned char *)strtok((char *)NULL, ","))); - } - if(argc > 1 && strcmp("*", (char *)argv[1])) { - arg = (unsigned char *)strtok((char *)argv[1], ","); - do { - if(!acl->src) { - acl->src = ipl = myalloc(sizeof(struct iplist)); - } - else { - ipl->next = myalloc(sizeof(struct iplist)); - ipl = ipl -> next; - } - if(!ipl) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - memset(ipl, 0, sizeof(struct iplist)); - if (scanipl(arg, ipl)) { - fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); - return(NULL); - } - } while((arg = (unsigned char *)strtok((char *)NULL, ","))); - } - if(argc > 2 && strcmp("*", (char *)argv[2])) { - arg = (unsigned char *)strtok((char *)argv[2], ","); - do { - int arglen; - unsigned char *pattern; - - arglen = (int)strlen((char *)arg); - if(arglen > 0 && (arg[arglen-1] < '0' || arg[arglen-1] > '9')){ - if(!acl->dstnames) { - acl->dstnames = hostnamel = myalloc(sizeof(struct hostname)); - } - else { - hostnamel->next = myalloc(sizeof(struct hostname)); - hostnamel = hostnamel -> next; - } - if(!hostnamel){ - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - memset(hostnamel, 0, sizeof(struct hostname)); - hostnamel->matchtype = 3; - pattern = arg; - if(pattern[arglen-1] == '*'){ - arglen --; - pattern[arglen] = 0; - hostnamel->matchtype ^= MATCHEND; - } - if(pattern[0] == '*'){ - pattern++; - arglen--; - hostnamel->matchtype ^= MATCHBEGIN; - } - hostnamel->name = (unsigned char *) mystrdup( (char *)pattern); - if(!hostnamel->name) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - } - else { - - if(!acl->dst) { - acl->dst = ipl = myalloc(sizeof(struct iplist)); - } - else { - ipl->next = myalloc(sizeof(struct iplist)); - ipl = ipl -> next; - } - if(!ipl) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - memset(ipl, 0, sizeof(struct iplist)); - if (scanipl(arg, ipl)) { - fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); - return(NULL); - } - } - }while((arg = (unsigned char *)strtok((char *)NULL, ","))); - } - if(argc > 3 && strcmp("*", (char *)argv[3])) { - arg = (unsigned char *)strtok((char *)argv[3], ","); - do { - if(!acl->ports) { - acl->ports = portl = myalloc(sizeof(struct portlist)); - } - else { - portl->next = myalloc(sizeof(struct portlist)); - portl = portl -> next; - } - if(!portl) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(NULL); - } - memset(portl, 0, sizeof(struct portlist)); - res = sscanf((char *)arg, "%hu-%hu", &portl->startport, &portl->endport); - if(res < 1) { - fprintf(stderr, "Invalid port or port range, line %d\n", linenum); - return(NULL); - } - if (res == 1) portl->endport = portl->startport; - } while((arg = (unsigned char *)strtok((char *)NULL, ","))); - } - if(argc > 4 && strcmp("*", (char *)argv[4])) { - arg = (unsigned char *)strtok((char *)argv[4], ","); - do { - if(!strcmp((char *)arg, "CONNECT")){ - acl->operation |= CONNECT; - } - else if(!strcmp((char *)arg, "BIND")){ - acl->operation |= BIND; - } - else if(!strcmp((char *)arg, "UDPASSOC")){ - acl->operation |= UDPASSOC; - } - else if(!strcmp((char *)arg, "ICMPASSOC")){ - acl->operation |= ICMPASSOC; - } - else if(!strcmp((char *)arg, "HTTP_GET")){ - acl->operation |= HTTP_GET; - } - else if(!strcmp((char *)arg, "HTTP_PUT")){ - acl->operation |= HTTP_PUT; - } - else if(!strcmp((char *)arg, "HTTP_POST")){ - acl->operation |= HTTP_POST; - } - else if(!strcmp((char *)arg, "HTTP_HEAD")){ - acl->operation |= HTTP_HEAD; - } - else if(!strcmp((char *)arg, "HTTP_OTHER")){ - acl->operation |= HTTP_OTHER; - } - else if(!strcmp((char *)arg, "HTTP_CONNECT")){ - acl->operation |= HTTP_CONNECT; - } - else if(!strcmp((char *)arg, "HTTP")){ - acl->operation |= HTTP; - } - else if(!strcmp((char *)arg, "HTTPS")){ - acl->operation |= HTTPS; - } - else if(!strcmp((char *)arg, "FTP_GET")){ - acl->operation |= FTP_GET; - } - else if(!strcmp((char *)arg, "FTP_PUT")){ - acl->operation |= FTP_PUT; - } - else if(!strcmp((char *)arg, "FTP_LIST")){ - acl->operation |= FTP_LIST; - } - else if(!strcmp((char *)arg, "FTP_DATA")){ - acl->operation |= FTP_DATA; - } - else if(!strcmp((char *)arg, "FTP")){ - acl->operation |= FTP; - } - else if(!strcmp((char *)arg, "ADMIN")){ - acl->operation |= ADMIN; - } - else if(!strcmp((char *)arg, "DNSRESOLVE")){ - acl->operation |= DNSRESOLVE; - } - else if(!strcmp((char *)arg, "ICQ")){ - acl->operation |= IM_ICQ; - } - else { - fprintf(stderr, "Unknown operation type: %s line %d\n", arg, linenum); - return(NULL); - } - } while((arg = (unsigned char *)strtok((char *)NULL, ","))); - } - if(argc > 5){ - for(arg = argv[5]; *arg;){ - int val, val1; - - if(!isnumber(*arg)){ - arg++; - continue; - } - val1 = val = (*arg - '0'); - arg++; - if(*arg == '-' && isnumber(*(arg+1)) && (*(arg+1) - '0') > val) { - val1 = (*(arg+1) - '0'); - arg+=2; - } - for(; val<=val1; val++) acl->wdays |= (1 << (val % 7)); - } - - } - if(argc > 6){ - for(arg = argv[6]; strlen((char *)arg) >= 17 && - isdigit(arg[0]) && - isdigit(arg[1]) && - isdigit(arg[3]) && - isdigit(arg[4]) && - isdigit(arg[6]) && - isdigit(arg[7]) && - isdigit(arg[9]) && - isdigit(arg[10]) && - isdigit(arg[12]) && - isdigit(arg[13]) && - isdigit(arg[15]) && - isdigit(arg[16]) - ; arg+=18){ - - int t1, t2; - struct period *sp; - - t1 = (arg[0] - '0') * 10 + (arg[1] - '0'); - t1 = (t1 * 60) + (arg[3] - '0') * 10 + (arg[4] - '0'); - t1 = (t1 * 60) + (arg[6] - '0') * 10 + (arg[7] - '0'); - t2 = (arg[9] - '0') * 10 + (arg[10] - '0'); - t2 = (t2 * 60) + (arg[12] - '0') * 10 + (arg[13] - '0'); - t2 = (t2 * 60) + (arg[15] - '0') * 10 + (arg[16] - '0'); - if(t2 < t1) break; - sp = myalloc(sizeof(struct period)); - if(sp){ - sp->fromtime = t1; - sp->totime = t2; - sp->next = acl->periods; - acl->periods = sp; - } - if(arg[17]!=',') break; - } - } - if (argc > 7){ - acl->weight = atoi((char *)argv[7]); - } - - return acl; -} - - -static int h_ace(int argc, unsigned char **argv){ - int res = 0; - int offset = 0; - struct ace *acl = NULL; - struct bandlim * nbl; - struct trafcount * tl; - - if(!strcmp((char *)argv[0], "allow")){ - res = ALLOW; - } - else if(!strcmp((char *)argv[0], "deny")){ - res = DENY; - } - else if(!strcmp((char *)argv[0], "redirect")){ - res = REDIRECT; - offset = 2; - } - else if(!strcmp((char *)argv[0], "bandlimin")||!strcmp((char *)argv[0], "bandlimout")){ - res = BANDLIM; - offset = 1; - } - else if(!strcmp((char *)argv[0], "nobandlimin")||!strcmp((char *)argv[0], "nobandlimout")){ - res = NOBANDLIM; - } - else if(!strcmp((char *)argv[0], "countin")){ - res = COUNTIN; - offset = 3; - } - else if(!strcmp((char *)argv[0], "nocountin")){ - res = NOCOUNTIN; - } - else if(!strcmp((char *)argv[0], "countout")){ - res = COUNTOUT; - offset = 3; - } - else if(!strcmp((char *)argv[0], "nocountout")){ - res = NOCOUNTOUT; - } - acl = make_ace(argc - (offset+1), argv + (offset + 1)); - if(!acl) { - fprintf(stderr, "Unable to parse ACL entry, line %d\n", linenum); - return(1); - } - acl->action = res; - switch(acl->action){ - case REDIRECT: - acl->chains = myalloc(sizeof(struct chain)); - memset(acl->chains, 0, sizeof(struct chain)); - if(!acl->chains) { - fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); - return(2); - } - acl->chains->type = R_HTTP; - if(!getip46(46, argv[1], (struct sockaddr *)&acl->chains->addr)) return 5; - *SAPORT(&acl->chains->addr) = htons((unsigned short)atoi((char *)argv[2])); - acl->chains->weight = 1000; - acl->chains->extuser = NULL; - acl->chains->extpass = NULL; - acl->chains->next = NULL; - case ALLOW: - case DENY: - if(!conf.acl){ - conf.acl = acl; - } - else { - struct ace * acei; - - for(acei = conf.acl; acei->next; acei = acei->next); - acei->next = acl; - } - break; - case BANDLIM: - case NOBANDLIM: - - nbl = myalloc(sizeof(struct bandlim)); - if(!nbl) { - fprintf(stderr, "No memory to create band limit filter\n"); - return(3); - } - memset(nbl, 0, sizeof(struct bandlim)); - nbl->ace = acl; - if(acl->action == BANDLIM) { - sscanf((char *)argv[1], "%u", &nbl->rate); - if(nbl->rate < 300) { - fprintf(stderr, "Wrong bandwidth specified, line %d\n", linenum); - return(4); - } - } - pthread_mutex_lock(&bandlim_mutex); - if(!strcmp((char *)argv[0], "bandlimin") || !strcmp((char *)argv[0], "nobandlimin")){ - if(!conf.bandlimiter){ - conf.bandlimiter = nbl; - } - else { - struct bandlim * bli; - - for(bli = conf.bandlimiter; bli->next; bli = bli->next); - bli->next = nbl; - } - } - else { - if(!conf.bandlimiterout){ - conf.bandlimiterout = nbl; - } - else { - struct bandlim * bli; - - for(bli = conf.bandlimiterout; bli->next; bli = bli->next); - bli->next = nbl; - } - } - - pthread_mutex_unlock(&bandlim_mutex); - break; - - case COUNTIN: - case NOCOUNTIN: - case COUNTOUT: - case NOCOUNTOUT: - tl = myalloc(sizeof(struct trafcount)); - if(!tl) { - fprintf(stderr, "No memory to create traffic limit filter\n"); - return(5); - } - memset(tl, 0, sizeof(struct trafcount)); - tl->ace = acl; - - if((acl->action == COUNTIN)||(acl->action == COUNTOUT)) { - unsigned long lim; - - tl->comment = ( char *)argv[1]; - while(isdigit(*tl->comment))tl->comment++; - if(*tl->comment== '/')tl->comment++; - tl->comment = mystrdup(tl->comment); - - sscanf((char *)argv[1], "%u", &tl->number); - sscanf((char *)argv[3], "%lu", &lim); - tl->type = getrotate(*argv[2]); - tl->traflim64 = ((uint64_t)lim)*(1024*1024); - if(!tl->traflim64) { - fprintf(stderr, "Wrong traffic limit specified, line %d\n", linenum); - return(6); - } - if(tl->number != 0 && conf.counterd >= 0) { - lseek(conf.counterd, - sizeof(struct counter_header) + (tl->number - 1) * sizeof(struct counter_record), - SEEK_SET); - memset(&crecord, 0, sizeof(struct counter_record)); - read(conf.counterd, &crecord, sizeof(struct counter_record)); - tl->traf64 = crecord.traf64; - tl->cleared = crecord.cleared; - tl->updated = crecord.updated; -#ifdef _MAX__TIME64_T - if(tl->cleared >= _MAX__TIME64_T || tl->updated >= _MAX__TIME64_T){ - fprintf(stderr, "Invalid or corrupted counter file. Use countersutil utility to convert from older version\n"); - return(6); - } -#endif - } - } - pthread_mutex_lock(&tc_mutex); - if(!conf.trafcounter){ - conf.trafcounter = tl; - } - else { - struct trafcount * ntl; - - for(ntl = conf.trafcounter; ntl->next; ntl = ntl->next); - ntl->next = tl; - } - pthread_mutex_unlock(&tc_mutex); - - } - return 0; -} - -static int h_logdump(int argc, unsigned char **argv){ - conf.logdumpsrv = (unsigned) atoi((char *) *(argv + 1)); - if(argc > 2) conf.logdumpcli = (unsigned) atoi((char *) *(argv + 2)); - return 0; -} - - -static int h_filtermaxsize(int argc, unsigned char **argv){ - conf.filtermaxsize = atoi((char *) *(argv + 1)); - return 0; -} - -static int h_delimchar(int argc, unsigned char **argv){ - conf.delimchar = *argv[1]; - return 0; -} - -static int h_authcache(int argc, unsigned char **argv){ - conf.authcachetype = 0; - if(strstr((char *) *(argv + 1), "ip")) conf.authcachetype |= 1; - if(strstr((char *) *(argv + 1), "user")) conf.authcachetype |= 2; - if(strstr((char *) *(argv + 1), "pass")) conf.authcachetype |= 4; - if(argc > 2) conf.authcachetime = (unsigned) atoi((char *) *(argv + 2)); - if(!conf.authcachetype) conf.authcachetype = 6; - if(!conf.authcachetime) conf.authcachetime = 600; - return 0; -} - -static int h_plugin(int argc, unsigned char **argv){ -#ifdef NOPLUGINS - return 999; -#else -#ifdef _WIN32 - HINSTANCE hi; - FARPROC fp; - -#ifdef _WINCE - hi = LoadLibraryW((LPCWSTR)CEToUnicode(argv[1])); -#else - hi = LoadLibrary(argv[1]); -#endif - if(!hi) { - fprintf(stderr, "Failed to load %s, code %d\n", argv[1], (int)GetLastError()); - return 1; - } -#ifdef _WINCE - fp = GetProcAddressW(hi, (LPCWSTR)CEToUnicode(argv[2])); -#else - fp = GetProcAddress(hi, argv[2]); -#endif - if(!fp) { - printf("%s not found in %s, code: %d\n", argv[2], argv[1], (int)GetLastError()); - return 2; - } - return (*(PLUGINFUNC)fp)(&pluginlink, argc - 2, (char **)argv + 2); -#else - void *hi, *fp; - hi = dlopen((char *)argv[1], RTLD_LAZY); - if(!hi) return 1; - fp = dlsym(hi, (char *)argv[2]); - if(!fp) return 2; - return (*(PLUGINFUNC)fp)(&pluginlink, argc - 2, (char **)argv + 2); -#endif -#endif -} - -#ifndef _WIN32 -static int h_setuid(int argc, unsigned char **argv){ - int res; - res = atoi((char *)argv[1]); - if(!res || setuid(res)) { - fprintf(stderr, "Unable to set uid %d", res); - return(1); - } - return 0; -} - -static int h_setgid(int argc, unsigned char **argv){ - int res; - - res = atoi((char *)argv[1]); - if(!res || setgid(res)) { - fprintf(stderr, "Unable to set gid %d", res); - return(1); - } - return 0; -} - - -static int h_chroot(int argc, unsigned char **argv){ - if(!chrootp){ - char *p; - if(chroot((char *)argv[1])) { - fprintf(stderr, "Unable to chroot %s", argv[1]); - return(1); - } - p = (char *)argv[1] + strlen((char *)argv[1]) ; - while (p > (char *)argv[1] && p[-1] == '/'){ - p--; - *p = 0; - } - chrootp = mystrdup((char *)argv[1]); - } - return 0; -} -#endif - - -struct commands specificcommands[]={ -#ifndef _WIN32 - {specificcommands+1, "setuid", h_setuid, 2, 2}, - {specificcommands+2, "setgid", h_setgid, 2, 2}, - {specificcommands+3, "chroot", h_chroot, 2, 2}, -#endif - {NULL, "", h_noop, 1, 0} -}; - -struct commands commandhandlers[]={ - {commandhandlers+1, "", h_noop, 1, 0}, - {commandhandlers+2, "proxy", h_proxy, 1, 0}, - {commandhandlers+3, "pop3p", h_proxy, 1, 0}, - {commandhandlers+4, "ftppr", h_proxy, 1, 0}, - {commandhandlers+5, "socks", h_proxy, 1, 0}, - {commandhandlers+6, "tcppm", h_proxy, 4, 0}, - {commandhandlers+7, "udppm", h_proxy, 4, 0}, - {commandhandlers+8, "admin", h_proxy, 1, 0}, - {commandhandlers+9, "dnspr", h_proxy, 1, 0}, - {commandhandlers+10, "internal", h_internal, 2, 2}, - {commandhandlers+11, "external", h_external, 2, 2}, - {commandhandlers+12, "log", h_log, 1, 0}, - {commandhandlers+13, "service", h_service, 1, 1}, - {commandhandlers+14, "daemon", h_daemon, 1, 1}, - {commandhandlers+15, "config", h_config, 2, 2}, - {commandhandlers+16, "include", h_include, 2, 2}, - {commandhandlers+17, "archiver", h_archiver, 3, 0}, - {commandhandlers+18, "counter", h_counter, 2, 4}, - {commandhandlers+19, "rotate", h_rotate, 2, 2}, - {commandhandlers+20, "logformat", h_logformat, 2, 2}, - {commandhandlers+21, "timeouts", h_timeouts, 2, 0}, - {commandhandlers+22, "auth", h_auth, 2, 0}, - {commandhandlers+23, "users", h_users, 2, 0}, - {commandhandlers+24, "maxconn", h_maxconn, 2, 2}, - {commandhandlers+25, "flush", h_flush, 1, 1}, - {commandhandlers+26, "nserver", h_nserver, 2, 2}, - {commandhandlers+27, "fakeresolve", h_fakeresolve, 1, 1}, - {commandhandlers+28, "nscache", h_nscache, 2, 2}, - {commandhandlers+29, "nscache6", h_nscache6, 2, 2}, - {commandhandlers+30, "nsrecord", h_nsrecord, 3, 3}, - {commandhandlers+31, "dialer", h_dialer, 2, 2}, - {commandhandlers+32, "system", h_system, 2, 2}, - {commandhandlers+33, "pidfile", h_pidfile, 2, 2}, - {commandhandlers+34, "monitor", h_monitor, 2, 2}, - {commandhandlers+35, "parent", h_parent, 5, 0}, - {commandhandlers+36, "allow", h_ace, 1, 0}, - {commandhandlers+37, "deny", h_ace, 1, 0}, - {commandhandlers+38, "redirect", h_ace, 3, 0}, - {commandhandlers+39, "bandlimin", h_ace, 2, 0}, - {commandhandlers+40, "bandlimout", h_ace, 2, 0}, - {commandhandlers+41, "nobandlimin", h_ace, 1, 0}, - {commandhandlers+42, "nobandlimout", h_ace, 1, 0}, - {commandhandlers+43, "countin", h_ace, 4, 0}, - {commandhandlers+44, "nocountin", h_ace, 1, 0}, - {commandhandlers+45, "countout", h_ace, 4, 0}, - {commandhandlers+46, "nocountout", h_ace, 1, 0}, - {commandhandlers+47, "plugin", h_plugin, 3, 0}, - {commandhandlers+48, "logdump", h_logdump, 2, 3}, - {commandhandlers+49, "filtermaxsize", h_filtermaxsize, 2, 2}, - {commandhandlers+50, "nolog", h_nolog, 1, 1}, - {commandhandlers+51, "weight", h_nolog, 2, 2}, - {commandhandlers+52, "authcache", h_authcache, 2, 3}, - {commandhandlers+53, "smtpp", h_proxy, 1, 0}, - {commandhandlers+54, "icqpr", h_proxy, 4, 0}, - {commandhandlers+55, "msnpr", h_proxy, 4, 0}, - {commandhandlers+56, "delimchar",h_delimchar, 2, 2}, - {commandhandlers+57, "authnserver", h_authnserver, 2, 2}, - {specificcommands, "", h_noop, 1, 0} -}; - -int readconfig(FILE * fp){ - unsigned char ** argv = NULL; - unsigned char * buf = NULL; - int bufsize = STRINGBUF*2; - int inbuf = 0; - int argc; - struct commands * cm; - int res = 0; - - if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(unsigned char *))) ) { - fprintf(stderr, "No memory for configuration"); - return(10); - } - for (linenum = 1; fgets((char *)buf, STRINGBUF, fp); linenum++){ - if(!*buf || isspace(*buf) || (*buf) == '#')continue; - - inbuf = (int)(strlen((char *)buf) + 1); - argc = parsestr (buf, argv, NPARAMS-1, &buf, &inbuf, &bufsize); - if(argc < 1) { - fprintf(stderr, "Parse error line %d\n", linenum); - return(21); - } - argv[argc] = NULL; - if(!strcmp((char *)argv[0], "end") && argc == 1) { - break; - } - else if(!strcmp((char *)argv[0], "writable") && argc == 1) { - if(!writable){ - writable = freopen(curconf, "r+", fp); - if(!writable){ - fprintf(stderr, "Unable to reopen config for writing: %s\n", curconf); - return 1; - } - } - continue; - } - - res = 1; - for(cm = commandhandlers; cm; cm = cm->next){ - if(!strcmp((char *)argv[0], (char *)cm->command) && argc >= cm->minargs && (!cm->maxargs || argc <= cm->maxargs)){ - res = (*cm->handler)(argc, argv); - if(res > 0){ - fprintf(stderr, "Command: '%s' failed with code %d, line %d\n", argv[0], res, linenum); - return(linenum); - } - if(!res) break; - } - } - if(res != 1)continue; - fprintf(stderr, "Unknown command: '%s' line %d\n", argv[0], linenum); - return(linenum); - } - myfree(buf); - myfree(argv); - return 0; - -} - #ifndef _WINCE int main(int argc, char * argv[]) { @@ -2209,11 +519,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int pthread_mutex_init(&odbc_mutex, NULL); #endif - { - char * args[] = {"auth", "iponly", NULL}; - h_auth(2, (unsigned char **)args); - } - + freeconf(&conf); res = readconfig(fp); if(res) RETURN(res); diff --git a/src/Makefile.inc b/src/Makefile.inc index a3422ef..d1b3110 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -2,7 +2,7 @@ # 3 proxy common Makefile # -all: pre $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) $(BUILDDIR)countersutil$(EXESUFFICS) allplugins +all: pre $(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)dighosts$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) allplugins pre: @@ -123,6 +123,9 @@ srvdnspr$(OBJSUFFICS): dnspr.c proxy.h structures.h auth$(OBJSUFFICS): auth.c proxy.h structures.h $(CC) $(COUT)auth$(OBJSUFFICS) $(CFLAGS) auth.c +conf$(OBJSUFFICS): conf.c proxy.h structures.h + $(CC) $(COUT)conf$(OBJSUFFICS) $(CFLAGS) conf.c + datatypes$(OBJSUFFICS): datatypes.c proxy.h structures.h $(CC) $(COUT)datatypes$(OBJSUFFICS) $(CFLAGS) datatypes.c @@ -135,13 +138,6 @@ dighosts$(OBJSUFFICS): dighosts.c $(BUILDDIR)dighosts$(EXESUFFICS): dighosts$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(COMPATLIBS) $(LN) $(LNOUT)$(BUILDDIR)dighosts$(EXESUFFICS) $(LDFLAGS) $(VERFILE) dighosts$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) -countersutil$(OBJSUFFICS): countersutil.c - $(CC) $(COUT)countersutil$(OBJSUFFICS) $(CFLAGS) countersutil.c - -$(BUILDDIR)countersutil$(EXESUFFICS): countersutil$(OBJSUFFICS) $(COMPATLIBS) - $(LN) $(LNOUT)$(BUILDDIR)countersutil$(EXESUFFICS) $(LDFLAGS) $(VERFILE) countersutil$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) - - mycryptmain$(OBJSUFFICS): mycrypt.c $(CC) $(COUT)mycryptmain$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)WITHMAIN mycrypt.c @@ -164,8 +160,8 @@ ntlm$(OBJSUFFICS): ntlm.c stringtable$(OBJSUFFICS): stringtable.c $(CC) $(COUT)stringtable$(OBJSUFFICS) $(CFLAGS) stringtable.c -$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) - $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) +$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) + $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS) clean: @$(REMOVECOMMAND) *$(OBJSUFFICS) $(COMPFILES) diff --git a/src/conf.c b/src/conf.c new file mode 100644 index 0000000..88721b3 --- /dev/null +++ b/src/conf.c @@ -0,0 +1,1689 @@ +#include "proxy.h" +#ifndef _WIN32 +#include +#ifndef NOPLUGINS +#include +#endif +#endif + +#ifndef DEFAULTCONFIG +#define DEFAULTCONFIG conf.stringtable[25] +#endif + +pthread_mutex_t bandlim_mutex; +pthread_mutex_t tc_mutex; +pthread_mutex_t pwl_mutex; +pthread_mutex_t hash_mutex; +pthread_mutex_t config_mutex; + +#ifndef NOODBC +pthread_mutex_t odbc_mutex; +#endif + +int haveerror = 0; +int linenum = 0; + +unsigned char tmpbuf[1024]; +FILE *writable; +struct counter_header cheader = {"3CF", (time_t)0}; +struct counter_record crecord; + +int mainfunc (int argc, char** argv); + +struct proxydef childdef = {NULL, 0, 0, S_NOSERVICE, ""}; + +#define STRINGBUF 65535 +#define NPARAMS 4096 + +#ifndef _WIN32 +char *chrootp = NULL; +#endif +char * curconf = NULL; + +FILE * confopen(){ + curconf = conf.conffile; +#ifndef _WIN32 + if(chrootp){ + if(strstr(curconf, chrootp) == curconf) + curconf += strlen(chrootp); + } +#endif + if(writable) { + rewind(writable); + return writable; + } + return fopen(curconf, "r"); +} + + +#ifdef _WIN32 +DWORD WINAPI startsrv(LPVOID data) { +#else +void * startsrv(void * data) { +#endif + struct child *d = (struct child *)data; + mainfunc(d->argc, (char **)d->argv); + return 0; +} + +int included =0; + +int getrotate(char c){ + switch(c){ + case 'c': + case 'C': + return MINUTELY; + case 'h': + case 'H': + return HOURLY; + case 'd': + case 'D': + return DAILY; + case 'w': + case 'W': + return WEEKLY; + case 'y': + case 'Y': + return ANNUALLY; + case 'm': + case 'M': + return MONTHLY; + default: + return NEVER; + } +} + + +unsigned char * dologname (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t) { + struct tm *ts; + + ts = localtime(&t); + if(strchr((char *)name, '%')){ + struct clientparam fakecli; + + memset(&fakecli, 0, sizeof(fakecli)); + dobuf2(&fakecli, buf, NULL, NULL, ts, (char *)name); + } + else switch(lt){ + case NONE: + sprintf((char *)buf, "%s", name); + break; + case ANNUALLY: + sprintf((char *)buf, "%s.%04d", name, ts->tm_year+1900); + break; + case MONTHLY: + sprintf((char *)buf, "%s.%04d.%02d", name, ts->tm_year+1900, ts->tm_mon+1); + break; + case WEEKLY: + t = t - (ts->tm_wday * (60*60*24)); + ts = localtime(&t); + sprintf((char *)buf, "%s.%04d.%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday); + break; + case DAILY: + sprintf((char *)buf, "%s.%04d.%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday); + break; + case HOURLY: + sprintf((char *)buf, "%s.%04d.%02d.%02d-%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday, ts->tm_hour); + break; + case MINUTELY: + sprintf((char *)buf, "%s.%04d.%02d.%02d-%02d.%02d", name, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday, ts->tm_hour, ts->tm_min); + break; + default: + break; + } + if(ext){ + strcat((char *)buf, "."); + strcat((char *)buf, (char *)ext); + } + return buf; +} + +int start_proxy_thread(struct child * chp){ + pthread_t thread; +#ifdef _WIN32 + HANDLE h; +#endif + + conf.threadinit = 1; +#ifdef _WIN32 +#ifndef _WINCE + h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 16384, startsrv, (void *) chp, (DWORD)0, &thread); +#else + h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, 16384, startsrv, (void *) chp, (DWORD)0, &thread); +#endif + if(h)CloseHandle(h); +#else + pthread_attr_init(&pa); + pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + 16384); + pthread_attr_setdetachstate(&pa,PTHREAD_CREATE_DETACHED); + pthread_create(&thread, &pa, startsrv, (void *)chp); +#endif + while(conf.threadinit)usleep(SLEEPTIME); + if(haveerror) { + fprintf(stderr, "Service not started on line: %d\n", linenum); + return(40); + } + return 0; +} + +static int h_proxy(int argc, unsigned char ** argv){ + struct child ch; + + ch.argc = argc; + ch.argv = argv; + if(!strcmp((char *)argv[0], "proxy")) { + childdef.pf = proxychild; + childdef.port = 3128; + childdef.isudp = 0; + childdef.service = S_PROXY; + childdef.helpmessage = " -n - no NTLM support\n"; +#ifdef NOIPV6 + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ + fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, proxy may run very slow\n", linenum); + } +#endif + } + else if(!strcmp((char *)argv[0], "pop3p")) { + childdef.pf = pop3pchild; + childdef.port = 110; + childdef.isudp = 0; + childdef.service = S_POP3P; + childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; + } + else if(!strcmp((char *)argv[0], "smtpp")) { + childdef.pf = smtppchild; + childdef.port = 25; + childdef.isudp = 0; + childdef.service = S_SMTPP; + childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; + } + else if(!strcmp((char *)argv[0], "ftppr")) { + childdef.pf = ftpprchild; + childdef.port = 21; + childdef.isudp = 0; + childdef.service = S_FTPPR; + childdef.helpmessage = " -hdefault_host[:port] - use this host and port as default if no host specified\n"; + } + else if(!strcmp((char *)argv[0], "socks")) { + childdef.pf = sockschild; + childdef.port = 1080; + childdef.isudp = 0; + childdef.service = S_SOCKS; + childdef.helpmessage = " -n - no NTLM support\n"; +#ifdef NOIPV6 + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize)){ + fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, socks may run very slow\n", linenum); + } +#endif + } + else if(!strcmp((char *)argv[0], "tcppm")) { + childdef.pf = tcppmchild; + childdef.port = 0; + childdef.isudp = 0; + childdef.service = S_TCPPM; + childdef.helpmessage = ""; + } + else if(!strcmp((char *)argv[0], "icqpr")) { + childdef.pf = icqprchild; + childdef.port = 0; + childdef.isudp = 0; + childdef.service = S_ICQPR; + childdef.helpmessage = ""; + } +/* + else if(!strcmp((char *)argv[0], "msnpr")) { + childdef.pf = msnprchild; + childdef.port = 0; + childdef.isudp = 0; + childdef.service = S_MSNPR; + childdef.helpmessage = ""; + } +*/ + else if(!strcmp((char *)argv[0], "udppm")) { + childdef.pf = udppmchild; + childdef.port = 0; + childdef.isudp = 1; + childdef.service = S_UDPPM; + childdef.helpmessage = " -s single packet UDP service for request/reply (DNS-like) services\n"; + } + else if(!strcmp((char *)argv[0], "admin")) { + childdef.pf = adminchild; + childdef.port = 80; + childdef.isudp = 0; + childdef.service = S_ADMIN; + } + else if(!strcmp((char *)argv[0], "dnspr")) { + childdef.pf = dnsprchild; + childdef.port = 53; + childdef.isudp = 1; + childdef.service = S_DNSPR; + childdef.helpmessage = " -s - simple DNS forwarding - do not use 3proxy resolver / name cache\n"; +#ifndef NOIPV6 + if(!resolvfunc || (resolvfunc == myresolver && !dns_table.hashsize) || resolvfunc == fakeresolver){ + fprintf(stderr, "[line %d] Warning: no nserver/nscache configured, dnspr will not work as expected\n", linenum); + } +#endif + } + return start_proxy_thread(&ch); +} + +static int h_internal(int argc, unsigned char ** argv){ + getip46(46, argv[1], (struct sockaddr *)&conf.intsa); + return 0; +} + +static int h_external(int argc, unsigned char ** argv){ + int res; +#ifndef NOIPV6 + struct sockaddr_in6 sa6; + res = getip46(46, argv[1], (struct sockaddr *)&sa6); + if(!res) return 1; + memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&conf.extsa:(void *)&conf.extsa6, &sa6, SASIZE(&sa6)); +#else + res = getip46(46, argv[1], (struct sockaddr *)&conf.extsa); + if(!res) return 1; +#endif + return 0; +} + +static int h_log(int argc, unsigned char ** argv){ + conf.logfunc = logstdout; + if(conf.logtarget){ + myfree(conf.logtarget); + conf.logtarget = NULL; + } + if(argc > 1) { + conf.logtarget = (unsigned char *)mystrdup((char *)argv[1]); + if(*argv[1]=='@'){ +#ifndef _WIN32 + openlog((char *)conf.logtarget+1, LOG_PID, LOG_DAEMON); + conf.logfunc = logsyslog; +#endif + } +#ifndef NOODBC + else if(*argv[1]=='&'){ + pthread_mutex_lock(&odbc_mutex); + close_sql(); + init_sql((char *)argv[1]+1); + pthread_mutex_unlock(&odbc_mutex); + conf.logfunc = logsql; + } +#endif + else { + FILE *fp, *fp1; + if(argc > 2) { + conf.logtype = getrotate(*argv[2]); + } + conf.logtime = time(0); + if(conf.logname)myfree(conf.logname); + conf.logname = (unsigned char *)mystrdup((char *)argv[1]); + fp = fopen((char *)dologname (tmpbuf, conf.logname, NULL, conf.logtype, conf.logtime), "a"); + if(!fp){ + perror("fopen()"); + return 1; + } + else { + fp1 = conf.stdlog; + conf.stdlog = fp; + if(fp1) fclose(fp1); +#ifdef _WINCE + freopen(tmpbuf, "w", stdout); + freopen(tmpbuf, "w", stderr); +#endif + } + } + } + return 0; +} + +static int h_service(int argc, unsigned char **argv){ + return 0; +} + +static int h_daemon(int argc, unsigned char **argv){ + if(!conf.demon)daemonize(); + conf.demon = 1; + return 0; +} + +static int h_config(int argc, unsigned char **argv){ + if(conf.conffile)myfree(conf.conffile); + conf.conffile = mystrdup((char *)argv[1]); + return 0; +} + +static int h_include(int argc, unsigned char **argv){ + int res; + FILE *fp1; + + fp1 = fopen((char *)argv[1], "r"); + if(!fp1){ + fprintf(stderr, "Unable to open included file: %s\n", argv[1]); + return 1; + } + res = readconfig(fp1); + fclose(fp1); + return res; +} + +static int h_archiver(int argc, unsigned char **argv){ + int j; + + conf.archiver = myalloc(argc * sizeof(char *)); + if(conf.archiver) { + conf.archiverc = argc; + for(j = 0; j < conf.archiverc; j++) conf.archiver[j] = (unsigned char *)mystrdup((char *)argv[j]); + } + return 0; +} + +static int h_counter(int argc, unsigned char **argv){ + struct counter_header ch1; + if(conf.counterd >=0)close(conf.counterd); + if(!conf.trafcountfunc) conf.trafcountfunc = trafcountfunc; + conf.counterd = open((char *)argv[1], O_BINARY|O_RDWR|O_CREAT, 0660); + if(conf.counterd<0){ + fprintf(stderr, "Unable to open counter file %s, line %d\n", argv[1], linenum); + return 1; + } + if(read(conf.counterd, &ch1, sizeof(ch1))==sizeof(ch1)){ + if(memcmp(&ch1, &cheader, 4)){ + fprintf(stderr, "Not a counter file %s, line %d\n", argv[1], linenum); + return 2; + } +#ifdef _MSC_VER +#ifdef _TIME64_T_DEFINED +#ifndef _MAX__TIME64_T +#define _MAX__TIME64_T 0x793406fffi64 +#endif +#endif + if(ch1.updated >= _MAX__TIME64_T){ + fprintf(stderr, "Invalid or corrupted counter file %s. Use countersutil utility to convert from older version\n", argv[1]); + return 3; + } +#endif + cheader.updated = ch1.updated; + } + if(argc >=4) { + conf.countertype = getrotate(*argv[2]); + if(conf.counterfile) myfree(conf.counterfile); + conf.counterfile = mystrdup((char *)argv[3]); + } + return 0; +} + +static int h_rotate(int argc, unsigned char **argv){ + conf.rotate = atoi((char *)argv[1]); + return 0; +} + +static int h_logformat(int argc, unsigned char **argv){ + if(conf.logformat) myfree(conf.logformat); + conf.logformat = (unsigned char *)mystrdup((char *)argv[1]); + return 0; +} + +static int h_timeouts(int argc, unsigned char **argv){ + int j; + + for(j = 0; conf.timeouts[j] && j + 1 < argc; j++) { + if((conf.timeouts[j] = atoi((char *)argv[j + 1])) <= 0 || conf.timeouts[j] > 2000000){ + fprintf(stderr, "Invalid timeout: %s, line %d\n", argv[j + 1], linenum); + return(1); + } + } + return 0; +} + +static int h_noop(int argc, unsigned char **argv){ + return 0; +} + +static int h_auth(int argc, unsigned char **argv){ + struct auth *au, * newau; + + freeauth(conf.authfuncs); + conf.authfuncs = NULL; + if(!conf.bandlimfunc)conf.bandlimfunc = bandlimitfunc; + for(argc--; argc; argc--){ + for(au = authfuncs; au; au=au->next){ + if(!strcmp((char *)argv[argc], au->desc)){ + newau = myalloc(sizeof(struct auth)); + newau->next = conf.authfuncs; + conf.authfuncs = newau; + conf.authfuncs->desc = au->desc; + conf.authfuncs->authenticate = au->authenticate; + conf.authfuncs->authorize = au->authorize; + break; + } + } + if(!au) return 1; + } + conf.authfunc = doauth; + return 0; +} + +static int h_users(int argc, unsigned char **argv){ + int j; + unsigned char *arg; + struct passwords *pwl = NULL; + + for (j = 1; juser = (unsigned char *)mystrdup((char *)argv[j]); + pwl->pwtype = SYS; + } + else { + *arg = 0; + pwl->user = (unsigned char *)mystrdup((char *)argv[j]); + if((arg[1] == 'C' && arg[2] == 'L' && (pwl->pwtype = CL)) || + (arg[1] == 'C' && arg[2] == 'R' && (pwl->pwtype = CR)) || + (arg[1] == 'N' && arg[2] == 'T' && (pwl->pwtype = NT)) || + (arg[1] == 'L' && arg[2] == 'M' && (pwl->pwtype = LM))){ + pwl->password = (unsigned char *)mystrdup((char *)arg+4); + } + else { + pwl->password = (unsigned char *) mystrdup((char *)arg + 1); + pwl->pwtype = UN; + } + } + pthread_mutex_lock(&pwl_mutex); + pwl->next = conf.pwl; + conf.pwl = pwl; + pthread_mutex_unlock(&pwl_mutex); + + + } + return 0; +} + +static int h_maxconn(int argc, unsigned char **argv){ + conf.maxchild = atoi((char *)argv[1]); + if(!conf.maxchild) { + return(1); + } +#ifndef _WIN32 + { + struct rlimit rl; + if(!getrlimit(RLIMIT_NOFILE, &rl)){ + if((conf.maxchild<<1) > rl.rlim_cur) + fprintf(stderr, "[line %d] Warning: current open file ulimits are too low (cur: %d/max: %d)," + " maxconn requires at least %d for every running service." + " Configure ulimits according to system documentation\n", + linenum, (int)rl.rlim_cur, (int)rl.rlim_max, (conf.maxchild<<1)); + } + } +#endif + return 0; +} + +static int h_flush(int argc, unsigned char **argv){ + freeacl(conf.acl); + conf.acl = NULL; + return 0; +} + +/* +static int h_flushusers(int argc, unsigned char **argv){ + freepwl(conf.pwl); + conf.pwl = NULL; + return 0; +} +*/ + +static int h_nserver(int argc, unsigned char **argv){ + char *str; + + if(numservers < MAXNSERVERS) { + if((str = strchr((char *)argv[1], '/'))) + *str = 0; + if(!getip46(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1; + *SAPORT(&nservers[numservers].addr) = htons(53); + if(str) { + nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0; + *str = '/'; + } + numservers++; + + } + resolvfunc = myresolver; + return 0; +} + +static int h_authnserver(int argc, unsigned char **argv){ + char *str; + + if((str = strchr((char *)argv[1], '/'))) + *str = 0; + if(!getip46(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1; + *SAPORT(&authnserver.addr) = htons(53); + if(str) { + authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; + *str = '/'; + } + return 0; +} + +static int h_fakeresolve(int argc, unsigned char **argv){ + resolvfunc = fakeresolver; + return 0; +} + +static int h_nscache(int argc, unsigned char **argv){ + int res; + + res = atoi((char *)argv[1]); + if(res < 256) { + fprintf(stderr, "Invalid NS cache size: %d\n", res); + return 1; + } + if(inithashtable(&dns_table, (unsigned)res)){ + fprintf(stderr, "Failed to initialize NS cache\n"); + return 2; + } + return 0; +} +static int h_nscache6(int argc, unsigned char **argv){ + int res; + + res = atoi((char *)argv[1]); + if(res < 256) { + fprintf(stderr, "Invalid NS cache size: %d\n", res); + return 1; + } + if(inithashtable(&dns6_table, (unsigned)res)){ + fprintf(stderr, "Failed to initialize NS cache\n"); + return 2; + } + return 0; +} + +static int h_nsrecord(int argc, unsigned char **argv){ +#ifndef NOIPV6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + memset(&sa, 0, sizeof(sa)); + if(!getip46(46, argv[2], (struct sockaddr *)&sa)) return 1; + + hashadd(*SAFAMILY(&sa)==AF_INET6?&dns6_table:&dns_table, argv[1], SAADDR(&sa), (time_t)0xffffffff); + return 0; +} + +static int h_dialer(int argc, unsigned char **argv){ + if(conf.demanddialprog) myfree(conf.demanddialprog); + conf.demanddialprog = mystrdup((char *)argv[1]); + return 0; +} + +static int h_system(int argc, unsigned char **argv){ + int res; + + if((res = system((char *)argv[1])) == -1){ + fprintf(stderr, "Failed to start %s\n", argv[1]); + return(1); + } + return 0; +} + +static int h_pidfile(int argc, unsigned char **argv){ + FILE *pidf; + + if(!(pidf = fopen((char *)argv[1], "w"))){ + fprintf(stderr, "Failed to open pid file %s\n", argv[1]); + return(1); + } + fprintf(pidf,"%u", (unsigned)getpid()); + fclose(pidf); + return 0; +} + +static int h_monitor(int argc, unsigned char **argv){ + struct filemon * fm; + + fm = myalloc(sizeof (struct filemon)); + if(stat((char *)argv[1], &fm->sb)){ + myfree(fm); + fprintf(stderr, "Warning: file %s doesn't exist on line %d\n", argv[1], linenum); + } + else { + fm->path = mystrdup((char *)argv[1]); + fm->next = conf.fmon; + conf.fmon = fm; + } + return 0; +} + +static int h_parent(int argc, unsigned char **argv){ + struct ace *acl = NULL; + struct chain *chains; + + acl = conf.acl; + while(acl && acl->next) acl = acl->next; + if(!acl || (acl->action && acl->action != 2)) { + fprintf(stderr, "Chaining error: last ACL entry was not \"allow\" or \"redirect\" on line %d\n", linenum); + return(1); + } + acl->action = 2; + + chains = NULL; + if(!acl->chains) { + chains = acl->chains = myalloc(sizeof(struct chain)); + } + else { + chains = acl->chains; + while(chains->next)chains = chains->next; + chains->next = myalloc(sizeof(struct chain)); + chains = chains->next; + } + memset(chains, 0, sizeof(struct chain)); + if(!chains){ + fprintf(stderr, "Chainig error: unable to allocate memory for chain\n"); + return(2); + } + chains->weight = (unsigned)atoi((char *)argv[1]); + if(chains->weight == 0 || chains->weight >1000) { + fprintf(stderr, "Chaining error: bad chain weight %u line %d\n", chains->weight, linenum); + return(3); + } + if(!strcmp((char *)argv[2], "tcp"))chains->type = R_TCP; + else if(!strcmp((char *)argv[2], "http"))chains->type = R_HTTP; + else if(!strcmp((char *)argv[2], "connect"))chains->type = R_CONNECT; + else if(!strcmp((char *)argv[2], "socks4"))chains->type = R_SOCKS4; + else if(!strcmp((char *)argv[2], "socks5"))chains->type = R_SOCKS5; + else if(!strcmp((char *)argv[2], "connect+"))chains->type = R_CONNECTP; + else if(!strcmp((char *)argv[2], "socks4+"))chains->type = R_SOCKS4P; + else if(!strcmp((char *)argv[2], "socks5+"))chains->type = R_SOCKS5P; + else if(!strcmp((char *)argv[2], "socks4b"))chains->type = R_SOCKS4B; + else if(!strcmp((char *)argv[2], "socks5b"))chains->type = R_SOCKS5B; + else if(!strcmp((char *)argv[2], "pop3"))chains->type = R_POP3; + else if(!strcmp((char *)argv[2], "ftp"))chains->type = R_FTP; + else if(!strcmp((char *)argv[2], "admin"))chains->type = R_ADMIN; + else if(!strcmp((char *)argv[2], "icq"))chains->type = R_ICQ; + else if(!strcmp((char *)argv[2], "msn"))chains->type = R_MSN; + else { + fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]); + return(4); + } + if(!getip46(46, argv[3], (struct sockaddr *)&chains->addr)) return 5; + *SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4])); + if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]); + if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]); + return 0; + +} + +static int h_nolog(int argc, unsigned char **argv){ + struct ace *acl = NULL; + + acl = conf.acl; + if(!acl) { + fprintf(stderr, "Chaining error: last ACL entry was not \"allow/deny\" on line %d\n", linenum); + return(1); + } + while(acl->next) acl = acl->next; + if(!strcmp(argv[0],"nolog")) acl->nolog = 1; + else acl->weight = atoi((char*)argv[1]); + return 0; +} + +int scanipl(unsigned char *arg, struct iplist *dst){ +#ifndef NOIPV6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + char * slash, *dash; + int masklen, addrlen; + if((slash = strchr(arg, '/'))) *slash = 0; + if((dash = strchr(arg,'-'))) *dash = 0; + + if(!getip46(46, arg, (struct sockaddr *)&sa)) return 1; + memcpy(&dst->ip_from, SAADDR(&sa), SAADDRLEN(&sa)); + dst->family = *SAFAMILY(&sa); + if(dash){ + if(!getip46(46, dash+1, (struct sockaddr *)&sa)) return 2; + memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa)); + if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3; + return 0; + } + memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)); + if(slash){ + addrlen = SAADDRLEN(&sa); + masklen = atoi(slash+1); + if(masklen < 0 || masklen > (addrlen*8)) return 4; + else { + int i, nbytes = masklen / 8, nbits = (8 - (masklen % 8)) % 8; + + for(i = addrlen; i>(nbytes + (nbits > 0)); i--){ + ((unsigned char *)&dst->ip_from)[i-1] = 0x00; + ((unsigned char *)&dst->ip_to)[i-1] = 0xff; + } + for(;nbits;nbits--){ + ((unsigned char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1)); + ((unsigned char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1)); + } + return 0; + } + } + return 0; +} + +struct ace * make_ace (int argc, unsigned char ** argv){ + struct ace * acl; + unsigned char *arg; + struct iplist *ipl=NULL; + struct portlist *portl=NULL; + struct userlist *userl=NULL; + struct hostname *hostnamel=NULL; + int res; + + acl = myalloc(sizeof(struct ace)); + if(!acl) return acl; + memset(acl, 0, sizeof(struct ace)); + if(argc > 0 && strcmp("*", (char *)argv[0])) { + arg = argv[0]; + arg = (unsigned char *)strtok((char *)arg, ","); + do { + if(!acl->users) { + acl->users = userl = myalloc(sizeof(struct userlist)); + } + else { + userl->next = myalloc(sizeof(struct userlist)); + userl = userl -> next; + } + if(!userl) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + memset(userl, 0, sizeof(struct userlist)); + userl->user=(unsigned char*)mystrdup((char *)arg); + } while((arg = (unsigned char *)strtok((char *)NULL, ","))); + } + if(argc > 1 && strcmp("*", (char *)argv[1])) { + arg = (unsigned char *)strtok((char *)argv[1], ","); + do { + if(!acl->src) { + acl->src = ipl = myalloc(sizeof(struct iplist)); + } + else { + ipl->next = myalloc(sizeof(struct iplist)); + ipl = ipl -> next; + } + if(!ipl) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + memset(ipl, 0, sizeof(struct iplist)); + if (scanipl(arg, ipl)) { + fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); + return(NULL); + } + } while((arg = (unsigned char *)strtok((char *)NULL, ","))); + } + if(argc > 2 && strcmp("*", (char *)argv[2])) { + arg = (unsigned char *)strtok((char *)argv[2], ","); + do { + int arglen; + unsigned char *pattern; + + arglen = (int)strlen((char *)arg); + if(arglen > 0 && (arg[arglen-1] < '0' || arg[arglen-1] > '9')){ + if(!acl->dstnames) { + acl->dstnames = hostnamel = myalloc(sizeof(struct hostname)); + } + else { + hostnamel->next = myalloc(sizeof(struct hostname)); + hostnamel = hostnamel -> next; + } + if(!hostnamel){ + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + memset(hostnamel, 0, sizeof(struct hostname)); + hostnamel->matchtype = 3; + pattern = arg; + if(pattern[arglen-1] == '*'){ + arglen --; + pattern[arglen] = 0; + hostnamel->matchtype ^= MATCHEND; + } + if(pattern[0] == '*'){ + pattern++; + arglen--; + hostnamel->matchtype ^= MATCHBEGIN; + } + hostnamel->name = (unsigned char *) mystrdup( (char *)pattern); + if(!hostnamel->name) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + } + else { + + if(!acl->dst) { + acl->dst = ipl = myalloc(sizeof(struct iplist)); + } + else { + ipl->next = myalloc(sizeof(struct iplist)); + ipl = ipl -> next; + } + if(!ipl) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + memset(ipl, 0, sizeof(struct iplist)); + if (scanipl(arg, ipl)) { + fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); + return(NULL); + } + } + }while((arg = (unsigned char *)strtok((char *)NULL, ","))); + } + if(argc > 3 && strcmp("*", (char *)argv[3])) { + arg = (unsigned char *)strtok((char *)argv[3], ","); + do { + if(!acl->ports) { + acl->ports = portl = myalloc(sizeof(struct portlist)); + } + else { + portl->next = myalloc(sizeof(struct portlist)); + portl = portl -> next; + } + if(!portl) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(NULL); + } + memset(portl, 0, sizeof(struct portlist)); + res = sscanf((char *)arg, "%hu-%hu", &portl->startport, &portl->endport); + if(res < 1) { + fprintf(stderr, "Invalid port or port range, line %d\n", linenum); + return(NULL); + } + if (res == 1) portl->endport = portl->startport; + } while((arg = (unsigned char *)strtok((char *)NULL, ","))); + } + if(argc > 4 && strcmp("*", (char *)argv[4])) { + arg = (unsigned char *)strtok((char *)argv[4], ","); + do { + if(!strcmp((char *)arg, "CONNECT")){ + acl->operation |= CONNECT; + } + else if(!strcmp((char *)arg, "BIND")){ + acl->operation |= BIND; + } + else if(!strcmp((char *)arg, "UDPASSOC")){ + acl->operation |= UDPASSOC; + } + else if(!strcmp((char *)arg, "ICMPASSOC")){ + acl->operation |= ICMPASSOC; + } + else if(!strcmp((char *)arg, "HTTP_GET")){ + acl->operation |= HTTP_GET; + } + else if(!strcmp((char *)arg, "HTTP_PUT")){ + acl->operation |= HTTP_PUT; + } + else if(!strcmp((char *)arg, "HTTP_POST")){ + acl->operation |= HTTP_POST; + } + else if(!strcmp((char *)arg, "HTTP_HEAD")){ + acl->operation |= HTTP_HEAD; + } + else if(!strcmp((char *)arg, "HTTP_OTHER")){ + acl->operation |= HTTP_OTHER; + } + else if(!strcmp((char *)arg, "HTTP_CONNECT")){ + acl->operation |= HTTP_CONNECT; + } + else if(!strcmp((char *)arg, "HTTP")){ + acl->operation |= HTTP; + } + else if(!strcmp((char *)arg, "HTTPS")){ + acl->operation |= HTTPS; + } + else if(!strcmp((char *)arg, "FTP_GET")){ + acl->operation |= FTP_GET; + } + else if(!strcmp((char *)arg, "FTP_PUT")){ + acl->operation |= FTP_PUT; + } + else if(!strcmp((char *)arg, "FTP_LIST")){ + acl->operation |= FTP_LIST; + } + else if(!strcmp((char *)arg, "FTP_DATA")){ + acl->operation |= FTP_DATA; + } + else if(!strcmp((char *)arg, "FTP")){ + acl->operation |= FTP; + } + else if(!strcmp((char *)arg, "ADMIN")){ + acl->operation |= ADMIN; + } + else if(!strcmp((char *)arg, "DNSRESOLVE")){ + acl->operation |= DNSRESOLVE; + } + else if(!strcmp((char *)arg, "ICQ")){ + acl->operation |= IM_ICQ; + } + else { + fprintf(stderr, "Unknown operation type: %s line %d\n", arg, linenum); + return(NULL); + } + } while((arg = (unsigned char *)strtok((char *)NULL, ","))); + } + if(argc > 5){ + for(arg = argv[5]; *arg;){ + int val, val1; + + if(!isnumber(*arg)){ + arg++; + continue; + } + val1 = val = (*arg - '0'); + arg++; + if(*arg == '-' && isnumber(*(arg+1)) && (*(arg+1) - '0') > val) { + val1 = (*(arg+1) - '0'); + arg+=2; + } + for(; val<=val1; val++) acl->wdays |= (1 << (val % 7)); + } + + } + if(argc > 6){ + for(arg = argv[6]; strlen((char *)arg) >= 17 && + isdigit(arg[0]) && + isdigit(arg[1]) && + isdigit(arg[3]) && + isdigit(arg[4]) && + isdigit(arg[6]) && + isdigit(arg[7]) && + isdigit(arg[9]) && + isdigit(arg[10]) && + isdigit(arg[12]) && + isdigit(arg[13]) && + isdigit(arg[15]) && + isdigit(arg[16]) + ; arg+=18){ + + int t1, t2; + struct period *sp; + + t1 = (arg[0] - '0') * 10 + (arg[1] - '0'); + t1 = (t1 * 60) + (arg[3] - '0') * 10 + (arg[4] - '0'); + t1 = (t1 * 60) + (arg[6] - '0') * 10 + (arg[7] - '0'); + t2 = (arg[9] - '0') * 10 + (arg[10] - '0'); + t2 = (t2 * 60) + (arg[12] - '0') * 10 + (arg[13] - '0'); + t2 = (t2 * 60) + (arg[15] - '0') * 10 + (arg[16] - '0'); + if(t2 < t1) break; + sp = myalloc(sizeof(struct period)); + if(sp){ + sp->fromtime = t1; + sp->totime = t2; + sp->next = acl->periods; + acl->periods = sp; + } + if(arg[17]!=',') break; + } + } + if (argc > 7){ + acl->weight = atoi((char *)argv[7]); + } + + return acl; +} + + +static int h_ace(int argc, unsigned char **argv){ + int res = 0; + int offset = 0; + struct ace *acl = NULL; + struct bandlim * nbl; + struct trafcount * tl; + + if(!strcmp((char *)argv[0], "allow")){ + res = ALLOW; + } + else if(!strcmp((char *)argv[0], "deny")){ + res = DENY; + } + else if(!strcmp((char *)argv[0], "redirect")){ + res = REDIRECT; + offset = 2; + } + else if(!strcmp((char *)argv[0], "bandlimin")||!strcmp((char *)argv[0], "bandlimout")){ + res = BANDLIM; + offset = 1; + } + else if(!strcmp((char *)argv[0], "nobandlimin")||!strcmp((char *)argv[0], "nobandlimout")){ + res = NOBANDLIM; + } + else if(!strcmp((char *)argv[0], "countin")){ + res = COUNTIN; + offset = 3; + } + else if(!strcmp((char *)argv[0], "nocountin")){ + res = NOCOUNTIN; + } + else if(!strcmp((char *)argv[0], "countout")){ + res = COUNTOUT; + offset = 3; + } + else if(!strcmp((char *)argv[0], "nocountout")){ + res = NOCOUNTOUT; + } + acl = make_ace(argc - (offset+1), argv + (offset + 1)); + if(!acl) { + fprintf(stderr, "Unable to parse ACL entry, line %d\n", linenum); + return(1); + } + acl->action = res; + switch(acl->action){ + case REDIRECT: + acl->chains = myalloc(sizeof(struct chain)); + memset(acl->chains, 0, sizeof(struct chain)); + if(!acl->chains) { + fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + return(2); + } + acl->chains->type = R_HTTP; + if(!getip46(46, argv[1], (struct sockaddr *)&acl->chains->addr)) return 5; + *SAPORT(&acl->chains->addr) = htons((unsigned short)atoi((char *)argv[2])); + acl->chains->weight = 1000; + acl->chains->extuser = NULL; + acl->chains->extpass = NULL; + acl->chains->next = NULL; + case ALLOW: + case DENY: + if(!conf.acl){ + conf.acl = acl; + } + else { + struct ace * acei; + + for(acei = conf.acl; acei->next; acei = acei->next); + acei->next = acl; + } + break; + case BANDLIM: + case NOBANDLIM: + + nbl = myalloc(sizeof(struct bandlim)); + if(!nbl) { + fprintf(stderr, "No memory to create band limit filter\n"); + return(3); + } + memset(nbl, 0, sizeof(struct bandlim)); + nbl->ace = acl; + if(acl->action == BANDLIM) { + sscanf((char *)argv[1], "%u", &nbl->rate); + if(nbl->rate < 300) { + fprintf(stderr, "Wrong bandwidth specified, line %d\n", linenum); + return(4); + } + } + pthread_mutex_lock(&bandlim_mutex); + if(!strcmp((char *)argv[0], "bandlimin") || !strcmp((char *)argv[0], "nobandlimin")){ + if(!conf.bandlimiter){ + conf.bandlimiter = nbl; + } + else { + struct bandlim * bli; + + for(bli = conf.bandlimiter; bli->next; bli = bli->next); + bli->next = nbl; + } + } + else { + if(!conf.bandlimiterout){ + conf.bandlimiterout = nbl; + } + else { + struct bandlim * bli; + + for(bli = conf.bandlimiterout; bli->next; bli = bli->next); + bli->next = nbl; + } + } + + pthread_mutex_unlock(&bandlim_mutex); + break; + + case COUNTIN: + case NOCOUNTIN: + case COUNTOUT: + case NOCOUNTOUT: + tl = myalloc(sizeof(struct trafcount)); + if(!tl) { + fprintf(stderr, "No memory to create traffic limit filter\n"); + return(5); + } + memset(tl, 0, sizeof(struct trafcount)); + tl->ace = acl; + + if((acl->action == COUNTIN)||(acl->action == COUNTOUT)) { + unsigned long lim; + + tl->comment = ( char *)argv[1]; + while(isdigit(*tl->comment))tl->comment++; + if(*tl->comment== '/')tl->comment++; + tl->comment = mystrdup(tl->comment); + + sscanf((char *)argv[1], "%u", &tl->number); + sscanf((char *)argv[3], "%lu", &lim); + tl->type = getrotate(*argv[2]); + tl->traflim64 = ((uint64_t)lim)*(1024*1024); + if(!tl->traflim64) { + fprintf(stderr, "Wrong traffic limit specified, line %d\n", linenum); + return(6); + } + if(tl->number != 0 && conf.counterd >= 0) { + lseek(conf.counterd, + sizeof(struct counter_header) + (tl->number - 1) * sizeof(struct counter_record), + SEEK_SET); + memset(&crecord, 0, sizeof(struct counter_record)); + read(conf.counterd, &crecord, sizeof(struct counter_record)); + tl->traf64 = crecord.traf64; + tl->cleared = crecord.cleared; + tl->updated = crecord.updated; +#ifdef _MAX__TIME64_T + if(tl->cleared >= _MAX__TIME64_T || tl->updated >= _MAX__TIME64_T){ + fprintf(stderr, "Invalid or corrupted counter file. Use countersutil utility to convert from older version\n"); + return(6); + } +#endif + } + } + pthread_mutex_lock(&tc_mutex); + if(!conf.trafcounter){ + conf.trafcounter = tl; + } + else { + struct trafcount * ntl; + + for(ntl = conf.trafcounter; ntl->next; ntl = ntl->next); + ntl->next = tl; + } + pthread_mutex_unlock(&tc_mutex); + + } + return 0; +} + +static int h_logdump(int argc, unsigned char **argv){ + conf.logdumpsrv = (unsigned) atoi((char *) *(argv + 1)); + if(argc > 2) conf.logdumpcli = (unsigned) atoi((char *) *(argv + 2)); + return 0; +} + + +static int h_filtermaxsize(int argc, unsigned char **argv){ + conf.filtermaxsize = atoi((char *) *(argv + 1)); + return 0; +} + +static int h_delimchar(int argc, unsigned char **argv){ + conf.delimchar = *argv[1]; + return 0; +} + +static int h_authcache(int argc, unsigned char **argv){ + conf.authcachetype = 0; + if(strstr((char *) *(argv + 1), "ip")) conf.authcachetype |= 1; + if(strstr((char *) *(argv + 1), "user")) conf.authcachetype |= 2; + if(strstr((char *) *(argv + 1), "pass")) conf.authcachetype |= 4; + if(argc > 2) conf.authcachetime = (unsigned) atoi((char *) *(argv + 2)); + if(!conf.authcachetype) conf.authcachetype = 6; + if(!conf.authcachetime) conf.authcachetime = 600; + return 0; +} + +static int h_plugin(int argc, unsigned char **argv){ +#ifdef NOPLUGINS + return 999; +#else +#ifdef _WIN32 + HINSTANCE hi; + FARPROC fp; + +#ifdef _WINCE + hi = LoadLibraryW((LPCWSTR)CEToUnicode(argv[1])); +#else + hi = LoadLibrary(argv[1]); +#endif + if(!hi) { + fprintf(stderr, "Failed to load %s, code %d\n", argv[1], (int)GetLastError()); + return 1; + } +#ifdef _WINCE + fp = GetProcAddressW(hi, (LPCWSTR)CEToUnicode(argv[2])); +#else + fp = GetProcAddress(hi, argv[2]); +#endif + if(!fp) { + printf("%s not found in %s, code: %d\n", argv[2], argv[1], (int)GetLastError()); + return 2; + } + return (*(PLUGINFUNC)fp)(&pluginlink, argc - 2, (char **)argv + 2); +#else + void *hi, *fp; + hi = dlopen((char *)argv[1], RTLD_LAZY); + if(!hi) return 1; + fp = dlsym(hi, (char *)argv[2]); + if(!fp) return 2; + return (*(PLUGINFUNC)fp)(&pluginlink, argc - 2, (char **)argv + 2); +#endif +#endif +} + +#ifndef _WIN32 +static int h_setuid(int argc, unsigned char **argv){ + int res; + res = atoi((char *)argv[1]); + if(!res || setuid(res)) { + fprintf(stderr, "Unable to set uid %d", res); + return(1); + } + return 0; +} + +static int h_setgid(int argc, unsigned char **argv){ + int res; + + res = atoi((char *)argv[1]); + if(!res || setgid(res)) { + fprintf(stderr, "Unable to set gid %d", res); + return(1); + } + return 0; +} + + +static int h_chroot(int argc, unsigned char **argv){ + if(!chrootp){ + char *p; + if(chroot((char *)argv[1])) { + fprintf(stderr, "Unable to chroot %s", argv[1]); + return(1); + } + p = (char *)argv[1] + strlen((char *)argv[1]) ; + while (p > (char *)argv[1] && p[-1] == '/'){ + p--; + *p = 0; + } + chrootp = mystrdup((char *)argv[1]); + } + return 0; +} +#endif + + +struct commands specificcommands[]={ +#ifndef _WIN32 + {specificcommands+1, "setuid", h_setuid, 2, 2}, + {specificcommands+2, "setgid", h_setgid, 2, 2}, + {specificcommands+3, "chroot", h_chroot, 2, 2}, +#endif + {NULL, "", h_noop, 1, 0} +}; + +struct commands commandhandlers[]={ + {commandhandlers+1, "", h_noop, 1, 0}, + {commandhandlers+2, "proxy", h_proxy, 1, 0}, + {commandhandlers+3, "pop3p", h_proxy, 1, 0}, + {commandhandlers+4, "ftppr", h_proxy, 1, 0}, + {commandhandlers+5, "socks", h_proxy, 1, 0}, + {commandhandlers+6, "tcppm", h_proxy, 4, 0}, + {commandhandlers+7, "udppm", h_proxy, 4, 0}, + {commandhandlers+8, "admin", h_proxy, 1, 0}, + {commandhandlers+9, "dnspr", h_proxy, 1, 0}, + {commandhandlers+10, "internal", h_internal, 2, 2}, + {commandhandlers+11, "external", h_external, 2, 2}, + {commandhandlers+12, "log", h_log, 1, 0}, + {commandhandlers+13, "service", h_service, 1, 1}, + {commandhandlers+14, "daemon", h_daemon, 1, 1}, + {commandhandlers+15, "config", h_config, 2, 2}, + {commandhandlers+16, "include", h_include, 2, 2}, + {commandhandlers+17, "archiver", h_archiver, 3, 0}, + {commandhandlers+18, "counter", h_counter, 2, 4}, + {commandhandlers+19, "rotate", h_rotate, 2, 2}, + {commandhandlers+20, "logformat", h_logformat, 2, 2}, + {commandhandlers+21, "timeouts", h_timeouts, 2, 0}, + {commandhandlers+22, "auth", h_auth, 2, 0}, + {commandhandlers+23, "users", h_users, 2, 0}, + {commandhandlers+24, "maxconn", h_maxconn, 2, 2}, + {commandhandlers+25, "flush", h_flush, 1, 1}, + {commandhandlers+26, "nserver", h_nserver, 2, 2}, + {commandhandlers+27, "fakeresolve", h_fakeresolve, 1, 1}, + {commandhandlers+28, "nscache", h_nscache, 2, 2}, + {commandhandlers+29, "nscache6", h_nscache6, 2, 2}, + {commandhandlers+30, "nsrecord", h_nsrecord, 3, 3}, + {commandhandlers+31, "dialer", h_dialer, 2, 2}, + {commandhandlers+32, "system", h_system, 2, 2}, + {commandhandlers+33, "pidfile", h_pidfile, 2, 2}, + {commandhandlers+34, "monitor", h_monitor, 2, 2}, + {commandhandlers+35, "parent", h_parent, 5, 0}, + {commandhandlers+36, "allow", h_ace, 1, 0}, + {commandhandlers+37, "deny", h_ace, 1, 0}, + {commandhandlers+38, "redirect", h_ace, 3, 0}, + {commandhandlers+39, "bandlimin", h_ace, 2, 0}, + {commandhandlers+40, "bandlimout", h_ace, 2, 0}, + {commandhandlers+41, "nobandlimin", h_ace, 1, 0}, + {commandhandlers+42, "nobandlimout", h_ace, 1, 0}, + {commandhandlers+43, "countin", h_ace, 4, 0}, + {commandhandlers+44, "nocountin", h_ace, 1, 0}, + {commandhandlers+45, "countout", h_ace, 4, 0}, + {commandhandlers+46, "nocountout", h_ace, 1, 0}, + {commandhandlers+47, "plugin", h_plugin, 3, 0}, + {commandhandlers+48, "logdump", h_logdump, 2, 3}, + {commandhandlers+49, "filtermaxsize", h_filtermaxsize, 2, 2}, + {commandhandlers+50, "nolog", h_nolog, 1, 1}, + {commandhandlers+51, "weight", h_nolog, 2, 2}, + {commandhandlers+52, "authcache", h_authcache, 2, 3}, + {commandhandlers+53, "smtpp", h_proxy, 1, 0}, + {commandhandlers+54, "icqpr", h_proxy, 4, 0}, + {commandhandlers+55, "msnpr", h_proxy, 4, 0}, + {commandhandlers+56, "delimchar",h_delimchar, 2, 2}, + {commandhandlers+57, "authnserver", h_authnserver, 2, 2}, + {specificcommands, "", h_noop, 1, 0} +}; + +int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize){ +#define buf (*buff) + int argc = 0; + int space = 1; + int comment = 0; + unsigned char * incbegin = 0; + int fd; + int res, len; + int i = 1; + unsigned char *str1; + + for(;;str++){ + if(*str == '\"'){ + str1 = str; + do { + *str1 = *(str1 + 1); + }while(*(str1++)); + if(!comment || *str != '\"'){ + comment = !comment; + } + } + switch(*str){ + case '\0': + if(comment) return -1; + argm[argc] = 0; + return argc; + case '$': + if(!comment && !included){ + incbegin = str; + *str = 0; + } + break; + case '\r': + case '\n': + case '\t': + case ' ': + if(!comment){ + *str = 0; + space = 1; + i = 0; + if(incbegin){ + argc--; + if((fd = open((char *)incbegin+1, O_RDONLY)) <= 0){ + fprintf(stderr, "Failed to open %s\n", incbegin+1); + break; + } + if((*bufsize - *inbuf) = nitems) return argc; + space = 0; + } + } + } +#undef buf +} + + +int readconfig(FILE * fp){ + unsigned char ** argv = NULL; + unsigned char * buf = NULL; + int bufsize = STRINGBUF*2; + int inbuf = 0; + int argc; + struct commands * cm; + int res = 0; + + if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(unsigned char *))) ) { + fprintf(stderr, "No memory for configuration"); + return(10); + } + for (linenum = 1; fgets((char *)buf, STRINGBUF, fp); linenum++){ + if(!*buf || isspace(*buf) || (*buf) == '#')continue; + + inbuf = (int)(strlen((char *)buf) + 1); + argc = parsestr (buf, argv, NPARAMS-1, &buf, &inbuf, &bufsize); + if(argc < 1) { + fprintf(stderr, "Parse error line %d\n", linenum); + return(21); + } + argv[argc] = NULL; + if(!strcmp((char *)argv[0], "end") && argc == 1) { + break; + } + else if(!strcmp((char *)argv[0], "writable") && argc == 1) { + if(!writable){ + writable = freopen(curconf, "r+", fp); + if(!writable){ + fprintf(stderr, "Unable to reopen config for writing: %s\n", curconf); + return 1; + } + } + continue; + } + + res = 1; + for(cm = commandhandlers; cm; cm = cm->next){ + if(!strcmp((char *)argv[0], (char *)cm->command) && argc >= cm->minargs && (!cm->maxargs || argc <= cm->maxargs)){ + res = (*cm->handler)(argc, argv); + if(res > 0){ + fprintf(stderr, "Command: '%s' failed with code %d, line %d\n", argv[0], res, linenum); + return(linenum); + } + if(!res) break; + } + } + if(res != 1)continue; + fprintf(stderr, "Unknown command: '%s' line %d\n", argv[0], linenum); + return(linenum); + } + myfree(buf); + myfree(argv); + return 0; + +} + + + +void freepwl(struct passwords *pwl){ + for(; pwl; pwl = (struct passwords *)itfree(pwl, pwl->next)){ + if(pwl->user)myfree(pwl->user); + if(pwl->password)myfree(pwl->password); + } +} + + +void freeconf(struct extparam *confp){ + struct bandlim * bl; + struct bandlim * blout; + struct trafcount * tc; + struct passwords *pw; + struct ace *acl; + struct filemon *fm; + int counterd, archiverc; + unsigned char *logname, *logtarget; + unsigned char **archiver; + unsigned char * logformat; + + int i; + + + + + pthread_mutex_lock(&tc_mutex); + confp->trafcountfunc = NULL; + tc = confp->trafcounter; + confp->trafcounter = NULL; + counterd = confp->counterd; + confp->counterd = -1; + confp->countertype = NONE; + pthread_mutex_unlock(&tc_mutex); + + pthread_mutex_lock(&bandlim_mutex); + bl = confp->bandlimiter; + blout = confp->bandlimiterout; + confp->bandlimiter = NULL; + confp->bandlimiterout = NULL; + confp->bandlimfunc = NULL; + pthread_mutex_unlock(&bandlim_mutex); + + pthread_mutex_lock(&pwl_mutex); + pw = confp->pwl; + confp->pwl = NULL; + pthread_mutex_unlock(&pwl_mutex); + + + logtarget = confp->logtarget; + confp->logtarget = NULL; + logformat = confp->logformat; + confp->logformat = NULL; + logname = confp->logname; + confp->logname = NULL; + confp->rotate = 0; + confp->logtype = NONE; + + archiverc = confp->archiverc; + confp->archiverc = 0; + archiver = confp->archiver; + confp->archiver = NULL; + fm = confp->fmon; + confp->fmon = NULL; + confp->bandlimfunc = NULL; + memset(&confp->intsa, 0, sizeof(confp->intsa)); + memset(&confp->extsa, 0, sizeof(confp->extsa)); +#ifndef NOIPV6 + memset(&confp->extsa6, 0, sizeof(confp->extsa6)); + *SAFAMILY(&confp->extsa6) = AF_INET6; +#endif + *SAFAMILY(&confp->intsa) = AF_INET; + *SAFAMILY(&confp->extsa) = AF_INET; + confp->singlepacket = 0; + confp->maxchild = 100; + resolvfunc = NULL; + numservers = 0; + acl = confp->acl; + confp->acl = NULL; + confp->logtime = confp->time = 0; + + usleep(SLEEPTIME); + + { + char * args[] = {"auth", "iponly", NULL}; + h_auth(2, (unsigned char **)args); + } + if(tc)dumpcounters(tc,counterd); + for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){ + if(tc->comment)myfree(tc->comment); + freeacl(tc->ace); + } + + + freeacl(acl); + freepwl(pw); + for(; bl; bl = (struct bandlim *) itfree(bl, bl->next)) freeacl(bl->ace); + for(; blout; blout = (struct bandlim *) itfree(blout, blout->next))freeacl(blout->ace); + + if(counterd != -1) { + close(counterd); + } + for(; fm; fm = (struct filemon *)itfree(fm, fm->next)){ + if(fm->path) myfree(fm->path); + } + if(logtarget) { + myfree(logtarget); + } + if(logname) { + myfree(logname); + } + if(logformat) { + myfree(logformat); + } + if(archiver) { + for(i = 0; i < archiverc; i++) myfree(archiver[i]); + myfree(archiver); + } + +} + +int reload (void){ + FILE *fp; + int error = -2; + + conf.paused++; + freeconf(&conf); + conf.paused++; + + fp = confopen(); + if(fp){ + error = readconfig(fp); + if(error) { + freeconf(&conf); + } + if(!writable)fclose(fp); + } + return error; +} diff --git a/src/countersutil.c b/src/countersutil.c deleted file mode 100644 index 543fb3e..0000000 --- a/src/countersutil.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - 3APA3A simpliest proxy server - (c) 2002-2008 by ZARAZA <3APA3A@security.nnov.ru> - - please read License Agreement - -*/ - -#include "proxy.h" - -struct counter_header { - unsigned char sig[4]; - time_t updated; -} cheader = {"3CF", (time_t)0}; - - -struct counter_record { - unsigned long traf; - unsigned long trafgb; - time_t cleared; - time_t updated; -} crecord; - -#ifdef _WIN32 -struct counter_header_old { - unsigned char sig[4]; - DWORD updated; -} cheader_old = {"3CF", (time_t)0}; - - -struct counter_record_old { - unsigned long traf; - unsigned long trafgb; - DWORD cleared; - DWORD updated; -} crecord_old; -#endif - -int main(int argc, char *argv[]){ - FILE *txt; - int bin; - int i; - long unsigned lu1, lu2; - char buf[256]; - if(argc!=4){ - fprintf(stderr, "Usage: %s command binary_file text_file\n" - " commands are:\n" - "\texport - dump counterfile to text\n" -#ifdef _WIN32 - "\toldexport - export counterfile from older 3proxy version\n" -#endif - "\timport- import counterfile from text\n" - "Examples:\n" -#ifdef _WIN32 - " %s oldexport counterfile.3cf tmpfile\n" -#else - " %s export counterfilenew.3cf tmpfile\n" -#endif - " %s import counterfilenew.3cf tmpfile\n" - "text file record format:\n" - "%%d %%10lu %%10lu %%lu %%lu\n" - " 1 - counter number\n" - " 2 - traffic (Bytes)\n" - " 3 - traffic (GB)\n" - " 4 - time counter reset (time_t)\n" - " 5 - time counter updated (time_t)\n" - ,argv[0] , argv[0], argv[0]); - return 1; - } - if(!strcmp(argv[1], "export")){ - bin = open((char *)argv[2], O_BINARY|O_RDONLY, 0660); - if(bin < 0){ - fprintf(stderr, "Failed to open %s\n", argv[2]); - return 2; - } - if(read(bin, &cheader, sizeof(cheader)) != sizeof(cheader) || - memcmp(&cheader, "3CF", 4)){ - fprintf(stderr, "Invalid counter file\n"); - return 3; - } - txt = fopen(argv[3], "w"); - if(!txt) txt = stdout; - for(i=1; read(bin, &crecord, sizeof(crecord))==sizeof(crecord); i++) - fprintf(txt,"%d %10lu %10lu %lu %lu\n", i, - crecord.trafgb, - crecord.traf, - (unsigned long) crecord.cleared, - (unsigned long) crecord.updated); - } -#ifdef _WIN32 - else if(!strcmp(argv[1], "oldexport")){ - bin = open((char *)argv[2], O_BINARY|O_RDONLY, 0660); - if(bin < 0){ - fprintf(stderr, "Failed to open %s\n", argv[2]); - return 2; - } - if(read(bin, &cheader_old, sizeof(cheader_old)) != sizeof(cheader_old) || - memcmp(&cheader, "3CF", 4)){ - fprintf(stderr, "Invalid counter file\n"); - return 3; - } - txt = fopen(argv[3], "w"); - if(!txt) txt = stdout; - for(i=1; read(bin, &crecord_old, sizeof(crecord_old))==sizeof(crecord_old); i++) - fprintf(txt, "%d %10lu %10lu %lu %lu\n", i, - crecord_old.trafgb, - crecord_old.traf, - (unsigned long) crecord_old.cleared, - (unsigned long) crecord_old.updated); - } -#endif - else if(!strcmp(argv[1], "import")){ - bin = open((char *)argv[2], O_BINARY|O_WRONLY|O_CREAT|O_EXCL, 0660); - if(bin < 0){ - fprintf(stderr, "Failed to open %s\n", argv[2]); - return 2; - } - txt = fopen(argv[3], "r"); - if(!txt) { - fprintf(stderr, "Failed to open %s\n", argv[3]); - return 3; - } - cheader.updated = time(0); - write(bin, &cheader, sizeof(cheader)); - while(fgets(buf, 256, txt) && - sscanf(buf, "%d %10lu %10lu %lu %lu\n", - &i, &crecord.trafgb, &crecord.traf, - &lu1, &lu2) == 5){ - - crecord.cleared = (time_t) lu1; - crecord.updated = (time_t) lu1; - lseek(bin, - sizeof(struct counter_header) + (i-1) * sizeof(crecord), - SEEK_SET); - write(bin, &crecord, sizeof(crecord)); - - } - } - else { - fprintf(stderr, "Unknown command: %s\n", argv[1]); - return 5; - } - return 0; -} diff --git a/src/msnpr.c b/src/msnpr.c deleted file mode 100644 index 92ea54c..0000000 --- a/src/msnpr.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - 3APA3A simpliest proxy server - (c) 2002-2008 by ZARAZA <3APA3A@security.nnov.ru> - - please read License Agreement - -*/ - -#include "proxy.h" - -#ifndef PORTMAP -#define PORTMAP -#endif -#define RETURN(xxx) { param->res = xxx; goto CLEANRET; } - -struct msn_cookie { - struct msn_cookie *next; - unsigned char *userid; - char * connectstring; -}; - -static struct msn_cookie *msn_cookies = NULL; -pthread_mutex_t msn_cookie_mutex; -int msn_cookie_mutex_init = 0; - -static void msn_clear(void *fo){ -}; - -static FILTER_ACTION msn_srv(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){ - unsigned char *data = *buf_p + offset; - int len = (int)(*length_p - offset); - struct sockaddr_in sa; - SASIZETYPE size = sizeof(sa); - struct msn_cookie *cookie; - char tmpbuf[256]; - char *sp1, *sp2, *sp3; - - - if(*bufsize_p - *length_p < 32) return CONTINUE; - if(len < 10 || len > 220) return CONTINUE; - - data[len] = 0; - - - sp1 = data + 3; - if(data[0] == 'X' && data[1] == 'F' && data[2] == 'R' && data[3] == ' '){ - if(!(sp2 = strchr(sp1 + 1, ' ')) || !(sp2 = strchr(sp2 + 1, ' '))|| !(sp3 = strchr(sp2 + 1, ' '))) return CONTINUE; - } - else if(data[0] == 'R' && data[1] == 'N' && data[2] == 'G' && data[3] == ' '){ - if(!(sp2 = strchr(sp1 + 1, ' ')) || !(sp3 = strchr(sp2 + 1, ' '))) return CONTINUE; - } - else return CONTINUE; - - *sp2 = 0; - *sp3 = 0; - if(getsockname(param->clisock, (struct sockaddr *)&sa, &size)==-1) { - return CONTINUE; - }; - cookie = myalloc(sizeof(struct msn_cookie)); - cookie->connectstring = mystrdup(sp2 + 1); - cookie->userid = mystrdup(param->username); - - pthread_mutex_lock(&msn_cookie_mutex); - cookie->next = msn_cookies; - msn_cookies = cookie; - pthread_mutex_unlock(&msn_cookie_mutex); - - strcpy(tmpbuf, data); - len = (int)strlen(tmpbuf); - tmpbuf[len++] = ' '; - - len+=myinet_ntop(*SAFAMILY(&sa), SAADDR(&sa), tmpbuf+len, 64); - sprintf(tmpbuf+len, ":%hu %s", ntohs(sa.sin_port), sp3 + 1); - len = (int)strlen(tmpbuf); - memcpy(*buf_p + offset, tmpbuf, len); - *length_p = offset + len; - - return CONTINUE; -} - - -static struct filter msnfilter = { - NULL, - "msnfilter", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - *msn_srv, - *msn_clear, - NULL -}; - - -void * msnprchild(struct clientparam* param) { - int res, len; - unsigned char *buf; - int buflen = 256; - char *sp1, *sp2, *sp3; - char *verstr = NULL; - int id; - struct msn_cookie *cookie, *prevcookie=NULL; - int sec = 0; - struct filterp **newfilters; - int skip = 0; - struct filterp msnfilterp = { - &msnfilter, - (void *)&skip - }; - - - if(!msn_cookie_mutex_init){ - msn_cookie_mutex_init = 1; - pthread_mutex_init(&msn_cookie_mutex, NULL); - } - - buf = myalloc(buflen); - res = sockgetlinebuf(param, CLIENT, buf, 240, '\n', conf.timeouts[STRING_S]); - if(res < 10) RETURN(1201); - buf[res] = 0; - if(!(sp1 = strchr(buf, ' ')) || !(sp2 = strchr(sp1 + 1, ' ')) || !(sp3 = strchr(sp2 + 1, ' ')) || ((int)(sp3-sp2)) < 6) RETURN(1202); - if((buf[0] == 'U' && buf[1] == 'S' && buf[2] == 'R') || - (buf[0] == 'A' && buf[1] == 'N' && buf[2] == 'S')){ - len = 1 + (int)(sp3 - sp2); - param->username = myalloc(len - 1); - memcpy(param->username, sp2 + 1, len - 2); - sec = 1; - - } - else if(buf[0] != 'V' || buf[1] != 'E' || buf[2] != 'R') {RETURN(1203);} - else { - id = atoi(sp1 + 1); - verstr = mystrdup(buf); - - if(socksend(param->clisock, buf, res, conf.timeouts[STRING_S])!=res) {RETURN (1204);} - - res = sockgetlinebuf(param, CLIENT, buf, 240, '\n', conf.timeouts[STRING_S]); - if(res < 10) RETURN(1205); - buf[res] = 0; - if(buf[0] != 'C' || buf[1] != 'V' || buf[2] != 'R' || !(sp1=strrchr(buf,' ')) || (len = (int)strlen(sp1+1)) < 3) RETURN(1206); - param->username = myalloc(len - 1); - memcpy(param->username, sp1 + 1, len - 2); - } - param->username[len - 2] = 0; - param->operation = CONNECT; - - pthread_mutex_lock(&msn_cookie_mutex); - for(cookie = msn_cookies; cookie; cookie = cookie->next){ - if(!strcmp(param->username, cookie->userid)){ - parsehostname(cookie->connectstring, param, ntohs(param->srv->targetport)); - if(prevcookie)prevcookie->next = cookie->next; - else msn_cookies = cookie->next; - myfree(cookie->connectstring); - myfree(cookie->userid); - myfree(cookie); - break; - } - prevcookie = cookie; - } - pthread_mutex_unlock(&msn_cookie_mutex); - if(!cookie) { - if(sec) RETURN(1233); - parsehostname((char *)param->srv->target, param, ntohs(param->srv->targetport)); - } - res = (*param->srv->authfunc)(param); - if(res) {RETURN(res);} - - if(!sec){ - len = (int)strlen(verstr); - if(socksend(param->remsock, verstr, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} - param->statscli64 += len; - - myfree(verstr); - verstr = mystrdup(buf); - - len = sockgetlinebuf(param, SERVER, buf, 240, '\n', conf.timeouts[STRING_S]); - if(len < 10) RETURN(1208); - param->statssrv64 += len; - - strcpy(buf, verstr); - } - - len = (int)strlen(buf); - if((res=handledatfltcli(param, &buf, &buflen, 0, &len))!=PASS) RETURN(res); - if(socksend(param->remsock, buf, len, conf.timeouts[STRING_S])!= len) {RETURN (1207);} - - - param->statscli64 += len; - - if(sec){ - RETURN(sockmap(param, conf.timeouts[CONNECTION_L])); - } - - param->ndatfilterssrv++; - newfilters = myalloc(param->ndatfilterssrv * sizeof(struct filterp *)); - if(param->ndatfilterssrv > 1){ - memcpy(newfilters, param->datfilterssrv, (param->ndatfilterssrv - 1) * sizeof(struct filterp *)); - myfree(param->datfilterssrv); - } - param->datfilterssrv = newfilters; - newfilters[param->ndatfilterssrv - 1] = &msnfilterp; - - param->res = sockmap(param, conf.timeouts[CONNECTION_L]); - - param->ndatfilterssrv--; - - - -CLEANRET: - - - if(verstr)myfree(verstr); - if(buf)myfree(buf); - (*param->srv->logfunc)(param, NULL); - freeparam(param); - return (NULL); -} - -#ifdef WITHMAIN -struct proxydef childdef = { - msnprchild, - 0, - 0, - S_MSNPR, - "" -}; -#include "proxymain.c" -#endif diff --git a/src/proxy.h b/src/proxy.h index 0d884fa..5fdf552 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -266,6 +266,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param); void srvinit2(struct srvparam * srv, struct clientparam *param); void srvfree(struct srvparam * srv); unsigned char * dologname (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t); +int readconfig(FILE * fp); int myrand(void * entropy, int len); diff --git a/src/structures.h b/src/structures.h index e646c66..864b1c6 100644 --- a/src/structures.h +++ b/src/structures.h @@ -690,6 +690,17 @@ struct pluginlink { unsigned char * (*dologname) (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t); }; +struct counter_header { + unsigned char sig[4]; + time_t updated; +}; + +struct counter_record { + uint64_t traf64; + time_t cleared; + time_t updated; +}; + extern struct pluginlink pluginlink; extern char *rotations[]; @@ -735,6 +746,7 @@ typedef enum { }DATA_TYPE; + #ifdef __cplusplus } #endif diff --git a/src/version.h b/src/version.h index 2f246b0..6582d2d 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151130225110" +#define BUILDDATE "151203020751" From 1220c504bd95022ac206986649707fea52772d54 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 3 Dec 2015 14:12:06 +0300 Subject: [PATCH 092/122] remove counterutils from makefiles --- Makefile.Linux | 1 - Makefile.unix-install | 1 - 2 files changed, 2 deletions(-) diff --git a/Makefile.Linux b/Makefile.Linux index 6836464..e99ef5f 100644 --- a/Makefile.Linux +++ b/Makefile.Linux @@ -44,7 +44,6 @@ INSTALL = /usr/bin/install INSTALL_BIN = $(INSTALL) -m 755 INSTALL_DATA = $(INSTALL) -m 644 INSTALL_OBJS = src/3proxy \ - src/countersutil \ src/dighosts \ src/ftppr \ src/mycrypt \ diff --git a/Makefile.unix-install b/Makefile.unix-install index 2646b26..4676dbf 100644 --- a/Makefile.unix-install +++ b/Makefile.unix-install @@ -7,7 +7,6 @@ INSTALL = /usr/bin/install INSTALL_BIN = $(INSTALL) -m 755 INSTALL_DATA = $(INSTALL) -m 644 INSTALL_OBJS = src/3proxy \ - src/countersutil \ src/dighosts \ src/ftppr \ src/mycrypt \ From bd37ffa2f707654d7aa4e48dd9d0b1957320b87f Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 4 Dec 2015 00:59:52 +0300 Subject: [PATCH 093/122] Race conditions fixed on config reload Race conditions on logging and name resolution --- src/3proxy.c | 10 +++++++--- src/auth.c | 1 - src/common.c | 23 ++++++++++++++++------- src/conf.c | 7 ++++--- src/proxy.h | 2 ++ src/proxymain.c | 17 +++++++++++------ src/smtpp.c | 2 +- 7 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index 000e907..ee1447a 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -270,12 +270,13 @@ void cyclestep(void){ } if(conf.logname) { if(timechanged(conf.logtime, conf.time, conf.logtype)) { - FILE *fp, *fp1; + FILE *fp; fp = fopen((char *)dologname (tmpbuf, conf.logname, NULL, conf.logtype, conf.time), "a"); if (fp) { - fp1 = conf.stdlog; + pthread_mutex_lock(&log_mutex); + fclose(conf.stdlog); conf.stdlog = fp; - if(fp1) fclose(fp1); + pthread_mutex_unlock(&log_mutex); } fseek(stdout, 0L, SEEK_END); usleep(SLEEPTIME); @@ -510,6 +511,9 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int return 1; } + pthread_mutex_init(&log_mutex, NULL); + logmutexinit = 1; + pthread_mutex_init(&config_mutex, NULL); pthread_mutex_init(&bandlim_mutex, NULL); pthread_mutex_init(&hash_mutex, NULL); diff --git a/src/auth.c b/src/auth.c index 28f95b9..bb78162 100644 --- a/src/auth.c +++ b/src/auth.c @@ -1024,7 +1024,6 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un int j, k, len, flen; SOCKET sock; unsigned ttl; - time_t t; #ifndef NOIPV6 struct sockaddr_in6 addr; #else diff --git a/src/common.c b/src/common.c index c3c97d3..0bcfa2e 100644 --- a/src/common.c +++ b/src/common.c @@ -596,18 +596,25 @@ void lognone(struct clientparam * param, const unsigned char *s) { if(param->trafcountfunc)(*param->trafcountfunc)(param); clearstat(param); } - +pthread_mutex_t log_mutex; +int logmutexinit = 0; void logstdout(struct clientparam * param, const unsigned char *s) { unsigned char buf[4096]; FILE *log; + if(!logmutexinit){ + pthread_mutex_init(&log_mutex, NULL); + logmutexinit = 1; + } + pthread_mutex_lock(&log_mutex); log = param->srv->stdlog?param->srv->stdlog:conf.stdlog?conf.stdlog:stdout; dobuf(param, buf, s, NULL); if(!param->nolog)if(fprintf(log, "%s\n", buf) < 0) { perror("printf()"); }; if(log != conf.stdlog)fflush(log); + pthread_mutex_unlock(&log_mutex); } #ifndef _WIN32 void logsyslog(struct clientparam * param, const unsigned char *s) { @@ -714,6 +721,7 @@ unsigned long getip(unsigned char *name){ int i; int ndots = 0; struct hostent *hp=NULL; + RESOLVFUNC tmpresolv; #ifdef GETHOSTBYNAME_R struct hostent he; @@ -734,10 +742,10 @@ unsigned long getip(unsigned char *name){ return retval; } } - if(resolvfunc){ - if((*resolvfunc)(AF_INET, name, &retval)) return retval; + if((tmpresolv=resolvfunc)){ + if((*tmpresolv)(AF_INET, name, (unsigned char *)&retval)) return retval; if(conf.demanddialprog) system(conf.demanddialprog); - return (*resolvfunc)(AF_INET, name, &retval)?retval:0; + return (*tmpresolv)(AF_INET, name, (unsigned char *)&retval)?retval:0; } #if !defined(_WIN32) && !defined(GETHOSTBYNAME_R) if(!ghbn_init){ @@ -767,6 +775,7 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ int ndots=0, ncols=0, nhex=0; struct addrinfo *ai, hint; int i; + RESOLVFUNC tmpresolv; if(!sa) return 0; if(!family) { @@ -805,14 +814,14 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ return inet_pton(AF_INET6, name, SAADDR(sa))?(family==4? 0:AF_INET6) : 0; } } - if(resolvfunc){ + if((tmpresolv = resolvfunc)){ int f = (family == 6 || family == 64)?AF_INET6:AF_INET; *SAFAMILY(sa) = f; - if(resolvfunc(f, name, SAADDR(sa))) return f; + if(tmpresolv(f, name, SAADDR(sa))) return f; if(family == 4 || family == 6) return 0; f = (family == 46)? AF_INET6 : AF_INET; *SAFAMILY(sa) = f; - if(resolvfunc(f, name, SAADDR(sa))) return f; + if(tmpresolv(f, name, SAADDR(sa))) return f; return 0; } memset(&hint, 0, sizeof(hint)); diff --git a/src/conf.c b/src/conf.c index 88721b3..793421b 100644 --- a/src/conf.c +++ b/src/conf.c @@ -310,7 +310,7 @@ static int h_log(int argc, unsigned char ** argv){ } #endif else { - FILE *fp, *fp1; + FILE *fp; if(argc > 2) { conf.logtype = getrotate(*argv[2]); } @@ -323,9 +323,10 @@ static int h_log(int argc, unsigned char ** argv){ return 1; } else { - fp1 = conf.stdlog; + pthread_mutex_lock(&log_mutex); + if(conf.stdlog)fclose(conf.stdlog); conf.stdlog = fp; - if(fp1) fclose(fp1); + pthread_mutex_unlock(&log_mutex); #ifdef _WINCE freopen(tmpbuf, "w", stdout); freopen(tmpbuf, "w", stderr); diff --git a/src/proxy.h b/src/proxy.h index 5fdf552..52f5bf1 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -315,6 +315,8 @@ extern pthread_mutex_t bandlim_mutex; extern pthread_mutex_t hash_mutex; extern pthread_mutex_t tc_mutex; extern pthread_mutex_t pwl_mutex; +extern pthread_mutex_t log_mutex; +extern int logmutexinit; #ifndef NOODBC extern pthread_mutex_t odbc_mutex; #endif diff --git a/src/proxymain.c b/src/proxymain.c index d439f9b..27a64ae 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -207,7 +207,8 @@ int MODULEMAINFUNC (int argc, char** argv){ break; case 'l': srv.logfunc = logstdout; - srv.logtarget = (unsigned char*)argv[i] + 2; + if(srv.logtarget) myfree(srv.logtarget); + srv.logtarget = mystrdup((unsigned char*)argv[i] + 2); if(argv[i][2]) { if(argv[i][2]=='@'){ @@ -268,7 +269,8 @@ int MODULEMAINFUNC (int argc, char** argv){ #endif #endif case 'f': - srv.logformat = (unsigned char *)argv[i] + 2; + if(srv.logformat)myfree(srv.logformat); + srv.logformat = mystrdup((unsigned char *)argv[i] + 2); break; case 't': srv.silent = 1; @@ -656,12 +658,14 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ memset(srv, 0, sizeof(struct srvparam)); srv->version = conf.paused; srv->logfunc = conf.logfunc; - srv->logformat = conf.logformat; + if(srv->logformat)myfree(srv->logformat); + srv->logformat = mystrdup(conf.logformat); srv->authfunc = conf.authfunc; srv->usentlm = 0; srv->maxchild = conf.maxchild; srv->time_start = time(NULL); - srv->logtarget = conf.logtarget; + if(srv->logtarget) myfree(srv->logtarget); + srv->logtarget = mystrdup(conf.logtarget); srv->srvsock = INVALID_SOCKET; srv->logdumpsrv = conf.logdumpsrv; srv->logdumpcli = conf.logdumpcli; @@ -682,15 +686,16 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ if(srv->logformat){ char *s; if(*srv->logformat == '-' && (s = strchr((char *)srv->logformat + 1, '+')) && s[1]){ + char* logformat = srv->logformat; + *s = 0; srv->nonprintable = (unsigned char *)mystrdup((char *)srv->logformat + 1); srv->replace = s[1]; srv->logformat = (unsigned char *)mystrdup(s + 2); *s = '+'; + myfree(logformat); } - else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat); } - if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); memset(¶m->sinsl, 0, sizeof(param->sinsl)); memset(¶m->sinsr, 0, sizeof(param->sinsr)); memset(¶m->req, 0, sizeof(param->req)); diff --git a/src/smtpp.c b/src/smtpp.c index 7265a8e..097c66a 100644 --- a/src/smtpp.c +++ b/src/smtpp.c @@ -256,7 +256,7 @@ void * smtppchild(struct clientparam* param) { if(!strncasecmp(command, "MAIL", 4) || !strncasecmp(command, "RCPT", 4) || !strncasecmp(command, "STARTTLS", 8) || !strncasecmp(command, "TURN", 4)){ res = (int)strlen(command); command[res] = 0; - res = handlehdrfilterscli(param, &command, &res, 0, &res); + res = handlehdrfilterscli(param, (unsigned char **)&command, &res, 0, &res); if(res != PASS) { if(res == HANDLED) res = 2; else RETURN(677); From 55fb037b48621697684ec60055cdb3839307ecde Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 4 Dec 2015 01:23:19 +0300 Subject: [PATCH 094/122] Avoid overflow in external Use sockaddr_in6 for extsa if compiled with IPv6 support to be uniform and avoid overflows. --- src/structures.h | 5 +++-- src/version.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/structures.h b/src/structures.h index 864b1c6..536b03c 100644 --- a/src/structures.h +++ b/src/structures.h @@ -376,10 +376,11 @@ struct srvparam { #ifndef NOIPV6 struct sockaddr_in6 intsa; struct sockaddr_in6 extsa6; + struct sockaddr_in6 extsa; #else struct sockaddr_in intsa; -#endif struct sockaddr_in extsa; +#endif pthread_mutex_t counter_mutex; struct pollfd fds; FILE *stdlog; @@ -499,7 +500,7 @@ struct extparam { #ifndef NOIPV6 struct sockaddr_in6 intsa; struct sockaddr_in6 extsa6; - struct sockaddr_in extsa; + struct sockaddr_in6 extsa; #else struct sockaddr_in intsa; struct sockaddr_in extsa; diff --git a/src/version.h b/src/version.h index 6582d2d..f09b34a 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151203020751" +#define BUILDDATE "151204012035" From da526699956100539031b3f182cd26eb69538ff3 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 7 Dec 2015 19:06:16 +0300 Subject: [PATCH 095/122] NULL pointer dereference fixed in configuration load introduced with latest commits --- src/proxymain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxymain.c b/src/proxymain.c index 27a64ae..a1544e0 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -659,7 +659,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ srv->version = conf.paused; srv->logfunc = conf.logfunc; if(srv->logformat)myfree(srv->logformat); - srv->logformat = mystrdup(conf.logformat); + srv->logformat = conf.logformat? mystrdup(conf.logformat) : NULL; srv->authfunc = conf.authfunc; srv->usentlm = 0; srv->maxchild = conf.maxchild; From d6df311ba71d37c30c3d632a5136b5222740743f Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 7 Dec 2015 19:12:41 +0300 Subject: [PATCH 096/122] remove -Wall from compiler options --- Makefile.Linux | 4 ++-- Makefile.ccc | 4 ++-- Makefile.unix | 4 ++-- Makefile.winCE | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile.Linux b/Makefile.Linux index e99ef5f..2ed13ad 100644 --- a/Makefile.Linux +++ b/Makefile.Linux @@ -10,11 +10,11 @@ BUILDDIR = CC = gcc -CFLAGS = -Wall -g -O2 -c -pthread -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL +CFLAGS = -g -O2 -c -pthread -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL COUT = -o LN = gcc DCFLAGS = -fpic -LDFLAGS = -Wall -O2 -pthread +LDFLAGS = -O2 -pthread DLFLAGS = -shared DLSUFFICS = .ld.so # -lpthreads may be reuqired on some platforms instead of -pthreads diff --git a/Makefile.ccc b/Makefile.ccc index 78bdf27..f97a1e2 100644 --- a/Makefile.ccc +++ b/Makefile.ccc @@ -9,10 +9,10 @@ BUILDDIR = CC = ccc -CFLAGS = -Wall -O2 -c -pthread -D_THREAD_SAFE -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -WITH_POLL +CFLAGS = -O2 -c -pthread -D_THREAD_SAFE -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -WITH_POLL COUT = -o LN = ccc -LDFLAGS = -Wall -O2 -pthread +LDFLAGS = -O2 -pthread DCFLAGS = -fpic DLFLAGS = -shared DLSUFFICS = .ld.so diff --git a/Makefile.unix b/Makefile.unix index 0a4f458..60a7aeb 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -11,10 +11,10 @@ BUILDDIR = CC = gcc # you may need -L/usr/pkg/lib for older NetBSD versions -CFLAGS = -Wall -g -O2 -c -pthread -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL +CFLAGS = -g -O2 -c -pthread -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL COUT = -o LN = gcc -LDFLAGS = -Wall -O2 -pthread +LDFLAGS = -O2 -pthread # -lpthreads may be reuqired on some platforms instead of -pthreads # -ldl or -lld may be required for some platforms DCFLAGS = -fpic diff --git a/Makefile.winCE b/Makefile.winCE index 0d5213d..e08f1e0 100644 --- a/Makefile.winCE +++ b/Makefile.winCE @@ -10,10 +10,10 @@ BUILDDIR = ../bin/ CC = /opt/cegcc/arm-wince-cegcc/bin/gcc -CFLAGS = -Wall -O2 -s -c -mthreads -DWITH_STD_MALLOC -DNOODBC -D_WINCE -D_WIN32 -D__USE_W32_SOCKETS +CFLAGS = -O2 -s -c -mthreads -DWITH_STD_MALLOC -DNOODBC -D_WINCE -D_WIN32 -D__USE_W32_SOCKETS COUT = -o LN = /opt/cegcc/arm-wince-cegcc/bin/gcc -LDFLAGS = -Wall -O2 -s -mthreads +LDFLAGS = -O2 -s -mthreads DLFLAGS = -shared DLSUFFICS = .dll LIBS = -lws2 From 40f9430623e4cd77f073d6717ebb14c400eef023 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 7 Dec 2015 22:58:31 +0300 Subject: [PATCH 097/122] Force use of IPv6 translated address instead of IPv4 with -6 --- src/common.c | 6 +++--- src/socks.c | 26 ++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/common.c b/src/common.c index 0bcfa2e..ce52860 100644 --- a/src/common.c +++ b/src/common.c @@ -779,7 +779,7 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ if(!sa) return 0; if(!family) { - family = AF_INET; + family = 4; #else ((struct sockaddr_in *)sa)->sin_family = AF_INET; return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0; @@ -806,8 +806,8 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){ } if(!name[i]){ if(ndots == 3 && ncols == 0 && nhex == 0){ - *SAFAMILY(sa)=AF_INET; - return inet_pton(AF_INET, name, SAADDR(sa))? (family==6? 0:AF_INET) : 0; + *SAFAMILY(sa)=(family == 6)?AF_INET6 : AF_INET; + return inet_pton(*SAFAMILY(sa), name, SAADDR(sa))? *SAFAMILY(sa) : 0; } if(ncols >= 2) { *SAFAMILY(sa)=AF_INET6; diff --git a/src/socks.c b/src/socks.c index 48f48b4..4112325 100644 --- a/src/socks.c +++ b/src/socks.c @@ -90,18 +90,36 @@ void * sockschild(struct clientparam* param) { } size = 4; + *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET; switch(c) { +#ifndef NOIPV6 case 4: + if(param->srv->family == 4) RETURN(997); size = 16; + *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET6; +#endif case 1: for (i = 0; isinsr) = *SAFAMILY(¶m->req) = (c == 1)? AF_INET:AF_INET6; - memcpy(SAADDR(¶m->sinsr), buf, size); - memcpy(SAADDR(¶m->req), buf, size); - if(command==1 && SAISNULL(¶m->req)) { +#ifndef NOIPV6 + if (c == 1 && param->srv->family==6){ + char prefix[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}; + *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET6; + memcpy(SAADDR(¶m->sinsr), prefix, 12); + memcpy(12 + (char *)SAADDR(¶m->sinsr), buf, 4); + memcpy(SAADDR(¶m->req), prefix, 12); + memcpy(12 + (char *)SAADDR(¶m->req), buf, 4); + } + else { +#endif + memcpy(SAADDR(¶m->sinsr), buf, size); + memcpy(SAADDR(¶m->req), buf, size); +#ifndef NOIPV6 + } +#endif + if(SAISNULL(¶m->req)) { RETURN(421); } myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf, 64); From fdb1fad9f7c84949bb80a613bcee12097be577aa Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 7 Dec 2015 23:01:21 +0300 Subject: [PATCH 098/122] publish as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index f09b34a..f0f6ab6 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151204012035" +#define BUILDDATE "151207230102" From f1ab0771a954661d317b3a655e40e936c5c2ac6f Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Tue, 8 Dec 2015 01:45:17 +0300 Subject: [PATCH 099/122] remove unused defines --- src/auth.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/auth.c b/src/auth.c index bb78162..3bbf024 100644 --- a/src/auth.c +++ b/src/auth.c @@ -8,9 +8,6 @@ #include "proxy.h" -#define HEADERSIZE 57 -#define RECORDSIZE 18 - int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr){ unsigned char buf[1024]; From 658e9b3a8a81f6b5167cce915244e1c8f23c4238 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 9 Dec 2015 22:21:00 +0300 Subject: [PATCH 100/122] README updated msnpr and countersutil removed --- README | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README b/README index 59b71e5..f547e8e 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ /* 3APA3A 3proxy tiny proxy server - (c) 2002-2014 by Vladimir '3APA3A' Dubrovin <3proxy@3proxy.ru> + (c) 2002-2015 by Vladimir '3APA3A' Dubrovin <3proxy@3proxy.ru> please read License Agreement */ @@ -39,7 +39,6 @@ smtpp SMTP proxy server, binds to port 25. You must specify icqpr ICQ/AIM proxy. Maps some TCP port to TCP port of ICQ server and performs packets translation. Example: icqpr 5190 login.icq.com 5190 -msnpr MSN proxy (beta) tcppm TCP port mapping. Maps some TCP port on local machine to TCP port on remote host. udppm UDP port mapping. Maps some UDP port on local machine to @@ -56,7 +55,6 @@ mycrypt Program to obtain crypted password fro cleartext. Supports mycrypt salt password produces MD5/crypt password with salt "salt". dighosts Utility for building networks list from web page. -countersutil Utility to manage counters file Run utility with --help option for command line reference. From 1be800c334442e415a39b77f6fa19ef719d9acc1 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 11 Dec 2015 02:20:22 +0300 Subject: [PATCH 101/122] Fixed: request by host name in SOCKSv5 --- src/socks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socks.c b/src/socks.c index 4112325..5005c5f 100644 --- a/src/socks.c +++ b/src/socks.c @@ -132,7 +132,7 @@ void * sockschild(struct clientparam* param) { } buf[i] = 0; if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->req)) RETURN(100); - memcpy(¶m->sinsr, ¶m->req, sizeof(¶m->req)); + memcpy(¶m->sinsr, ¶m->req, sizeof(param->req)); break; default: RETURN(997); From c263428cf67576884673c7391f90eb6d4e315dfc Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 11 Dec 2015 02:28:14 +0300 Subject: [PATCH 102/122] published as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index f0f6ab6..9216bc5 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151207230102" +#define BUILDDATE "151211021946" From fa2679555ed305ef71549edff53808d1f62b24cd Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 21 Dec 2015 13:40:30 +0300 Subject: [PATCH 103/122] print IPv6 address in [] --- src/common.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index ce52860..16d81b7 100644 --- a/src/common.c +++ b/src/common.c @@ -457,7 +457,12 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i++; } } - else i += myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf + i, 64); + else { + buf[i++] = '['; + i += myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)buf + i, 64); + buf[i++] = ']'; + buf[i++] = 0; + } break; case 'N': From a4e0f1fb9a311a85c55efa4cfcee77d823ec2e15 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 21 Dec 2015 13:41:35 +0300 Subject: [PATCH 104/122] NULL pointer deferefence (depends on libc) if no "log" in config --- src/proxymain.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index a1544e0..850d91d 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -664,8 +664,10 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ srv->usentlm = 0; srv->maxchild = conf.maxchild; srv->time_start = time(NULL); - if(srv->logtarget) myfree(srv->logtarget); - srv->logtarget = mystrdup(conf.logtarget); + if(conf.logtarget){ + if(srv->logtarget) myfree(srv->logtarget); + srv->logtarget = mystrdup(conf.logtarget); + } srv->srvsock = INVALID_SOCKET; srv->logdumpsrv = conf.logdumpsrv; srv->logdumpcli = conf.logdumpcli; From 04870841616bee347a4692da6bd8f8cf3d9c5817 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 21 Dec 2015 21:23:47 +0300 Subject: [PATCH 105/122] Publish as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 9216bc5..6ceb81a 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151211021946" +#define BUILDDATE "151221212305" From 7df2461a26b8433ba4ef67800ac7816aaa09afed Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 27 Dec 2015 19:27:17 +0300 Subject: [PATCH 106/122] Unify logging (make it always blocking in exchange for memory) --- src/3proxy.c | 12 ++++-------- src/auth.c | 21 ++++++++++----------- src/common.c | 17 +++++++++++------ src/conf.c | 9 ++------- src/proxy.h | 5 +---- 5 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/3proxy.c b/src/3proxy.c index ee1447a..30a1320 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -19,7 +19,6 @@ #endif FILE * confopen(); -extern unsigned char tmpbuf[1024]; extern unsigned char *strings[]; extern FILE *writable; extern struct counter_header cheader; @@ -65,9 +64,9 @@ void __stdcall CommandHandler( DWORD dwCommand ) Sleep(2000); SetStatus( SERVICE_STOPPED, 0, 0 ); #ifndef NOODBC - pthread_mutex_lock(&odbc_mutex); + pthread_mutex_lock(&log_mutex); close_sql(); - pthread_mutex_unlock(&odbc_mutex); + pthread_mutex_unlock(&log_mutex); #endif break; case SERVICE_CONTROL_PAUSE: @@ -120,9 +119,9 @@ void mysigterm (int sig){ usleep(999*SLEEPTIME); usleep(999*SLEEPTIME); #ifndef NOODBC - pthread_mutex_lock(&odbc_mutex); + pthread_mutex_lock(&log_mutex); close_sql(); - pthread_mutex_unlock(&odbc_mutex); + pthread_mutex_unlock(&log_mutex); #endif conf.timetoexit = 1; } @@ -519,9 +518,6 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int pthread_mutex_init(&hash_mutex, NULL); pthread_mutex_init(&tc_mutex, NULL); pthread_mutex_init(&pwl_mutex, NULL); -#ifndef NOODBC - pthread_mutex_init(&odbc_mutex, NULL); -#endif freeconf(&conf); res = readconfig(fp); diff --git a/src/auth.c b/src/auth.c index 3bbf024..381332e 100644 --- a/src/auth.c +++ b/src/auth.c @@ -1296,46 +1296,45 @@ void sqlerr (char *buf){ fprintf(conf.stdlog, "%s\n", buf); fflush(conf.stdlog); } - pthread_mutex_unlock(&odbc_mutex); + pthread_mutex_unlock(&log_mutex); } void logsql(struct clientparam * param, const unsigned char *s) { - unsigned char buf[4096]; SQLRETURN ret; int len; - len = dobuf(param, buf, s, "\'"); if(param->nolog) return; - pthread_mutex_lock(&odbc_mutex); + pthread_mutex_lock(&log_mutex); + len = dobuf(param, tmpbuf, s, "\'"); if(attempt > 5){ time_t t; t = time(0); if (t - attempt_time < 180){ - sqlerr(buf); + sqlerr(tmpbuf); return; } } if(!hstmt){ if(!init_sql(sqlstring)) { - sqlerr(buf); + sqlerr(tmpbuf); return; } } if(hstmt){ - ret = SQLExecDirect(hstmt, (SQLCHAR *)buf, (SQLINTEGER)len); + ret = SQLExecDirect(hstmt, (SQLCHAR *)tmpbuf, (SQLINTEGER)len); if(ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ close_sql(); if(!init_sql(sqlstring)){ - sqlerr(buf); + sqlerr(tmpbuf); return; } if(hstmt) { - ret = SQLExecDirect(hstmt, (SQLCHAR *)buf, (SQLINTEGER)len); + ret = SQLExecDirect(hstmt, (SQLCHAR *)tmpbuf, (SQLINTEGER)len); if(ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ - sqlerr(buf); + sqlerr(tmpbuf); return; } attempt = 0; @@ -1343,7 +1342,7 @@ void logsql(struct clientparam * param, const unsigned char *s) { } attempt = 0; } - pthread_mutex_unlock(&odbc_mutex); + pthread_mutex_unlock(&log_mutex); } #endif diff --git a/src/common.c b/src/common.c index 16d81b7..c91dab9 100644 --- a/src/common.c +++ b/src/common.c @@ -603,9 +603,9 @@ void lognone(struct clientparam * param, const unsigned char *s) { } pthread_mutex_t log_mutex; int logmutexinit = 0; +unsigned char tmpbuf[4096]; void logstdout(struct clientparam * param, const unsigned char *s) { - unsigned char buf[4096]; FILE *log; if(!logmutexinit){ @@ -614,8 +614,8 @@ void logstdout(struct clientparam * param, const unsigned char *s) { } pthread_mutex_lock(&log_mutex); log = param->srv->stdlog?param->srv->stdlog:conf.stdlog?conf.stdlog:stdout; - dobuf(param, buf, s, NULL); - if(!param->nolog)if(fprintf(log, "%s\n", buf) < 0) { + dobuf(param, tmpbuf, s, NULL); + if(!param->nolog)if(fprintf(log, "%s\n", tmpbuf) < 0) { perror("printf()"); }; if(log != conf.stdlog)fflush(log); @@ -623,10 +623,15 @@ void logstdout(struct clientparam * param, const unsigned char *s) { } #ifndef _WIN32 void logsyslog(struct clientparam * param, const unsigned char *s) { - unsigned char buf[4096]; - dobuf(param, buf, s, NULL); - if(!param->nolog)syslog(LOG_INFO, "%s", buf); + if(!logmutexinit){ + pthread_mutex_init(&log_mutex, NULL); + logmutexinit = 1; + } + pthread_mutex_lock(&log_mutex); + dobuf(param, tmpbuf, s, NULL) + if(!param->nolog)syslog(LOG_INFO, "%s", tmpbuf); + pthread_mutex_unlock(&log_mutex); } #endif diff --git a/src/conf.c b/src/conf.c index 793421b..896b91f 100644 --- a/src/conf.c +++ b/src/conf.c @@ -16,14 +16,9 @@ pthread_mutex_t pwl_mutex; pthread_mutex_t hash_mutex; pthread_mutex_t config_mutex; -#ifndef NOODBC -pthread_mutex_t odbc_mutex; -#endif - int haveerror = 0; int linenum = 0; -unsigned char tmpbuf[1024]; FILE *writable; struct counter_header cheader = {"3CF", (time_t)0}; struct counter_record crecord; @@ -302,10 +297,10 @@ static int h_log(int argc, unsigned char ** argv){ } #ifndef NOODBC else if(*argv[1]=='&'){ - pthread_mutex_lock(&odbc_mutex); + pthread_mutex_lock(&log_mutex); close_sql(); init_sql((char *)argv[1]+1); - pthread_mutex_unlock(&odbc_mutex); + pthread_mutex_unlock(&log_mutex); conf.logfunc = logsql; } #endif diff --git a/src/proxy.h b/src/proxy.h index 52f5bf1..2e3fe1d 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -309,7 +309,7 @@ struct datatype; struct dictionary; struct node; struct property; - +extern unsigned char tmpbuf[4096]; extern pthread_mutex_t config_mutex; extern pthread_mutex_t bandlim_mutex; extern pthread_mutex_t hash_mutex; @@ -317,9 +317,6 @@ extern pthread_mutex_t tc_mutex; extern pthread_mutex_t pwl_mutex; extern pthread_mutex_t log_mutex; extern int logmutexinit; -#ifndef NOODBC -extern pthread_mutex_t odbc_mutex; -#endif extern struct datatype datatypes[64]; From 9876172e0b357d09dde2ae0ed9ec7fa0ee5ea45c Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 27 Dec 2015 19:43:04 +0300 Subject: [PATCH 107/122] Reduce stack usage for threads Reduce stack usage, because large logging buffers are removed from stack. --- src/proxymain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index 850d91d..e33a8b6 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -173,7 +173,7 @@ int MODULEMAINFUNC (int argc, char** argv){ signal(SIGPIPE, SIG_IGN); pthread_attr_init(&pa); - pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + 16384); + pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + 8192); pthread_attr_setdetachstate(&pa,PTHREAD_CREATE_DETACHED); #endif #endif @@ -601,7 +601,7 @@ int MODULEMAINFUNC (int argc, char** argv){ #ifndef _WINCE h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, (unsigned)16384, threadfunc, (void *) newparam, 0, &thread); #else - h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)32768, threadfunc, (void *) newparam, 0, &thread); + h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)16384, threadfunc, (void *) newparam, 0, &thread); #endif srv.childcount++; if (h) { From b56702e670e1bf07aaf12d59d2bb2dc3557bf30e Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 27 Dec 2015 19:44:21 +0300 Subject: [PATCH 108/122] Increase static bufer --- src/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index c91dab9..33d1656 100644 --- a/src/common.c +++ b/src/common.c @@ -603,7 +603,7 @@ void lognone(struct clientparam * param, const unsigned char *s) { } pthread_mutex_t log_mutex; int logmutexinit = 0; -unsigned char tmpbuf[4096]; +unsigned char tmpbuf[8192]; void logstdout(struct clientparam * param, const unsigned char *s) { FILE *log; From d9271bfec8905e65f3f8cbb146d109427deb6ab8 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 27 Dec 2015 19:45:15 +0300 Subject: [PATCH 109/122] + Increase static buffer size --- src/proxy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proxy.h b/src/proxy.h index 2e3fe1d..a53fffa 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -309,7 +309,7 @@ struct datatype; struct dictionary; struct node; struct property; -extern unsigned char tmpbuf[4096]; +extern unsigned char tmpbuf[8192]; extern pthread_mutex_t config_mutex; extern pthread_mutex_t bandlim_mutex; extern pthread_mutex_t hash_mutex; From 347d7736c72fc98092574fcaacbfe936baceab26 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 28 Dec 2015 15:57:47 +0300 Subject: [PATCH 110/122] ssl_plugin: configuration commands added plugin /path_to/SslPlugin.dll ssl_plugin ssl_certpath /path_to/certificates/ ssl_strip proxy -p3128 ssl_nostrip proxy -p3129 --- src/plugins/SSLPlugin/ssl_plugin.c | 52 ++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index 40ef8a8..542d526 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -325,6 +325,47 @@ static struct filter ssl_filter = { ssl_filter_close }; +int strip = 0; + +static int h_strip(int argc, unsigned char **argv){ + if((strip&1)) return 1; + if(strip) usleep(100*SLEEPTIME); + ssl_filter.next = pl->conf->filters; + pl->conf->filters = &ssl_filter; + strip++; + return 0; +} + +static int h_nostrip(int argc, unsigned char **argv){ + struct filter * sf; + if(!(strip&1)) return 1; + if(strip) usleep(100*SLEEPTIME); + if(pl->conf->filters == &ssl_filter) pl->conf->filters = ssl_filter.next; + else for(sf = pl->conf->filters; sf && sf->next; sf=sf->next){ + if(sf->next == &ssl_filter) { + sf->next = ssl_filter.next; + break; + } + } + strip++; + return 0; +} + +static int h_certpath(int argc, unsigned char **argv){ + size_t len; + len = strlen(argv[1]); + if(!len || (argv[1][len - 1] != '/' && argv[1][len - 1] != '\\')) return 1; + if(cert_path && *cert_path) free(cert_path); + cert_path = strdup(argv[1]); + return 0; +} + +static struct commands ssl_commandhandlers[] = { + {ssl_commandhandlers+1, "ssl_strip", h_strip, 1, 1}, + {ssl_commandhandlers+2, "ssl_nostrip", h_nostrip, 1, 1}, + {NULL, "ssl_certpath", h_certpath, 2, 2}, +}; + #ifdef _WIN32 __declspec(dllexport) @@ -333,15 +374,9 @@ __declspec(dllexport) int ssl_plugin (struct pluginlink * pluginlink, int argc, char** argv){ pl = pluginlink; - if(argc > 1) { - if(cert_path && *cert_path) free(cert_path); - cert_path = strdup(argv[1]); - } if(!ssl_loaded){ ssl_loaded = 1; pthread_mutex_init(&ssl_mutex, NULL); - ssl_filter.next = pl->conf->filters; - pl->conf->filters = &ssl_filter; memcpy(&sso, pl->so, sizeof(struct sockfuncs)); pl->so->_send = ssl_send; pl->so->_recv = ssl_recv; @@ -349,10 +384,13 @@ __declspec(dllexport) pl->so->_recvfrom = ssl_recvfrom; pl->so->_closesocket = ssl_closesocket; pl->so->_poll = ssl_poll; + ssl_commandhandlers[2].next = pl->commandhandlers->next; + pl->commandhandlers->next = ssl_commandhandlers; } - else{ + else { ssl_release(); } + ssl_init(); tcppmfunc = (PROXYFUNC)pl->findbyname("tcppm"); if(!tcppmfunc){return 13;} From 22e7d9cdae00441f4f71a3db6c339b69f6d565d7 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 28 Dec 2015 16:28:26 +0300 Subject: [PATCH 111/122] SSL plugin commands renamed plugin /path/to/SslPlugin.dll ssl_plugin ssl_certcache /path/to/cache/ ssl_mitm proxy -p3128 ssl_nomitm proxy -p3129 --- src/plugins/SSLPlugin/ssl_plugin.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index 542d526..2739164 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -325,21 +325,21 @@ static struct filter ssl_filter = { ssl_filter_close }; -int strip = 0; +int mitm = 0; -static int h_strip(int argc, unsigned char **argv){ - if((strip&1)) return 1; - if(strip) usleep(100*SLEEPTIME); +static int h_mitm(int argc, unsigned char **argv){ + if((mitm&1)) return 1; + if(mitm) usleep(100*SLEEPTIME); ssl_filter.next = pl->conf->filters; pl->conf->filters = &ssl_filter; - strip++; + mitm++; return 0; } -static int h_nostrip(int argc, unsigned char **argv){ +static int h_nomitm(int argc, unsigned char **argv){ struct filter * sf; - if(!(strip&1)) return 1; - if(strip) usleep(100*SLEEPTIME); + if(!(mitm&1)) return 1; + if(mitm) usleep(100*SLEEPTIME); if(pl->conf->filters == &ssl_filter) pl->conf->filters = ssl_filter.next; else for(sf = pl->conf->filters; sf && sf->next; sf=sf->next){ if(sf->next == &ssl_filter) { @@ -347,7 +347,7 @@ static int h_nostrip(int argc, unsigned char **argv){ break; } } - strip++; + mitm++; return 0; } @@ -361,9 +361,9 @@ static int h_certpath(int argc, unsigned char **argv){ } static struct commands ssl_commandhandlers[] = { - {ssl_commandhandlers+1, "ssl_strip", h_strip, 1, 1}, - {ssl_commandhandlers+2, "ssl_nostrip", h_nostrip, 1, 1}, - {NULL, "ssl_certpath", h_certpath, 2, 2}, + {ssl_commandhandlers+1, "ssl_mitm", h_mitm, 1, 1}, + {ssl_commandhandlers+2, "ssl_nomitm", h_nomitm, 1, 1}, + {NULL, "ssl_certcache", h_certpath, 2, 2}, }; From e312a1aa11f665144d163bb8f2677135b2aa6746 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 28 Dec 2015 17:11:07 +0300 Subject: [PATCH 112/122] Fileplugin: commands added file_cachedir /path/to/cache/ h_preview 32768 --- src/plugins/FilePlugin/FilePlugin.c | 47 +++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/plugins/FilePlugin/FilePlugin.c b/src/plugins/FilePlugin/FilePlugin.c index 273c79e..280dbdf 100644 --- a/src/plugins/FilePlugin/FilePlugin.c +++ b/src/plugins/FilePlugin/FilePlugin.c @@ -846,6 +846,36 @@ static struct symbol fp_symbols[] = { {NULL, "fp_stringtable", (void*) fp_stringtable} }; +static int h_cachedir(int argc, unsigned char **argv){ + char * dirp; + size_t len; + + dirp = (argc > 1)? argv[1] : getenv("TEMP"); + len = strlen(dirp); + if(!dirp || !len || len > 200 || strchr(dirp, '%')) { + fprintf(stderr, "FilePlugin: invalid directory path: %s\n", dirp); + return (1); + } +#ifdef _WIN32 + if(dirp[len-1] == '\\') dirp[len-1] = 0; + sprintf(path, "%.256s\\%%07d.tmp", dirp); +#else + if(dirp[len-1] == '/') dirp[len-1] = 0; + sprintf(path, "%.256s/%%07d.tmp", dirp); +#endif + return 0; +} + +static int h_preview(int argc, unsigned char **argv){ + preview = atoi(argv[1]); + return 0; +} + +static struct commands file_commandhandlers[] = { + {file_commandhandlers + 1, "file_cachedir", h_cachedir, 2, 2}, + {NULL, "file_preview", h_preview, 2, 2}, +}; + static int file_loaded=0; @@ -857,7 +887,6 @@ __declspec(dllexport) int file_plugin (struct pluginlink * pluginlink, int argc, char** argv){ - char * dirp; if(!file_loaded){ pthread_mutex_init(&file_mutex, NULL); file_loaded = 1; @@ -874,19 +903,11 @@ __declspec(dllexport) pl->conf->filters = &fp_filter; fp_symbols[1].next = pl->symbols.next; pl->symbols.next = fp_symbols; + file_commandhandlers[1].next = pl->commandhandlers->next; + pl->commandhandlers->next = file_commandhandlers; } - dirp = (argc > 1)? argv[1] : getenv("TEMP"); - if(strlen(dirp) > 200 || strchr(dirp, '%')) { - fprintf(stderr, "FilePlugin: invalid directory path: %s\n", dirp); - return (13001); - } -#ifdef _WIN32 - sprintf(path, "%.256s\\%%07d.tmp", dirp); -#else - sprintf(path, "%.256s/%%07d.tmp", dirp); -#endif - if(argc > 2) preview = atoi(argv[2]); - if(!preview) preview = 32768; + h_cachedir(0, NULL); + preview = 32768; return 0; From d49a19cb290515d315f92e4d4c73d70750518827 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 3 Jan 2016 19:43:16 +0300 Subject: [PATCH 113/122] invalid source port selection in socls --- src/socks.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/socks.c b/src/socks.c index 5005c5f..52814db 100644 --- a/src/socks.c +++ b/src/socks.c @@ -176,7 +176,6 @@ void * sockschild(struct clientparam* param) { #else memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); #endif - if(!*SAPORT(¶m->sinsl))*SAPORT(¶m->sinsl) = port; if ((param->remsock=so._socket(SASOCK(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} param->operation = command == 2?BIND:UDPASSOC; break; From 47e8ba2e8d848d9b51ed259292e17eacdd9c63ec Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 3 Jan 2016 19:43:43 +0300 Subject: [PATCH 114/122] minor documentation fixes --- doc/html/securityen.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/html/securityen.html b/doc/html/securityen.html index 1482bb3..1be0d0c 100644 --- a/doc/html/securityen.html +++ b/doc/html/securityen.html @@ -1,10 +1,10 @@

3proxy security considirations

-
    +
    • Never install 3proxy suid. If you need it to run suid write some wrapper with fixed configuration file.
    • Make configuration file only available to account 3proxy starts with. -
    • Under Windows NT/2000/XP/2003 if 3proxy is used as service create new +
    • Under Windows if 3proxy is used as service create new unprivileged local account without "logon locally" right. Assign this account to 3proxy service.
    • Under unix use chroot to jail 3proxy (make sure files included in @@ -20,9 +20,8 @@ authentication method is currently available.
    • Always limit connections to internal network and localhost (to 127.0.0.1 and all interfaces) with ACLs. Be carefull, because BIND command in SOCKS requies BIND method with external interface IP address to be allowed. -
    • Always use nserver and nscache under Unix, overwise DoS attack is possible +
    • Before 3proxy 0.8 always use nserver and nscache under Unix, overwise DoS attack is possible with unreachable DNS server (because gethostbyname will block over threads). -
    • Remember, that 'nbname' authentication is not reliable and can be spoofed.
    • Keep logs in secure location, because some confidential information from user's request can be logged.
    • Use -xyz+A character filtering sequences for 'logformat', especially with @@ -31,6 +30,6 @@ ODBC logging to prevent SQL and log record injections.
    • Participate in code audit :)
- +

From 0e9cc9e330e3878b32f66c09822e7bf390694634 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 3 Jan 2016 19:44:48 +0300 Subject: [PATCH 115/122] http connect parent proxy fixed --- src/auth.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/auth.c b/src/auth.c index 381332e..0667595 100644 --- a/src/auth.c +++ b/src/auth.c @@ -38,11 +38,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc } else { if(*SAFAMILY(addr) == AF_INET6) buf[len++] = '['; - len += myinet_ntop(AF_INET, SAADDR(addr), (char *)buf+8, 256); + len += myinet_ntop(AF_INET, SAADDR(addr), (char *)buf+len, 256); if(*SAFAMILY(addr) == AF_INET6) buf[len++] = ']'; } len += sprintf((char *)buf + len, - ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", *SAPORT(addr)); + ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(*SAPORT(addr))); if(user){ unsigned char username[256]; len += sprintf((char *)buf + len, "Proxy-authorization: basic "); @@ -263,6 +263,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ default: param->redirectfunc = proxychild; } + if(cur->next)continue; return 0; } else if(!*SAPORT(&cur->addr) && !SAISNULL(&cur->addr)) { From 889c5caa1f727651016c42b73bc160219bab6a96 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 3 Jan 2016 19:57:51 +0300 Subject: [PATCH 116/122] typo in logsyslog() --- src/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index 33d1656..fde352a 100644 --- a/src/common.c +++ b/src/common.c @@ -629,7 +629,7 @@ void logsyslog(struct clientparam * param, const unsigned char *s) { logmutexinit = 1; } pthread_mutex_lock(&log_mutex); - dobuf(param, tmpbuf, s, NULL) + dobuf(param, tmpbuf, s, NULL); if(!param->nolog)syslog(LOG_INFO, "%s", tmpbuf); pthread_mutex_unlock(&log_mutex); } From 4c3f19cd204b5229bcdca326adde3b7dec38415f Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sun, 3 Jan 2016 20:03:17 +0300 Subject: [PATCH 117/122] publish as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 6ceb81a..bd2be42 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "151221212305" +#define BUILDDATE "160103200040" From 9dda666d8da8fe5c848606b3758758b264327d71 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 4 Jan 2016 01:30:49 +0300 Subject: [PATCH 118/122] minor changes in clientnegotiate() 1. Use [] for hostname in form of IPv6 address 2. Remove large buffer from stack --- src/auth.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/auth.c b/src/auth.c index 0667595..9033bda 100644 --- a/src/auth.c +++ b/src/auth.c @@ -10,7 +10,8 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr){ - unsigned char buf[1024]; + unsigned char *buf; + unsigned char *username; int res; int len=0; unsigned char * user, *pass; @@ -18,6 +19,13 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc user = redir->extuser; pass = redir->extpass; + if (param->srvinbuf < 4096){ + if(param->srvbuf)myfree(param->srvbuf); + param->srvbuf = myalloc(4096); + param->srvbufsize = 4096; + } + buf = param->srvbuf; + username = buf + 2048; if(user) { if (*user == '*') { if(!param->username) return 4; @@ -34,7 +42,11 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc { len = sprintf((char *)buf, "CONNECT "); if(redir->type == R_CONNECTP && param->hostname) { + char * needreplace; + needreplace = strchr(param->hostname, ':'); + if(needreplace) buf[len++] = '['; len =+ sprintf((char *)buf + len, "%.256s", param->hostname); + if(needreplace) buf[len++] = ']'; } else { if(*SAFAMILY(addr) == AF_INET6) buf[len++] = '['; @@ -44,7 +56,6 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc len += sprintf((char *)buf + len, ":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(*SAPORT(addr))); if(user){ - unsigned char username[256]; len += sprintf((char *)buf + len, "Proxy-authorization: basic "); sprintf((char *)username, "%.128s:%.64s", user, pass?pass:(unsigned char *)""); en64(username, buf+len, (int)strlen((char *)username)); From 7f90b6eae2bba2c1effad4b7f7aa71864f87497e Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 6 Jan 2016 21:09:17 +0300 Subject: [PATCH 119/122] fixed parent IPv6 connect proxy --- src/auth.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auth.c b/src/auth.c index 9033bda..5a81433 100644 --- a/src/auth.c +++ b/src/auth.c @@ -50,7 +50,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc } else { if(*SAFAMILY(addr) == AF_INET6) buf[len++] = '['; - len += myinet_ntop(AF_INET, SAADDR(addr), (char *)buf+len, 256); + len += myinet_ntop(*SAFAMILY(addr), SAADDR(addr), (char *)buf+len, 256); if(*SAFAMILY(addr) == AF_INET6) buf[len++] = ']'; } len += sprintf((char *)buf + len, From bef5b6f4736cef0e6875fbc84c1b14d0260c4d41 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Wed, 6 Jan 2016 22:06:33 +0300 Subject: [PATCH 120/122] minor logging correction --- src/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index fde352a..79632dc 100644 --- a/src/common.c +++ b/src/common.c @@ -449,7 +449,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char break; case 'n': len = param->hostname? (int)strlen((char *)param->hostname) : 0; - if (len > 0) for(len = 0; param->hostname[len] && i < 4000; len++, i++){ + if (len > 0 && !strchr((char *)param->hostname, ':')) for(len = 0; param->hostname[len] && i < 4000; len++, i++){ buf[i] = param->hostname[len]; if(param->srv->nonprintable && (buf[i] < 0x20 || strchr((char *)param->srv->nonprintable, buf[i]))) buf[i] = param->srv->replace; if(doublec && strchr((char *)doublec, buf[i])) { From 93967af74776d6c8cfb02d5a96f42410c0d35340 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 9 Jan 2016 21:09:00 +0300 Subject: [PATCH 121/122] publishing as devel --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index bd2be42..4274802 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "160103200040" +#define BUILDDATE "160107200335" From 41f21485c74a36df54c19c49797c282b287488e9 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 9 Jan 2016 21:09:16 +0300 Subject: [PATCH 122/122] Update README --- README | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README b/README index f547e8e..8702d3d 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ /* 3APA3A 3proxy tiny proxy server - (c) 2002-2015 by Vladimir '3APA3A' Dubrovin <3proxy@3proxy.ru> + (c) 2002-2016 by Vladimir '3APA3A' Dubrovin <3proxy@3proxy.ru> please read License Agreement */ @@ -60,3 +60,5 @@ dighosts Utility for building networks list from web page. Run utility with --help option for command line reference. Latest version is available from http://3proxy.ru/ + +Want to donate the project? http://3proxy.ru/donations/ \ No newline at end of file