mirror of
https://github.com/hufrea/byedpi.git
synced 2025-01-19 09:11:53 +00:00
Remove --dst, fix auto, ignore tls minor version in alert
This commit is contained in:
parent
4b13c2127a
commit
05a248de6f
88
extend.c
88
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);
|
||||
}
|
||||
|
||||
|
15
main.c
15
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':
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
/*
|
||||
|
4
params.h
4
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;
|
||||
|
12
readme.txt
12
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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user