mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-24 02:55:40 +08:00
Force use of IPv6 translated address instead of IPv4 with -6
This commit is contained in:
parent
d6df311ba7
commit
40f9430623
@ -779,7 +779,7 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){
|
|||||||
|
|
||||||
if(!sa) return 0;
|
if(!sa) return 0;
|
||||||
if(!family) {
|
if(!family) {
|
||||||
family = AF_INET;
|
family = 4;
|
||||||
#else
|
#else
|
||||||
((struct sockaddr_in *)sa)->sin_family = AF_INET;
|
((struct sockaddr_in *)sa)->sin_family = AF_INET;
|
||||||
return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0;
|
return (((struct sockaddr_in *)sa)->sin_addr.s_addr = getip(name))? AF_INET:0;
|
||||||
@ -806,8 +806,8 @@ unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){
|
|||||||
}
|
}
|
||||||
if(!name[i]){
|
if(!name[i]){
|
||||||
if(ndots == 3 && ncols == 0 && nhex == 0){
|
if(ndots == 3 && ncols == 0 && nhex == 0){
|
||||||
*SAFAMILY(sa)=AF_INET;
|
*SAFAMILY(sa)=(family == 6)?AF_INET6 : AF_INET;
|
||||||
return inet_pton(AF_INET, name, SAADDR(sa))? (family==6? 0:AF_INET) : 0;
|
return inet_pton(*SAFAMILY(sa), name, SAADDR(sa))? *SAFAMILY(sa) : 0;
|
||||||
}
|
}
|
||||||
if(ncols >= 2) {
|
if(ncols >= 2) {
|
||||||
*SAFAMILY(sa)=AF_INET6;
|
*SAFAMILY(sa)=AF_INET6;
|
||||||
|
22
src/socks.c
22
src/socks.c
@ -90,18 +90,36 @@ void * sockschild(struct clientparam* param) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size = 4;
|
size = 4;
|
||||||
|
*SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET;
|
||||||
switch(c) {
|
switch(c) {
|
||||||
|
#ifndef NOIPV6
|
||||||
case 4:
|
case 4:
|
||||||
|
if(param->srv->family == 4) RETURN(997);
|
||||||
size = 16;
|
size = 16;
|
||||||
|
*SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET6;
|
||||||
|
#endif
|
||||||
case 1:
|
case 1:
|
||||||
for (i = 0; i<size; i++){
|
for (i = 0; i<size; i++){
|
||||||
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
||||||
buf[i] = (unsigned char)res;
|
buf[i] = (unsigned char)res;
|
||||||
}
|
}
|
||||||
*SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = (c == 1)? AF_INET:AF_INET6;
|
#ifndef NOIPV6
|
||||||
|
if (c == 1 && param->srv->family==6){
|
||||||
|
char prefix[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255};
|
||||||
|
*SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->req) = AF_INET6;
|
||||||
|
memcpy(SAADDR(¶m->sinsr), prefix, 12);
|
||||||
|
memcpy(12 + (char *)SAADDR(¶m->sinsr), buf, 4);
|
||||||
|
memcpy(SAADDR(¶m->req), prefix, 12);
|
||||||
|
memcpy(12 + (char *)SAADDR(¶m->req), buf, 4);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#endif
|
||||||
memcpy(SAADDR(¶m->sinsr), buf, size);
|
memcpy(SAADDR(¶m->sinsr), buf, size);
|
||||||
memcpy(SAADDR(¶m->req), buf, size);
|
memcpy(SAADDR(¶m->req), buf, size);
|
||||||
if(command==1 && SAISNULL(¶m->req)) {
|
#ifndef NOIPV6
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(SAISNULL(¶m->req)) {
|
||||||
RETURN(421);
|
RETURN(421);
|
||||||
}
|
}
|
||||||
myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf, 64);
|
myinet_ntop(*SAFAMILY(¶m->sinsr), SAADDR(¶m->sinsr), (char *)buf, 64);
|
||||||
|
Loading…
Reference in New Issue
Block a user