printf(" --qnum=<nfqueue_number>\n --wsize=<window_size>\t; set window size. 0 = do not modify\n --hostcase\t\t; change Host: => host:\n --hostspell\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n --daemon\t\t; daemonize\n");
printf(
" --qnum=<nfqueue_number>\n"
" --wsize=<window_size>\t; set window size. 0 = do not modify\n"
" --hostcase\t\t; change Host: => host:\n"
" --hostspell\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n"
" --hostnospace\t\t; remove space after Host: and add it to User-Agent: to preserve packet size\n"
" --daemon\t\t; daemonize\n"
);
exit(1);
}
@ -377,7 +402,8 @@ int main(int argc, char **argv)
{"wsize",required_argument,0,0},// optidx=2
{"hostcase",no_argument,0,0},// optidx=3
{"hostspell",required_argument,0,0},// optidx=4
{"user",required_argument,0,0},// optidx=5
{"hostnospace",no_argument,0,0},// optidx=5
{"user",required_argument,0,0},// optidx=6
{NULL,0,NULL,0}
};
if(argc<2)exithelp();
@ -417,7 +443,10 @@ int main(int argc, char **argv)
@ -190,7 +190,7 @@ tiera : Требуется сплит http запросов в течение в
3) ipset/get_anizapret.sh. быстро и без нагрузки на роутер получает лист с antizapret.prostovpn.org.
4) ipset/get_combined.sh. для провайдеров, которые блокируют по IP https, а остальное по DPI. IP https заносится в ipset ipban, остальные в ipset zapret.
Поскольку скачивается большой список РКН, требования к месту в /tmp аналоичны 2)
Поскольку скачивается большой список РКН, требования к месту в /tmp аналогичны 2)
Все варианты рассмотренных скриптов автоматически создают и заполняют ipset.
@ -185,6 +186,16 @@ bool handle_epollin(tproxy_conn_t *conn, int *data_transferred) {
}
}
if(pHost&¶ms.hostnospace&&pHost[5]=='')
{
p=pHost+6;
pos=p-buf;
printf("Removing space before host name at pos %zd\n",pos);
memmove(p-1,p,bs-pos);
bs--;// block will shrink by 1 byte
bRemovedHostSpace=1;
}
if(params.split_pos)
{
split_pos=params.split_pos<bs?params.split_pos:0;
@ -198,7 +209,7 @@ bool handle_epollin(tproxy_conn_t *conn, int *data_transferred) {
break;
casesplit_host:
if(pHost)
split_pos=pHost+6-buf;
split_pos=pHost+6-bRemovedHostSpace-buf;
break;
}
}
@ -429,7 +440,22 @@ int8_t block_sigpipe() {
voidexithelp()
{
printf(" --bind-addr=<ipv4_addr>|<ipv6_addr>\n --port=<port>\n --maxconn=<max_connections>\n --split-http-req=method|host\n --split-pos=<numeric_offset>\t; split at specified pos. invalidates split-http-req.\n --hostcase\t\t; change Host: => host:\n --hostspell\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n --hostdot\t\t; add \".\" after Host: name\n --hosttab\t\t; add tab after Host: name\n --methodspace\t\t; add extra space after method\n --methodeol\t\t; add end-of-line before method\n --unixeol\t\t; replace 0D0A to 0A\n --daemon\t\t; daemonize\n --user=<username>\t; drop root privs\n");
printf(
" --bind-addr=<ipv4_addr>|<ipv6_addr>\n"
" --port=<port>\n --maxconn=<max_connections>\n"
" --split-http-req=method|host\n"
" --split-pos=<numeric_offset>\t; split at specified pos. invalidates split-http-req.\n"
" --hostcase\t\t; change Host: => host:\n"
" --hostspell\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n"
" --hostdot\t\t; add \".\" after Host: name\n"
" --hosttab\t\t; add tab after Host: name\n"
" --hostnospace\t\t; remove space after Host:\n"
" --methodspace\t\t; add extra space after method\n"
" --methodeol\t\t; add end-of-line before method\n"