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