Просмотр исходного кода

-N(NAT_address) option added for socks

z3APA3A 5 лет назад
Родитель
Сommit
ebd7b34159
3 измененных файлов с 8 добавлено и 3 удалено
  1. 3 0
      src/proxymain.c
  2. 3 3
      src/socks.c
  3. 2 0
      src/structures.h

+ 3 - 0
src/proxymain.c

@@ -346,6 +346,9 @@ int MODULEMAINFUNC (int argc, char** argv){
 #endif
 			}
 			break;
+		 case 'N':
+			getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&srv.extNat);
+			break;
 		 case 'p':
 			*SAPORT(&srv.intsa) = htons(atoi(argv[i]+2));
 			break;

+ 3 - 3
src/socks.c

@@ -173,9 +173,9 @@ void * sockschild(struct clientparam* param) {
 	case 3:
 
 #ifndef NOIPV6	 
-	 param->sinsl = *SAFAMILY(&param->req)==AF_INET6? param->srv->extsa6 : param->srv->extsa;
+	 param->sinsl = *SAFAMILY(&param->req)==AF_INET6? param->srv->extsa6 : (SAISNULL(&param->srv->extNat)?param->srv->extsa:param->srv->extNat);
 #else
-	 param->sinsl = param->srv->extsa;
+	 param->sinsl = SAISNULL(&param->srv->extNat)?param->srv->extsa:param->srv->extNat;
 #endif
 	 if ((param->remsock=so._socket(SASOCK(&param->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);}
 	 param->operation = command == 2?BIND:UDPASSOC;
@@ -461,7 +461,7 @@ struct proxydef childdef = {
 	1080,
 	0,
 	S_SOCKS,
-	""
+	"-N(EXTERNAL_IP) External NAT address to report to client for BIND\n"
 };
 #include "proxymain.c"
 #endif

+ 2 - 0
src/structures.h

@@ -445,9 +445,11 @@ struct srvparam {
 	struct sockaddr_in6 intsa;
 	struct sockaddr_in6 extsa6;
 	struct sockaddr_in6 extsa;
+	struct sockaddr_in6 extNat;
 #else
 	struct sockaddr_in intsa;
 	struct sockaddr_in extsa;
+	struct sockaddr_in extNat;
 #endif
 	pthread_mutex_t counter_mutex;
 	struct pollfd fds;