Merge pull request #66 from kennylam777/master

Added support for dynamic ip
This commit is contained in:
wangyu- 2018-04-28 16:46:57 +08:00 committed by GitHub
commit 2c2d897bc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 19 deletions

View File

@ -91,8 +91,8 @@ git version:6e1df4b39f build date:Oct 24 2017 09:21:15
repository: https://github.com/wangyu-/udp2raw-tunnel repository: https://github.com/wangyu-/udp2raw-tunnel
usage: usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port [options] run as client : ./this_program -c -l local_listen_ip:local_port -r remote_host:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port [options] run as server : ./this_program -s -l server_listen_ip:server_port -r remote_host:remote_port [options]
common options,these options must be same on both side: common options,these options must be same on both side:
--raw-mode <string> avaliable values:faketcp(default),udp,icmp --raw-mode <string> avaliable values:faketcp(default),udp,icmp

View File

@ -24,6 +24,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <stdlib.h> //for exit(0); #include <stdlib.h> //for exit(0);
#include <errno.h> //For errno - the error number #include <errno.h> //For errno - the error number
#include <netdb.h> // for gethostbyname()
#include <netinet/tcp.h> //Provides declarations for tcp header #include <netinet/tcp.h> //Provides declarations for tcp header
#include <netinet/udp.h> #include <netinet/udp.h>
#include <netinet/ip.h> //Provides declarations for ip header #include <netinet/ip.h> //Provides declarations for ip header

View File

@ -119,8 +119,8 @@ git version:6e1df4b39f build date:Oct 24 2017 09:21:15
repository: https://github.com/wangyu-/udp2raw-tunnel repository: https://github.com/wangyu-/udp2raw-tunnel
usage: usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port [options] run as client : ./this_program -c -l local_listen_ip:local_port -r remote_host:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port [options] run as server : ./this_program -s -l server_listen_ip:server_port -r remote_host:remote_port [options]
common options,these options must be same on both side: common options,these options must be same on both side:
--raw-mode <string> avaliable values:faketcp(default),udp,icmp --raw-mode <string> avaliable values:faketcp(default),udp,icmp

View File

@ -826,6 +826,7 @@ int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,cha
tmp_conv_id); tmp_conv_id);
return 0; return 0;
} }
struct sockaddr_in remote_addr_in={0}; struct sockaddr_in remote_addr_in={0};
socklen_t slen = sizeof(sockaddr_in); socklen_t slen = sizeof(sockaddr_in);
@ -1072,7 +1073,7 @@ int client_event_loop()
{ {
if(find_lower_level_info(remote_ip_uint32,dest_ip,if_name_string,hw_string)!=0) if(find_lower_level_info(remote_ip_uint32,dest_ip,if_name_string,hw_string)!=0)
{ {
mylog(log_fatal,"auto detect lower-level info failed for %s,specific it manually\n",remote_ip); mylog(log_fatal,"auto detect lower-level info failed for %s,specific it manually\n",remote_host);
myexit(-1); myexit(-1);
} }
} }
@ -1083,7 +1084,7 @@ int client_event_loop()
{ {
if(find_lower_level_info(remote_ip_uint32,dest_ip,if_name_string,hw_string)!=0) if(find_lower_level_info(remote_ip_uint32,dest_ip,if_name_string,hw_string)!=0)
{ {
mylog(log_warn,"auto detect lower-level info failed for %s,retry in %d seconds\n",remote_ip,retry_on_error_interval); mylog(log_warn,"auto detect lower-level info failed for %s,retry in %d seconds\n",remote_host,retry_on_error_interval);
sleep(retry_on_error_interval); sleep(retry_on_error_interval);
} }
else else
@ -1121,7 +1122,7 @@ int client_event_loop()
} }
} }
//printf("?????\n");
if(source_ip_uint32==0) if(source_ip_uint32==0)
{ {
mylog(log_info,"get_src_adress called\n"); mylog(log_info,"get_src_adress called\n");
@ -1757,8 +1758,17 @@ int main(int argc, char *argv[])
mylog(log_warn,"you can run udp2raw with non-root account for better security. check README.md in repo for more info.\n"); mylog(log_warn,"you can run udp2raw with non-root account for better security. check README.md in repo for more info.\n");
} }
struct hostent *he;
if ( (he = gethostbyname(remote_host) ) == NULL ) {
mylog(log_error,"Unable to resolve hostname: %s\n",remote_host);
exit(1); /* error */
}
struct in_addr **addr_list = (struct in_addr **)he->h_addr_list;
remote_ip_uint32=(*addr_list[0]).s_addr;
mylog(log_info,"%s ip = %s\n", program_mode==client_mode?"server":"remote", my_ntoa(remote_ip_uint32));
local_ip_uint32=inet_addr(local_ip); local_ip_uint32=inet_addr(local_ip);
remote_ip_uint32=inet_addr(remote_ip);
source_ip_uint32=inet_addr(source_ip); source_ip_uint32=inet_addr(source_ip);

View File

@ -25,9 +25,9 @@ int max_rst_allowed=-1;
fd_manager_t fd_manager; fd_manager_t fd_manager;
char local_ip[100]="0.0.0.0", remote_ip[100]="255.255.255.255",source_ip[100]="0.0.0.0";//local_ip is for -l option,remote_ip for -r option,source for --source-ip char local_ip[100]="0.0.0.0", remote_host[100]="255.255.255.255",source_ip[100]="0.0.0.0";//local_ip is for -l option,remote_host for -r option,source for --source-ip
u32_t local_ip_uint32,remote_ip_uint32,source_ip_uint32;//convert from last line. u32_t local_ip_uint32,remote_ip_uint32,source_ip_uint32;//convert from last line.
int local_port = -1, remote_port=-1,source_port=0;//similiar to local_ip remote_ip,buf for port.source_port=0 indicates --source-port is not enabled int local_port = -1, remote_port=-1,source_port=0;//similiar to local_ip remote_host,buf for port.source_port=0 indicates --source-port is not enabled
int force_source_ip=0; //if --source-ip is enabled int force_source_ip=0; //if --source-ip is enabled
@ -118,8 +118,8 @@ void print_help()
printf("repository: https://github.com/wangyu-/udp2raw-tunnel\n"); printf("repository: https://github.com/wangyu-/udp2raw-tunnel\n");
printf("\n"); printf("\n");
printf("usage:\n"); printf("usage:\n");
printf(" run as client : ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port [options]\n"); printf(" run as client : ./this_program -c -l local_listen_ip:local_port -r server_host:server_port [options]\n");
printf(" run as server : ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port [options]\n"); printf(" run as server : ./this_program -s -l server_listen_ip:server_port -r remote_host:remote_port [options]\n");
printf("\n"); printf("\n");
printf("common options,these options must be same on both side:\n"); printf("common options,these options must be same on both side:\n");
printf(" --raw-mode <string> avaliable values:faketcp(default),udp,icmp\n"); printf(" --raw-mode <string> avaliable values:faketcp(default),udp,icmp\n");
@ -393,7 +393,7 @@ void process_arg(int argc, char *argv[]) //process all options
case 'r': case 'r':
no_r = 0; no_r = 0;
if (strchr(optarg, ':') != 0) { if (strchr(optarg, ':') != 0) {
sscanf(optarg, "%[^:]:%d", remote_ip, &remote_port); sscanf(optarg, "%[^:]:%d", remote_host, &remote_port);
if(remote_port==22) if(remote_port==22)
{ {
mylog(log_fatal,"port 22 not allowed\n"); mylog(log_fatal,"port 22 not allowed\n");
@ -683,7 +683,7 @@ void process_arg(int argc, char *argv[]) //process all options
log_bare(log_info,"local_ip=%s ",local_ip); log_bare(log_info,"local_ip=%s ",local_ip);
log_bare(log_info,"local_port=%d ",local_port); log_bare(log_info,"local_port=%d ",local_port);
log_bare(log_info,"remote_ip=%s ",remote_ip); log_bare(log_info,"remote_host=%s ",remote_host);
log_bare(log_info,"remote_port=%d ",remote_port); log_bare(log_info,"remote_port=%d ",remote_port);
log_bare(log_info,"source_ip=%s ",source_ip); log_bare(log_info,"source_ip=%s ",source_ip);
log_bare(log_info,"source_port=%d ",source_port); log_bare(log_info,"source_port=%d ",source_port);
@ -848,15 +848,15 @@ void iptables_rule() // handles -a -g --gen-add --keep-rule --clear --wait-loc
{ {
if(raw_mode==mode_faketcp) if(raw_mode==mode_faketcp)
{ {
sprintf(tmp_pattern,"-s %s/32 -p tcp -m tcp --sport %d",remote_ip,remote_port); sprintf(tmp_pattern,"-s %s/32 -p tcp -m tcp --sport %d",my_ntoa(remote_ip_uint32),remote_port);
} }
if(raw_mode==mode_udp) if(raw_mode==mode_udp)
{ {
sprintf(tmp_pattern,"-s %s/32 -p udp -m udp --sport %d",remote_ip,remote_port); sprintf(tmp_pattern,"-s %s/32 -p udp -m udp --sport %d",my_ntoa(remote_ip_uint32),remote_port);
} }
if(raw_mode==mode_icmp) if(raw_mode==mode_icmp)
{ {
sprintf(tmp_pattern,"-s %s/32 -p icmp",remote_ip); sprintf(tmp_pattern,"-s %s/32 -p icmp",my_ntoa(remote_ip_uint32));
} }
pattern=tmp_pattern; pattern=tmp_pattern;
} }

4
misc.h
View File

@ -69,9 +69,9 @@ union current_state_t
client_current_state_t client_current_state; client_current_state_t client_current_state;
}; };
extern char local_ip[100], remote_ip[100],source_ip[100];//local_ip is for -l option,remote_ip for -r option,source for --source-ip extern char local_ip[100], remote_host[100],source_ip[100];//local_ip is for -l option,remote_host for -r option,source for --source-ip
extern u32_t local_ip_uint32,remote_ip_uint32,source_ip_uint32;//convert from last line. extern u32_t local_ip_uint32,remote_ip_uint32,source_ip_uint32;//convert from last line.
extern int local_port , remote_port,source_port;//similiar to local_ip remote_ip,buf for port.source_port=0 indicates --source-port is not enabled extern int local_port , remote_port,source_port;//similiar to local_ip remote_host,buf for port.source_port=0 indicates --source-port is not enabled
extern int force_source_ip; //if --source-ip is enabled extern int force_source_ip; //if --source-ip is enabled