mirror of
https://github.com/hufrea/byedpi.git
synced 2025-01-03 04:49:47 +00:00
clear params before exit, update readme.txt
This commit is contained in:
parent
e031e7d235
commit
d4e3ac5a85
87
main.c
87
main.c
@ -25,6 +25,9 @@
|
||||
#define VERSION 7
|
||||
#define MPOOL_INC 16
|
||||
|
||||
char oob_char[1] = "a";
|
||||
|
||||
char ip_option[1] = "\0";
|
||||
|
||||
struct packet fake_tls = {
|
||||
sizeof(tls_data), tls_data
|
||||
@ -33,20 +36,14 @@ fake_http = {
|
||||
sizeof(http_data), http_data
|
||||
},
|
||||
oob_data = {
|
||||
1, "a"
|
||||
sizeof(oob_char), oob_char
|
||||
};
|
||||
char ip_option[1] = "\0";
|
||||
|
||||
|
||||
struct params params = {
|
||||
.sfdelay = 3,
|
||||
.wait_send = 1,
|
||||
.def_ttl = 0,
|
||||
.custom_ttl = 0,
|
||||
.de_known = 0,
|
||||
|
||||
.tfo = 0,
|
||||
.timeout = 0,
|
||||
.cache_ttl = 100800,
|
||||
.ipv6 = 1,
|
||||
.resolve = 1,
|
||||
@ -300,6 +297,55 @@ void *add(void **root, int *n, size_t ss)
|
||||
}
|
||||
|
||||
|
||||
void clear_params(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
if (params.mempool) {
|
||||
mem_destroy(params.mempool);
|
||||
params.mempool = 0;
|
||||
}
|
||||
if (params.spos) {
|
||||
for (int i = 0; i < params.spos_n; i++) {
|
||||
struct spos s = params.spos[i];
|
||||
if (!s.data) continue;
|
||||
free(s.data);
|
||||
s.data = 0;
|
||||
}
|
||||
free(params.spos);
|
||||
params.spos = 0;
|
||||
}
|
||||
if (params.dp) {
|
||||
for (int i = 0; i < params.dp_count; i++) {
|
||||
struct desync_params s = params.dp[i];
|
||||
if (s.ip_options != ip_option) {
|
||||
free(s.ip_options);
|
||||
s.ip_options = ip_option;
|
||||
}
|
||||
if (!s.parts) {
|
||||
free(s.parts);
|
||||
s.parts = 0;
|
||||
}
|
||||
}
|
||||
free(params.dp);
|
||||
params.dp = 0;
|
||||
}
|
||||
if (fake_tls.data != tls_data) {
|
||||
free(fake_tls.data);
|
||||
fake_tls.data = tls_data;
|
||||
}
|
||||
if (fake_http.data != http_data) {
|
||||
free(fake_http.data);
|
||||
fake_http.data = http_data;
|
||||
}
|
||||
if (oob_data.data != oob_char) {
|
||||
free(oob_data.data);
|
||||
oob_data.data = oob_char;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
@ -343,6 +389,7 @@ int main(int argc, char **argv)
|
||||
struct desync_params *dp = add((void *)¶ms.dp,
|
||||
¶ms.dp_count, sizeof(struct desync_params));
|
||||
if (!dp) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
while (!invalid && (rez = getopt_long_only(
|
||||
@ -357,9 +404,11 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
case 'h':
|
||||
printf(help_text);
|
||||
clear_params();
|
||||
return 0;
|
||||
case 'v':
|
||||
printf("%d\n", VERSION);
|
||||
clear_params();
|
||||
return 0;
|
||||
|
||||
case 'i':
|
||||
@ -418,6 +467,7 @@ int main(int argc, char **argv)
|
||||
dp = add((void *)¶ms.dp, ¶ms.dp_count,
|
||||
sizeof(struct desync_params));
|
||||
if (!dp) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
@ -447,6 +497,7 @@ int main(int argc, char **argv)
|
||||
struct spos *spos = add((void *)¶ms.spos,
|
||||
¶ms.spos_n, sizeof(struct spos));
|
||||
if (!spos) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
sscanf(optarg, "%zi:%zi:%zn", &spos->start, &spos->end, &val);
|
||||
@ -457,7 +508,7 @@ int main(int argc, char **argv)
|
||||
spos->data = ftob(&optarg[val], &spos->size);
|
||||
if (!spos->data) {
|
||||
uniperror("read/parse");
|
||||
return -1;
|
||||
invalid = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -470,6 +521,7 @@ int main(int argc, char **argv)
|
||||
struct part *part = add((void *)&dp->parts,
|
||||
&dp->parts_n, sizeof(struct part));
|
||||
if (!part) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
if (parse_offset(part, optarg)) {
|
||||
@ -504,7 +556,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
if (!dp->ip_options) {
|
||||
uniperror("read/parse");
|
||||
return -1;
|
||||
invalid = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -515,6 +567,7 @@ int main(int argc, char **argv)
|
||||
case 'n':
|
||||
if (change_tls_sni(optarg, fake_tls.data, fake_tls.size)) {
|
||||
fprintf(stderr, "error chsni\n");
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
printf("sni: %s\n", optarg);
|
||||
@ -524,7 +577,7 @@ int main(int argc, char **argv)
|
||||
fake_tls.data = ftob(optarg, &fake_tls.size);
|
||||
if (!fake_tls.data) {
|
||||
uniperror("read/parse");
|
||||
return -1;
|
||||
invalid = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -532,7 +585,7 @@ int main(int argc, char **argv)
|
||||
fake_http.data = ftob(optarg, &fake_http.size);
|
||||
if (!fake_http.data) {
|
||||
uniperror("read/parse");
|
||||
return -1;
|
||||
invalid = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -540,7 +593,7 @@ int main(int argc, char **argv)
|
||||
oob_data.data = ftob(optarg, &oob_data.size);
|
||||
if (!oob_data.data) {
|
||||
uniperror("read/parse");
|
||||
return -1;
|
||||
invalid = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -570,6 +623,7 @@ int main(int argc, char **argv)
|
||||
part = add((void *)&dp->tlsrec,
|
||||
&dp->tlsrec_n, sizeof(struct part));
|
||||
if (!part) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
if (parse_offset(part, optarg)
|
||||
@ -604,15 +658,18 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
|
||||
case '?':
|
||||
clear_params();
|
||||
return -1;
|
||||
|
||||
default:
|
||||
printf("?: %c\n", rez);
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (invalid) {
|
||||
fprintf(stderr, "invalid value: -%c %s\n", rez, optarg);
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
s.in.sin_port = port;
|
||||
@ -623,17 +680,17 @@ int main(int argc, char **argv)
|
||||
}
|
||||
if (!params.def_ttl) {
|
||||
if ((params.def_ttl = get_default_ttl()) < 1) {
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
params.mempool = mem_pool(MPOOL_INC);
|
||||
if (!params.mempool) {
|
||||
uniperror("mem_pool");
|
||||
clear_params();
|
||||
return -1;
|
||||
}
|
||||
int status = run(&s);
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
clear_params();
|
||||
return status;
|
||||
}
|
||||
|
13
mpool.c
13
mpool.c
@ -113,3 +113,16 @@ void mem_delete(struct mphdr *hdr, int pos)
|
||||
}
|
||||
hdr->count--;
|
||||
}
|
||||
|
||||
|
||||
void mem_destroy(struct mphdr *hdr)
|
||||
{
|
||||
for (int i = 0; i < hdr->count; i++) {
|
||||
struct elem *e = hdr->values[i];
|
||||
if (!e) {
|
||||
continue;
|
||||
}
|
||||
free(e);
|
||||
hdr->values[i] = 0;
|
||||
}
|
||||
}
|
1
mpool.h
1
mpool.h
@ -16,3 +16,4 @@ struct mphdr *mem_pool(int count);
|
||||
int mem_index(struct mphdr *hdr, char *str, int len);
|
||||
struct elem *mem_add(struct mphdr *hdr, char *str, int len, int pos);
|
||||
void mem_delete(struct mphdr *hdr, int pos);
|
||||
void mem_destroy(struct mphdr *hdr);
|
@ -47,7 +47,7 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
|
||||
Можно указывать несколько групп параметров, раделяя их данным флагом
|
||||
Если соединение успешно прошло, то параметры для данного IP будут закешированны
|
||||
Параметры, которые можно вынести в отдельную группу:
|
||||
split, disorder, oob, fake, ttl, ip-opt, mod-http, tlsrec
|
||||
split, disorder, oob, fake, ttl, ip-opt, md5sig, mod-http, tlsrec
|
||||
|
||||
-u, --cache-ttl <sec>
|
||||
Время жизни значения в кеше, по умолчанию 100800 (28 часов)
|
||||
@ -88,10 +88,12 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
|
||||
Установить опции для фейкового IP пакета
|
||||
Существенно снизит вероятность, что пакет дойдет до сервера
|
||||
Стоит учесть, что до DPI он также может не дойти
|
||||
В Windows поддержка может быть отключена
|
||||
|
||||
-S, --md5sig
|
||||
Установить опцию TCP MD5 Signature для фейкового пакета
|
||||
Поддерживается в Linux, однако может быть выключен в некоторых сборках
|
||||
Большинство серверов (в основном на Linux) отбрасывают пакеты с данной опцией
|
||||
Поддерживается только в Linux, может быть выключен в некоторых сборках ядра (< 3.9, Android)
|
||||
|
||||
-l, --fake-tls <file|:str>
|
||||
-j, --fake-http <file|:str>
|
||||
|
Loading…
Reference in New Issue
Block a user