0
0
mirror of https://github.com/hufrea/byedpi.git synced 2025-08-29 14:55:50 +00:00

Add global delay

This reverts commit 7561bb68f8.
This reverts commit dd4ee517fe.
This reverts commit 02daba5eab.
This commit is contained in:
ruti 2025-03-24 15:30:54 +00:00
parent d6767985d1
commit 15ca6043b8
4 changed files with 39 additions and 55 deletions

View File

@ -95,20 +95,16 @@ ciadpi --fake -1 --ttl 8
-s, --split <pos_t> -s, --split <pos_t>
Разбить запрос по указанной позиции Разбить запрос по указанной позиции
Позиция имеет вид offset[:repeats:skip][+flag1[flag2]][,delay_ms] Позиция имеет вид offset[:repeats:skip][+flag1[flag2]]
Флаги: Флаги:
+s: добавить смещение SNI +s: добавить смещение SNI
+h: добавить смещение Host +h: добавить смещение Host
+n: нулевое смещение +n: нулевое смещение
Дополнительные флаги: Дополнительные флаги:
+e: конец; +m: середина +e: конец; +m: середина
Если указано значение delay_ms > 0, после отправки каждой из частей, описываемых данным ключом,
добавляется задержка delay_ms миллисекунд перед отправкой следующей части
После последней части (когда больше нет данных для отправки) задержка не добавляется
Примеры: Примеры:
0+sm - разбить запрос в середине SNI 0+sm - разбить запрос в середине SNI
1:3:5 - разбить по позициям 1, 6 и 11 1:3:5 - разбить по позициям 1, 6 и 11
1+s,5 - разбить по позиции 1 и в середине SNI, задержка 5 мс после каждой части
Ключ можно указывать несколько раз, чтобы разбить запрос по нескольким позициям Ключ можно указывать несколько раз, чтобы разбить запрос по нескольким позициям
Если offset отрицательный и не имеет флагов, то к нему прибавляется размер пакета Если offset отрицательный и не имеет флагов, то к нему прибавляется размер пакета

View File

@ -531,7 +531,7 @@ ssize_t desync(struct poolhd *pool,
size_t bfsize = buff->size; size_t bfsize = buff->size;
ssize_t offset = buff->offset; ssize_t offset = buff->offset;
ssize_t skip = val->pair->round_sent; ssize_t skip = val->pair->round_sent;
int part_skip = val->pair->part_sent; unsigned int part_skip = val->pair->part_sent;
if (!skip && params.debug) { if (!skip && params.debug) {
init_proto_info(buffer, *np, &info); init_proto_info(buffer, *np, &info);
@ -552,7 +552,7 @@ ssize_t desync(struct poolhd *pool,
long lp = offset; long lp = offset;
struct part part; struct part part;
int i = 0, r = 0; int i = 0, r = 0;
int curr_part = -1; unsigned int curr_part = 0;
for (; r > 0 || i < dp.parts_n; r--) { for (; r > 0 || i < dp.parts_n; r--) {
if (r <= 0) { if (r <= 0) {
@ -560,11 +560,12 @@ ssize_t desync(struct poolhd *pool,
r = part.r; i++; r = part.r; i++;
} }
curr_part++; curr_part++;
long pos = gen_offset(part.pos, part.flag, buffer, n, lp, &info); long pos = gen_offset(part.pos, part.flag, buffer, n, lp, &info);
pos += (long )part.s * (part.r - r); pos += (long )part.s * (part.r - r);
if ((skip && pos <= skip) if ((skip && pos <= skip)
&& curr_part < part_skip && !(part.flag & OFFSET_START)) { && curr_part <= part_skip && !(part.flag & OFFSET_START)) {
continue; continue;
} }
if (offset && pos < offset) { if (offset && pos < offset) {
@ -609,7 +610,7 @@ ssize_t desync(struct poolhd *pool,
break; break;
} }
LOG(LOG_S, "split: pos=%ld-%ld (%zd), m: %s\n", lp, pos, s, demode_str[part.m]); LOG(LOG_S, "split: pos=%ld-%ld (%zd), m: %s\n", lp, pos, s, demode_str[part.m]);
val->pair->part_sent = curr_part + 1; val->pair->part_sent = curr_part;
if (s == ERR_WAIT) { if (s == ERR_WAIT) {
set_timer(pool, val, params.await_int); set_timer(pool, val, params.await_int);
@ -628,9 +629,8 @@ ssize_t desync(struct poolhd *pool,
} }
lp = pos; lp = pos;
if (part.delay > 0 && lp < n) { if (params.wait_send && lp < n) {
LOG(LOG_S, "delay: %d ms\n", part.delay); set_timer(pool, val, params.await_int);
set_timer(pool, val, part.delay);
return lp - offset; return lp - offset;
} }
} }

28
main.c
View File

@ -97,7 +97,7 @@ static const char help_text[] = {
" -j, --ipset <file|:str> IP whitelist\n" " -j, --ipset <file|:str> IP whitelist\n"
" -V, --pf <port[-portr]> Ports range whitelist\n" " -V, --pf <port[-portr]> Ports range whitelist\n"
" -R, --round <num[-numr]> Number of request to which desync will be applied\n" " -R, --round <num[-numr]> Number of request to which desync will be applied\n"
" -s, --split <pos_t> Position format: offset[:repeats:skip][+flag1[flag2]][,delay_ms]\n" " -s, --split <pos_t> Position format: offset[:repeats:skip][+flag1[flag2]]\n"
" Flags: +s - SNI offset, +h - HTTP host offset, +n - null\n" " Flags: +s - SNI offset, +h - HTTP host offset, +n - null\n"
" Additional flags: +e - end, +m - middle\n" " Additional flags: +e - end, +m - middle\n"
" -d, --disorder <pos_t> Split and send reverse order\n" " -d, --disorder <pos_t> Split and send reverse order\n"
@ -178,6 +178,7 @@ const struct option options[] = {
{"tlsrec", 1, 0, 'r'}, {"tlsrec", 1, 0, 'r'},
{"udp-fake", 1, 0, 'a'}, {"udp-fake", 1, 0, 'a'},
{"def-ttl", 1, 0, 'g'}, {"def-ttl", 1, 0, 'g'},
{"wait-send", 0, 0, 'Z'}, //
{"await-int", 1, 0, 'W'}, // {"await-int", 1, 0, 'W'}, //
#ifdef __linux__ #ifdef __linux__
{"drop-sack", 0, 0, 'Y'}, {"drop-sack", 0, 0, 'Y'},
@ -490,9 +491,7 @@ int parse_offset(struct part *part, const char *str)
} }
} }
if (*end == '+') { if (*end == '+') {
end++; switch (*(end + 1)) {
if (*end) {
switch (*end) {
case 's': case 's':
part->flag = OFFSET_SNI; part->flag = OFFSET_SNI;
break; break;
@ -504,10 +503,7 @@ int parse_offset(struct part *part, const char *str)
default: default:
return -1; return -1;
} }
end++; switch (*(end + 2)) {
}
if (*end && *end != ',') {
switch (*end) {
case 'e': case 'e':
part->flag |= OFFSET_END; part->flag |= OFFSET_END;
break; break;
@ -519,19 +515,7 @@ int parse_offset(struct part *part, const char *str)
break; break;
case 's': // case 's': //
part->flag |= OFFSET_START; part->flag |= OFFSET_START;
default:
return -1;
} }
end++;
}
}
if (*end == ',') {
end++;
long delay = strtol(end, &end, 0);
if (delay < 0 || delay > INT_MAX) {
return -1;
}
part->delay = delay;
} }
part->pos = val; part->pos = val;
return 0; return 0;
@ -1084,6 +1068,10 @@ int main(int argc, char **argv)
dp->drop_sack = 1; dp->drop_sack = 1;
break; break;
case 'Z':
params.wait_send = 1;
break;
case 'W': case 'W':
params.await_int = atoi(optarg); params.await_int = atoi(optarg);
break; break;

View File

@ -62,7 +62,6 @@ struct part {
int flag; int flag;
long pos; long pos;
int r, s; int r, s;
int delay;
}; };
struct packet { struct packet {
@ -103,6 +102,7 @@ struct params {
int dp_count; int dp_count;
struct desync_params *dp; struct desync_params *dp;
int await_int; int await_int;
bool wait_send;
int def_ttl; int def_ttl;
bool custom_ttl; bool custom_ttl;