diff --git a/Makefile b/Makefile index bf65154..588fafe 100644 --- a/Makefile +++ b/Makefile @@ -2,20 +2,27 @@ CROSS_COMPILE ?= CC := $(CROSS_COMPILE)gcc STRIP := $(CROSS_COMPILE)strip CFLAGS = -Wall -g -O3 -LIB = -lssh2 -pthread -static -OBJ = tunnel - -SSH2_LIB := $(shell pkg-config --static --libs --cflags libssh2) +LIB = -lssh2 -pthread +forward-tunnel = forward-tunnel +reverse-tunnel = reverse-tunnel +ifeq ($(shell uname -o), GNU/Linux) + ifeq ($(shell lsb_release -si), Debian) + LIB += -static + SSH2_LIB := $(shell pkg-config --static --libs --cflags libssh2) + else + SSH2_LIB := $(shell pkg-config --libs --cflags libssh2) + endif +endif all:forward-tunnel reverse-tunnel forward-tunnel: forward-tunnel.o - $(CC) $(CFLAGS) -o forward-tunnel $^ $(SSH2_LIB) $(LIB) + $(CC) $(CFLAGS) -o $(forward-tunnel) $^ $(SSH2_LIB) $(LIB) $(STRIP) forward-tunnel reverse-tunnel: reverse-tunnel.o - $(CC) $(CFLAGS) -o reverse-tunnel $^ $(SSH2_LIB) $(LIB) + $(CC) $(CFLAGS) -o $(reverse-tunnel) $^ $(SSH2_LIB) $(LIB) $(STRIP) reverse-tunnel .c.o: diff --git a/forward-tunnel b/forward-tunnel index 16028ab..e63453d 100644 Binary files a/forward-tunnel and b/forward-tunnel differ diff --git a/forward-tunnel.c b/forward-tunnel.c index 6eaed86..9cf3add 100644 --- a/forward-tunnel.c +++ b/forward-tunnel.c @@ -21,11 +21,9 @@ enum { AUTH_PUBLICKEY }; -void *forward_tunnel(void *p) +void *forward_tunnel(void *sock_) { - - int forwardsock = *(int *)p; - + int forwardsock = *(int *)sock_; int rc, i, auth = AUTH_NONE; struct sockaddr_in sin; const char *fingerprint; @@ -220,6 +218,7 @@ shutdown: static char help_info(void) { + int l; static const char name[] = "STunnel"; static const char subject[] = "SSH forward tunnel"; static const struct { @@ -252,7 +251,6 @@ static char help_info(void) fprintf(stderr, "Version: %s\n", author.version); fprintf(stderr, "%s\n", usage); - int l; for (l = 0; s_help[l]; l++) { fprintf(stderr, "%s\n", s_help[l]); } @@ -263,7 +261,7 @@ static char help_info(void) return 0; } -int nice( int increment) +int nice_( int increment) { int oldprio = getpriority(PRIO_PROCESS, getpid()); printf("%d\n", oldprio); @@ -280,6 +278,8 @@ int main(int argc, char *argv[], char **env) int daemon_ = 0; int opt; char *p = NULL; + char *client_ip = NULL; + int i, j; char optstring[] = ":dr:s:p:l:u:e:h?"; @@ -332,8 +332,8 @@ int main(int argc, char *argv[], char **env) ; } } - - int i, j; + + // 加密参数(账号密码) for (i = 1; i < argc; i++) { if (0 == strcmp(argv[i], "-e") || 0 == strcmp(argv[i], "-u") || 0 == strcmp(argv[i], "-p")) @@ -346,7 +346,6 @@ int main(int argc, char *argv[], char **env) } - printf("SSH Server: %s:%d, Local listen: %s:%d, User&Passwd: [%s]['%s']\n", server_ssh_ip, remote_destport, local_listenip, local_listenport, server_ssh_user, server_ssh_passwd); listensock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -384,9 +383,7 @@ int main(int argc, char *argv[], char **env) fprintf(stderr, "Waiting for TCP connection on %s:%d...\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); - - - + // 后台运行 if (daemon_ == 1) { if (daemon(1, 1)) { perror("daemon"); @@ -394,11 +391,12 @@ int main(int argc, char *argv[], char **env) } } - - if (-1 == (nice(-20))) // 进程优先级 - perror("nice"); + // 进程优先级 + if (-1 == (nice_(-20))) + perror("nice_"); + // 多线程设置 pthread_t thread_id = 0; pthread_attr_t attr; struct sched_param param; @@ -409,8 +407,6 @@ int main(int argc, char *argv[], char **env) printf("block sigpipe error\n"); } - - // 初始化线程属性 pthread_attr_init(&attr); @@ -421,7 +417,7 @@ int main(int argc, char *argv[], char **env) param.sched_priority = 50; pthread_attr_setschedparam(&attr, ¶m); - + // 多线程 while (1) { server_addr_len = sizeof(server_addr); forwardsock = accept(listensock, (struct sockaddr *)&sin, &server_addr_len); @@ -430,8 +426,9 @@ int main(int argc, char *argv[], char **env) goto shutdown; } getsockname(forwardsock, (struct sockaddr *)&sin, &server_addr_len); - char *ip = inet_ntoa(sin.sin_addr); - printf("Client IP address: %s\n", ip); + client_ip = inet_ntoa(sin.sin_addr); + printf("Client IP address: %s\n", client_ip); + client_ip = NULL; pthread_create(&thread_id, &attr, &forward_tunnel, (void *)&forwardsock); diff --git a/forward-tunnel.o b/forward-tunnel.o index 159cad4..65b7e8c 100644 Binary files a/forward-tunnel.o and b/forward-tunnel.o differ diff --git a/reverse-tunnel b/reverse-tunnel index d8d1df0..e829bad 100644 Binary files a/reverse-tunnel and b/reverse-tunnel differ