diff --git a/extend.c b/extend.c index a7b9df1..892f1bc 100644 --- a/extend.c +++ b/extend.c @@ -90,41 +90,14 @@ int mode_add_get(struct sockaddr_ina *dst, int m) } -int ext_connect(struct poolhd *pool, struct eval *val, - struct sockaddr_ina *dst, int next, int m) -{ - assert(m >= 0 && m < params.dp_count && dst && val); - - struct desync_params *dp = ¶ms.dp[m]; - if (dp->to_ip) { - struct sockaddr_ina addr = { .in6 = dp->addr }; - if (!addr.in.sin_port) { - addr.in.sin_port = dst->in.sin_port; - } - return create_conn(pool, val, &addr, next); - } - return create_conn(pool, val, dst, next); -} - - int connect_hook(struct poolhd *pool, struct eval *val, struct sockaddr_ina *dst, int next) { int m = mode_add_get(dst, -1); val->cache = (m == 0); - m = m < 0 ? 0 : m; - val->attempt = m; + val->attempt = m < 0 ? 0 : m; - if (params.late_conn) { - val->type = EV_DESYNC; - if (resp_error(val->fd, 0, val->flag) < 0) { - perror("send"); - return -1; - } - val->in6 = dst->in6; - return 0; - } - return ext_connect(pool, val, dst, next, m); + return create_conn(pool, val, dst, next); } @@ -132,8 +105,8 @@ int reconnect(struct poolhd *pool, struct eval *val, int m) { struct eval *client = val->pair; - if (ext_connect(pool, client, - (struct sockaddr_ina *)&val->in6, EV_DESYNC, m)) { + if (create_conn(pool, client, + (struct sockaddr_ina *)&val->in6, EV_DESYNC)) { return -1; } val->pair = 0; @@ -179,11 +152,10 @@ int on_torst(struct poolhd *pool, struct eval *val) for (; m < params.dp_count; m++) { struct desync_params *dp = ¶ms.dp[m]; - if (!(dp->detect & DETECT_TORST)) { - continue; + if (!dp->detect) { + return -1; } - if ((!dp->hosts || check_host(dp->hosts, val->pair)) && - (!dp->proto || check_proto_tcp(dp->proto, val))) { + if (dp->detect & DETECT_TORST) { break; } } @@ -206,33 +178,27 @@ int on_response(struct poolhd *pool, struct eval *val, for (; m < params.dp_count; m++) { struct desync_params *dp = ¶ms.dp[m]; - - switch (0) { - default: - if ((dp->detect & DETECT_HTTP_LOCAT) - && is_http_redirect(req, qn, resp, sn)) { - break; - } - else if ((dp->detect & DETECT_TLS_INVSID) - && neq_tls_sid(req, qn, resp, sn)) { - break; - } - else if ((dp->detect & DETECT_TLS_ALERT) - && is_tls_alert(resp, sn)) { - break; - } - else if (dp->detect & DETECT_HTTP_CLERR) { - int code = get_http_code(resp, sn); - if (code > 400 && code < 451 && code != 429) { - break; - } - } - continue; + if (!dp->detect) { + return -1; } - if ((!dp->hosts || check_host(dp->hosts, val->pair)) && - (!dp->proto || check_proto_tcp(dp->proto, val))) { + if ((dp->detect & DETECT_HTTP_LOCAT) + && is_http_redirect(req, qn, resp, sn)) { break; } + else if ((dp->detect & DETECT_TLS_INVSID) + && neq_tls_sid(req, qn, resp, sn)) { + break; + } + else if ((dp->detect & DETECT_TLS_ALERT) + && is_tls_alert(resp, sn)) { + break; + } + else if (dp->detect & DETECT_HTTP_CLERR) { + int code = get_http_code(resp, sn); + if (code > 400 && code < 451 && code != 429) { + break; + } + } } if (m < params.dp_count) { return reconnect(pool, val, m); @@ -382,10 +348,6 @@ int on_desync(struct poolhd *pool, struct eval *val, } val->attempt = m; - if (params.late_conn && val->recv_count == n) { - return ext_connect(pool, val, - (struct sockaddr_ina *)&val->in6, EV_DESYNC, m); - } return on_desync_again(pool, val, buffer, bfsize); } diff --git a/main.c b/main.c index 5b16748..5881a6d 100644 --- a/main.c +++ b/main.c @@ -74,7 +74,6 @@ const char help_text[] = { #ifdef TCP_FASTOPEN_CONNECT " -F, --tfo Enable TCP Fast Open\n" #endif - " -L, --late-conn Waiting for request before connecting\n" " -A, --auto[=t,r,c,s,a,n] Try desync params after this option\n" " Detect: torst,redirect,cl_err,sid_inv,alert,none\n" " -u, --cache-ttl <sec> Lifetime of cached desync params for IP\n" @@ -83,7 +82,6 @@ const char help_text[] = { #endif " -K, --proto[=t,h] Protocol whitelist: tls,http\n" " -H, --hosts <file|:str> Hosts whitelist\n" - " -D, --dst <ip[:port]> Custom destination IP\n" " -s, --split <n[+s]> Split packet at n\n" " +s - add SNI offset\n" " +h - add HTTP Host offset\n" @@ -121,7 +119,6 @@ const struct option options[] = { #ifdef TCP_FASTOPEN_CONNECT {"tfo ", 0, 0, 'F'}, #endif - {"late-conn", 0, 0, 'L'}, {"auto", 2, 0, 'A'}, {"cache-ttl", 1, 0, 'u'}, #ifdef TIMEOUT_SUPPORT @@ -129,7 +126,6 @@ const struct option options[] = { #endif {"proto", 2, 0, 'K'}, {"hosts", 1, 0, 'H'}, - {"dst", 1, 0, 'D'}, {"split", 1, 0, 's'}, {"disorder", 1, 0, 'd'}, {"oob", 1, 0, 'o'}, @@ -536,10 +532,6 @@ int main(int argc, char **argv) // desync options - case 'L': - params.late_conn = 1; - break; - case 'F': params.tfo = 1; break; @@ -646,13 +638,6 @@ int main(int argc, char **argv) } break; - case 'D': - if (get_addr_with_port(optarg, (struct sockaddr_ina *)&dp->addr) < 0) - invalid = 1; - else - dp->to_ip = 1; - break; - case 's': case 'd': case 'o': diff --git a/packets.c b/packets.c index 188fbdf..8c04977 100644 --- a/packets.c +++ b/packets.c @@ -346,8 +346,9 @@ bool neq_tls_sid(char *req, size_t qn, char *resp, size_t sn) bool is_tls_alert(char *resp, size_t sn) { - return (sn >= 7 - && !memcmp(resp, "\x15\x03\x01\x00\x02\x02", 6)); + return (sn >= 7 + && resp[0] == 0x15 && resp[1] == 0x03 + && !memcmp(resp + 3, "\x00\x02\x02", 3)); } /* diff --git a/params.h b/params.h index 0c664f3..3f62dad 100644 --- a/params.h +++ b/params.h @@ -70,9 +70,6 @@ struct desync_params { char *file_ptr; ssize_t file_size; - - char to_ip; - struct sockaddr_in6 addr; }; struct params { @@ -83,7 +80,6 @@ struct params { int def_ttl; char custom_ttl; - char late_conn; char tfo; unsigned int timeout; long cache_ttl; diff --git a/readme.txt b/readme.txt index 6b93b40..3801cc0 100644 --- a/readme.txt +++ b/readme.txt @@ -39,10 +39,6 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s Если сервер его поддерживает, то первый пакет будет отправлен сразу вместе с SYN Поддерживается только в Linux (4.11+) --L, --late-conn - Выполнять настоящее подключение только после получения первого пакета от клиента - Полезно при сочетании --hosts с --dst - -A, --auto[=t,r,c,s,a,n] Автоматический режим Если произошло событие, похожее на блокировку или поломку, @@ -77,10 +73,6 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s Ограничить область действия параметров списком доменов Домены должны быть разделены новой строкой или пробелом --D, --dst <ip> - Заменить адрес назначения из запроса на указанный - Полезно совмещать с --auto и --hosts - -s, --split <n[+s]> Разбить запрос по указанному смещению После числа можно добавить флаг: @@ -241,10 +233,6 @@ TCP может отсылать данные вне основного пото --hosts list.txt --auto=none --disorder 3 Не применять запутывание для доменов из list.txt ---late-conn --hosts ':one.one.one.one' --dst 1.1.1.1 --disorder 3 --auto=none --auto=torst --timeout 3 --tlsrec 1+s -Для указанного домена применять disorder, подключаясь только на указанный IP и игнорируя адрес из запроса. -Для остальных ничего не делать, однако если обнаружится блокировка, то попробовать применить tlsrec. - --auto=torst --hosts list.txt --disorder 3 По умолчанию ничего не делать, использовать disorder при условии, что произошла блокировка и домен входит в list.txt.