mirror of
https://github.com/hufrea/byedpi.git
synced 2025-08-29 14:55:50 +00:00
Add global delay
This reverts commit7561bb68f8
. This reverts commitdd4ee517fe
. This reverts commit02daba5eab
.
This commit is contained in:
parent
d6767985d1
commit
15ca6043b8
@ -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 отрицательный и не имеет флагов, то к нему прибавляется размер пакета
|
||||||
|
|
||||||
|
14
desync.c
14
desync.c
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
72
main.c
72
main.c
@ -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,49 +491,32 @@ int parse_offset(struct part *part, const char *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*end == '+') {
|
if (*end == '+') {
|
||||||
end++;
|
switch (*(end + 1)) {
|
||||||
if (*end) {
|
case 's':
|
||||||
switch (*end) {
|
part->flag = OFFSET_SNI;
|
||||||
case 's':
|
break;
|
||||||
part->flag = OFFSET_SNI;
|
case 'h':
|
||||||
break;
|
part->flag = OFFSET_HOST;
|
||||||
case 'h':
|
break;
|
||||||
part->flag = OFFSET_HOST;
|
case 'n':
|
||||||
break;
|
break;
|
||||||
case 'n':
|
default:
|
||||||
break;
|
return -1;
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
end++;
|
|
||||||
}
|
}
|
||||||
if (*end && *end != ',') {
|
switch (*(end + 2)) {
|
||||||
switch (*end) {
|
case 'e':
|
||||||
case 'e':
|
part->flag |= OFFSET_END;
|
||||||
part->flag |= OFFSET_END;
|
break;
|
||||||
break;
|
case 'm':
|
||||||
case 'm':
|
part->flag |= OFFSET_MID;
|
||||||
part->flag |= OFFSET_MID;
|
break;
|
||||||
break;
|
case 'r': //
|
||||||
case 'r': //
|
part->flag |= OFFSET_RAND;
|
||||||
part->flag |= OFFSET_RAND;
|
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,7 +1068,11 @@ int main(int argc, char **argv)
|
|||||||
dp->drop_sack = 1;
|
dp->drop_sack = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'W':
|
case 'Z':
|
||||||
|
params.wait_send = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'W':
|
||||||
params.await_int = atoi(optarg);
|
params.await_int = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
2
params.h
2
params.h
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user