mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 18:45:40 +08:00
Added IPv6 support for 'external' command and -e
Now, 2 external addresses can be specified: one for IPv4 and one for IPv6
This commit is contained in:
parent
a425dc40b3
commit
f1e017394d
13
src/3proxy.c
13
src/3proxy.c
@ -732,7 +732,16 @@ static int h_internal(int argc, unsigned char ** argv){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int h_external(int argc, unsigned char ** argv){
|
static int h_external(int argc, unsigned char ** argv){
|
||||||
conf.extip = getip(argv[1]);
|
int res;
|
||||||
|
#ifndef NOIPV6
|
||||||
|
struct sockaddr_in6 sa6;
|
||||||
|
res = getip46(46, argv[1], (struct sockaddr *)&sa6);
|
||||||
|
if(!res) return 1;
|
||||||
|
memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&conf.extsa:(void *)&conf.extsa6, &sa6, SASIZE(&sa6));
|
||||||
|
#else
|
||||||
|
res = getip46(46, argv[1], (struct sockaddr *)&conf.extsa);
|
||||||
|
if(!res) return 1;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2040,7 +2049,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
|
|||||||
|
|
||||||
{
|
{
|
||||||
char * args[] = {"auth", "iponly", NULL};
|
char * args[] = {"auth", "iponly", NULL};
|
||||||
h_auth(2, args);
|
h_auth(2, (unsigned char **)args);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = readconfig(fp);
|
res = readconfig(fp);
|
||||||
|
@ -65,9 +65,11 @@ struct extparam conf = {
|
|||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
NONE, NONE,
|
NONE, NONE,
|
||||||
NULL,
|
NULL,
|
||||||
{AF_INET},
|
#ifndef NOIPV6
|
||||||
INADDR_ANY,
|
{AF_INET},{AF_INET6},{AF_INET},
|
||||||
0,
|
#else
|
||||||
|
{AF_INET},{AF_INET},
|
||||||
|
#endif
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
doconnect,
|
doconnect,
|
||||||
|
@ -564,12 +564,12 @@ static void * ef_server_intsa(struct node * node){
|
|||||||
return &((struct srvparam *)node->value) -> intsa;
|
return &((struct srvparam *)node->value) -> intsa;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * ef_server_extip(struct node * node){
|
static void * ef_server_extsa(struct node * node){
|
||||||
return &((struct srvparam *)node->value) -> extip;
|
return &((struct srvparam *)node->value) -> extsa;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * ef_server_extport(struct node * node){
|
static void * ef_server_extsa6(struct node * node){
|
||||||
return &((struct srvparam *)node->value) -> extport;
|
return &((struct srvparam *)node->value) -> extsa6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * ef_server_acl(struct node * node){
|
static void * ef_server_acl(struct node * node){
|
||||||
@ -754,8 +754,8 @@ static struct property prop_server[] = {
|
|||||||
{prop_server + 3, "targetport", ef_server_targetport, TYPE_PORT, "portmapper target port"},
|
{prop_server + 3, "targetport", ef_server_targetport, TYPE_PORT, "portmapper target port"},
|
||||||
{prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"},
|
{prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"},
|
||||||
{prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"},
|
{prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"},
|
||||||
{prop_server + 6, "extip", ef_server_extip, TYPE_IP, "ip address of external interface"},
|
{prop_server + 6, "extsa", ef_server_extsa, TYPE_SA, "ip address of external interface"},
|
||||||
{prop_server + 7, "extport", ef_server_extport, TYPE_PORT, "port to use for outgoing connection"},
|
{prop_server + 7, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"},
|
||||||
{prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"},
|
{prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"},
|
||||||
{prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"},
|
{prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"},
|
||||||
{prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"},
|
{prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"},
|
||||||
|
@ -176,7 +176,15 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
getip46(46, argv[i]+2, (struct sockaddr *)&srv.intsa);
|
getip46(46, argv[i]+2, (struct sockaddr *)&srv.intsa);
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
srv.extip = getip((unsigned char *)argv[i]+2);
|
{
|
||||||
|
#ifndef NOIPV6
|
||||||
|
struct sockaddr_in6 sa6;
|
||||||
|
error = !getip46(46, argv[i]+2, (struct sockaddr *)&sa6);
|
||||||
|
if(!error) memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&srv.extsa:(void *)&srv.extsa6, &sa6, SASIZE(&sa6));
|
||||||
|
#else
|
||||||
|
error = !getip46(46, argv[i]+2, (struct sockaddr *)&srv.extsa);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
*SAPORT(&srv.intsa) = htons(atoi(argv[i]+2));
|
*SAPORT(&srv.intsa) = htons(atoi(argv[i]+2));
|
||||||
@ -313,6 +321,10 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
srvinit2(&srv, &defparam);
|
srvinit2(&srv, &defparam);
|
||||||
if(!*SAFAMILY(&srv.intsa)) *SAFAMILY(&srv.intsa) = AF_INET;
|
if(!*SAFAMILY(&srv.intsa)) *SAFAMILY(&srv.intsa) = AF_INET;
|
||||||
if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port);
|
if(!*SAPORT(&srv.intsa)) *SAPORT(&srv.intsa) = htons(childdef.port);
|
||||||
|
*SAFAMILY(&srv.extsa) = AF_INET;
|
||||||
|
#ifndef NOIPV6
|
||||||
|
*SAFAMILY(&srv.extsa6) = AF_INET6;
|
||||||
|
#endif
|
||||||
if(hostname)parsehostname(hostname, &defparam, childdef.port);
|
if(hostname)parsehostname(hostname, &defparam, childdef.port);
|
||||||
|
|
||||||
|
|
||||||
@ -535,6 +547,10 @@ void srvinit(struct srvparam * srv, struct clientparam *param){
|
|||||||
*SAFAMILY(¶m->req) = *SAFAMILY(¶m->sins) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET;
|
*SAFAMILY(¶m->req) = *SAFAMILY(¶m->sins) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET;
|
||||||
pthread_mutex_init(&srv->counter_mutex, NULL);
|
pthread_mutex_init(&srv->counter_mutex, NULL);
|
||||||
memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa));
|
memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa));
|
||||||
|
memcpy(&srv->extsa, &conf.extsa, sizeof(srv->extsa));
|
||||||
|
#ifndef NOIPV6
|
||||||
|
memcpy(&srv->extsa6, &conf.extsa6, sizeof(srv->extsa6));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void srvinit2(struct srvparam * srv, struct clientparam *param){
|
void srvinit2(struct srvparam * srv, struct clientparam *param){
|
||||||
@ -550,12 +566,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
|
|||||||
else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat);
|
else srv->logformat = (unsigned char *)mystrdup((char *)srv->logformat);
|
||||||
}
|
}
|
||||||
if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget);
|
if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget);
|
||||||
if(!*SAFAMILY(&srv->intsa)) *SAFAMILY(&srv->intsa) = AF_INET;
|
|
||||||
memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr));
|
memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr));
|
||||||
if(!srv->extip) srv->extip = conf.extip;
|
/* FIX ME */
|
||||||
param->sins.sin_addr.s_addr = param->extip = srv->extip;
|
memcpy(¶m->sins, &srv->extsa, sizeof(param->sins));
|
||||||
if(!srv->extport) srv->extport = htons(conf.extport);
|
|
||||||
param->sins.sin_port = param->extport = srv->extport;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void srvfree(struct srvparam * srv){
|
void srvfree(struct srvparam * srv){
|
||||||
@ -858,9 +871,13 @@ void freeconf(struct extparam *confp){
|
|||||||
confp->authfunc = ipauth;
|
confp->authfunc = ipauth;
|
||||||
confp->bandlimfunc = NULL;
|
confp->bandlimfunc = NULL;
|
||||||
memset(&confp->intsa, 0, sizeof(confp->intsa));
|
memset(&confp->intsa, 0, sizeof(confp->intsa));
|
||||||
|
memset(&confp->extsa, 0, sizeof(confp->extsa));
|
||||||
|
#ifndef NOIPV6
|
||||||
|
memset(&confp->extsa6, 0, sizeof(confp->extsa6));
|
||||||
|
*SAFAMILY(&confp->extsa6) = AF_INET6;
|
||||||
|
#endif
|
||||||
*SAFAMILY(&confp->intsa) = AF_INET;
|
*SAFAMILY(&confp->intsa) = AF_INET;
|
||||||
confp->extip = 0;
|
*SAFAMILY(&confp->extsa) = AF_INET;
|
||||||
*SAPORT(&confp->intsa) = confp->extport = 0;
|
|
||||||
confp->singlepacket = 0;
|
confp->singlepacket = 0;
|
||||||
confp->maxchild = 100;
|
confp->maxchild = 100;
|
||||||
resolvfunc = NULL;
|
resolvfunc = NULL;
|
||||||
|
@ -356,10 +356,11 @@ struct srvparam {
|
|||||||
unsigned logdumpsrv, logdumpcli;
|
unsigned logdumpsrv, logdumpcli;
|
||||||
#ifndef NOIPV6
|
#ifndef NOIPV6
|
||||||
struct sockaddr_in6 intsa;
|
struct sockaddr_in6 intsa;
|
||||||
|
struct sockaddr_in6 extsa6;
|
||||||
#else
|
#else
|
||||||
struct sockaddr_in intsa;
|
struct sockaddr_in intsa;
|
||||||
#endif
|
#endif
|
||||||
unsigned long extip;
|
struct sockaddr_in extsa;
|
||||||
pthread_mutex_t counter_mutex;
|
pthread_mutex_t counter_mutex;
|
||||||
struct pollfd fds;
|
struct pollfd fds;
|
||||||
FILE *stdlog;
|
FILE *stdlog;
|
||||||
@ -372,7 +373,6 @@ struct srvparam {
|
|||||||
unsigned char * logformat;
|
unsigned char * logformat;
|
||||||
unsigned char * logtarget;
|
unsigned char * logtarget;
|
||||||
unsigned char * nonprintable;
|
unsigned char * nonprintable;
|
||||||
unsigned short extport;
|
|
||||||
unsigned short targetport;
|
unsigned short targetport;
|
||||||
unsigned char replace;
|
unsigned char replace;
|
||||||
time_t time_start;
|
time_t time_start;
|
||||||
@ -484,11 +484,11 @@ struct extparam {
|
|||||||
char * counterfile;
|
char * counterfile;
|
||||||
#ifndef NOIPV6
|
#ifndef NOIPV6
|
||||||
struct sockaddr_in6 intsa;
|
struct sockaddr_in6 intsa;
|
||||||
|
struct sockaddr_in6 extsa6;
|
||||||
#else
|
#else
|
||||||
struct sockaddr_in intsa;
|
struct sockaddr_in intsa;
|
||||||
#endif
|
#endif
|
||||||
unsigned long extip;
|
struct sockaddr_in extsa;
|
||||||
unsigned short extport;
|
|
||||||
struct passwords *pwl;
|
struct passwords *pwl;
|
||||||
struct auth * authenticate;
|
struct auth * authenticate;
|
||||||
AUTHFUNC authfunc;
|
AUTHFUNC authfunc;
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
#define VERSION "3proxy-0.8b-devel"
|
#define VERSION "3proxy-0.8b-devel"
|
||||||
#define BUILDDATE "140703033508"
|
#define BUILDDATE "141019042604"
|
||||||
|
Loading…
Reference in New Issue
Block a user