mirror of
https://github.com/hufrea/byedpi.git
synced 2024-12-22 06:15:14 +00:00
get addr for md5sig with getpeername
This commit is contained in:
parent
a909f44b35
commit
6f8176a053
23
desync.c
23
desync.c
@ -120,10 +120,17 @@ void wait_send(int sfd)
|
||||
|
||||
#ifdef __linux__
|
||||
ssize_t send_fake(int sfd, char *buffer,
|
||||
int cnt, long pos, struct sockaddr *dst, struct desync_params *opt)
|
||||
int cnt, long pos, int fa, struct desync_params *opt)
|
||||
{
|
||||
int fa = get_family(dst);
|
||||
|
||||
struct sockaddr_in6 addr = {};
|
||||
socklen_t addr_size = sizeof(addr);
|
||||
if (opt->md5sig) {
|
||||
if (getpeername(sfd,
|
||||
(struct sockaddr *)&addr, &addr_size) < 0) {
|
||||
uniperror("getpeername");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
struct packet pkt = cnt != IS_HTTP ? fake_tls : fake_http;
|
||||
size_t psz = pkt.size;
|
||||
|
||||
@ -155,7 +162,7 @@ ssize_t send_fake(int sfd, char *buffer,
|
||||
struct tcp_md5sig md5 = {
|
||||
.tcpm_keylen = 5
|
||||
};
|
||||
memcpy(&md5.tcpm_addr, dst, sizeof(struct sockaddr_in6));
|
||||
memcpy(&md5.tcpm_addr, &addr, addr_size);
|
||||
|
||||
if (setsockopt(sfd, IPPROTO_TCP,
|
||||
TCP_MD5SIG, (char *)&md5, sizeof(md5)) < 0) {
|
||||
@ -191,7 +198,7 @@ ssize_t send_fake(int sfd, char *buffer,
|
||||
struct tcp_md5sig md5 = {
|
||||
.tcpm_keylen = 0
|
||||
};
|
||||
memcpy(&md5.tcpm_addr, dst, sizeof(struct sockaddr_in6));
|
||||
memcpy(&md5.tcpm_addr, &addr, addr_size);
|
||||
|
||||
if (setsockopt(sfd, IPPROTO_TCP,
|
||||
TCP_MD5SIG, (char *)&md5, sizeof(md5)) < 0) {
|
||||
@ -209,10 +216,8 @@ ssize_t send_fake(int sfd, char *buffer,
|
||||
|
||||
#ifdef _WIN32
|
||||
ssize_t send_fake(int sfd, char *buffer,
|
||||
int cnt, long pos, struct sockaddr *dst, struct desync_params *opt)
|
||||
int cnt, long pos, int fa, struct desync_params *opt)
|
||||
{
|
||||
int fa = get_family(dst);
|
||||
|
||||
struct packet pkt = cnt != IS_HTTP ? fake_tls : fake_http;
|
||||
size_t psz = pkt.size;
|
||||
|
||||
@ -473,7 +478,7 @@ ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
||||
#ifdef FAKE_SUPPORT
|
||||
case DESYNC_FAKE:
|
||||
s = send_fake(sfd,
|
||||
buffer + lp, type, pos - lp, dst, &dp);
|
||||
buffer + lp, type, pos - lp, fa, &dp);
|
||||
break;
|
||||
#endif
|
||||
case DESYNC_DISORDER:
|
||||
|
27
proxy.c
27
proxy.c
@ -372,7 +372,7 @@ int create_conn(struct poolhd *pool,
|
||||
}
|
||||
val->pair = pair;
|
||||
pair->pair = val;
|
||||
pair->in6 = addr.in6;
|
||||
pair->in6 = dst->in6;
|
||||
pair->flag = FLAG_CONN;
|
||||
return 0;
|
||||
}
|
||||
@ -506,18 +506,14 @@ int mode_add_get(struct sockaddr_ina *dst, int m)
|
||||
int len;
|
||||
time_t t;
|
||||
struct elem *val;
|
||||
struct sockaddr_ina val_addr = *dst;
|
||||
|
||||
if (val_addr.sa.sa_family == AF_INET6) {
|
||||
map_fix(&val_addr, 0);
|
||||
}
|
||||
if (val_addr.sa.sa_family == AF_INET) {
|
||||
data = (char *)(&val_addr.in.sin_addr);
|
||||
len = sizeof(val_addr.in.sin_addr);
|
||||
if (dst->sa.sa_family == AF_INET) {
|
||||
data = (char *)(&dst->in.sin_addr);
|
||||
len = sizeof(dst->in.sin_addr);
|
||||
}
|
||||
else {
|
||||
data = (char *)(&val_addr.in6.sin6_addr);
|
||||
len = sizeof(val_addr.in6.sin6_addr);
|
||||
data = (char *)(&dst->in6.sin6_addr);
|
||||
len = sizeof(dst->in6.sin6_addr);
|
||||
}
|
||||
int i = mem_index(params.mempool, data, len);
|
||||
if (m == 0 && i >= 0) {
|
||||
@ -579,11 +575,9 @@ static inline int on_request(struct poolhd *pool, struct eval *val,
|
||||
return -1;
|
||||
}
|
||||
if (error) {
|
||||
if (val->flag == FLAG_S4
|
||||
&& resp_error(val->fd, error, FLAG_S4) < 0) {
|
||||
uniperror("send");
|
||||
}
|
||||
else if (resp_s5_error(val->fd, error) < 0) {
|
||||
if ((val->flag == FLAG_S4
|
||||
&& resp_error(val->fd, error, FLAG_S4) < 0)
|
||||
|| (resp_s5_error(val->fd, error) < 0)) {
|
||||
uniperror("send");
|
||||
}
|
||||
return -1;
|
||||
@ -593,7 +587,8 @@ static inline int on_request(struct poolhd *pool, struct eval *val,
|
||||
|
||||
error = create_conn(pool, val, &dst, EV_CONNECT, dp.mss);
|
||||
if (error) {
|
||||
if (resp_error(val->fd, error, val->flag) < 0)
|
||||
int en = get_e();
|
||||
if (resp_error(val->fd, en ? en : error, val->flag) < 0)
|
||||
uniperror("send");
|
||||
return -1;
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
|
||||
Можно указывать несколько групп параметров, раделяя их данным флагом
|
||||
Если соединение успешно прошло, то параметры для данного IP будут закешированны
|
||||
Параметры, которые можно вынести в отдельную группу:
|
||||
split, disorder, oob, fake, ttl, ip-opt, md5sig, mod-http, tlsrec
|
||||
tr, split, disorder, oob, fake, ttl, ip-opt, md5sig, mod-http, tlsrec
|
||||
|
||||
-u, --cache-ttl <sec>
|
||||
Время жизни значения в кеше, по умолчанию 100800 (28 часов)
|
||||
@ -59,7 +59,7 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
|
||||
|
||||
-P, --tr <s:e:file|:str>
|
||||
Поиск строки в первом ответе от сервера, начиная с s и заканчивая e
|
||||
Является триггером для --auto
|
||||
Является триггером для --auto в указнной группе
|
||||
|
||||
-s, --split <n[+s]>
|
||||
Разбить запрос по указанному смещению
|
||||
@ -123,6 +123,7 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
|
||||
Установить опцию MSS для TCP соединения
|
||||
Можно использовать для того, чтобы вынудить сервер разбить свой ответ
|
||||
При низких значениях сильно сказывается на скорости
|
||||
Поддерживается только в Linux
|
||||
|
||||
-------
|
||||
Сборка:
|
||||
|
Loading…
Reference in New Issue
Block a user