📄 main.c.svn-base
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <getopt.h>#include <errno.h>#include <pthread.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "main.h"#include "tun.h"#include "socket.h"int debug = 0;intmain(int argc, char **argv) { char *dev = NULL; int tunfd, skfd; struct sockaddr_in laddr, raddr; //Set default options def_addr(&laddr); def_addr(&raddr); int opt; while ( (opt=getopt(argc, argv, "hd:Di:p:I:P:")) != EOF ) { switch(opt) { case 'h': help(argv[0]); exit(EXIT_SUCCESS); case 'd': dev = optarg; break; case 'D': debug = 1; break; case 'i': laddr.sin_addr.s_addr = inet_addr(optarg); break; case 'I': raddr.sin_addr.s_addr = inet_addr(optarg); break; case 'p': laddr.sin_port = htons((int)optarg); break; case 'P': raddr.sin_port = htons((int)optarg); break; } } if ( (tunfd = tun_open(dev)) < 0 ) { switch(errno) { case ENOENT: fprintf(stderr, "No TUN support\n"); if (debug) perror("open()"); break; case EACCES: fprintf(stderr, "No r00t privileges\n"); if (debug) perror("open()"); break; default: fprintf(stderr, "Unknown error\n"); break; } exit(EXIT_FAILURE); } if (raddr.sin_addr.s_addr == 0) { fprintf(stderr, "No Remote Address\n"); exit(EXIT_FAILURE); } skfd = udp_socket(&laddr, &raddr); pthread_t recv_write, read_send; struct udp_tun args; args.tunfd = tunfd; args.skfd = skfd; args.addr = &raddr; pthread_create( &read_send, NULL, tun_read_udp_write, (void *)&args ); pthread_create( &recv_write, NULL, udp_read_tun_write, (void *)&args ); printf("SuperTunnelDaemon\n"); pthread_join( read_send, NULL ); pthread_join( recv_write, NULL); return 0;}void help(char *pname) { printf(STD_NAME ", version: %d.%d\n\n", STD_VER_MAJOR, STD_VER_MINOR); printf("Usage: %s [opts]\n", pname); printf( " -h This help\n" " -d Device name (default: tun0)\n" " -D Debug information\n" " -i Local IP Address\n" " -p Local Port (default: 4201)\n" " -I Remote Ip Address\n" " -P Remote Port Adress (default: 4201)\n");}void def_addr(struct sockaddr_in *addr) { memset(addr, '\0', sizeof(struct sockaddr_in)); addr->sin_family = AF_INET; addr->sin_port = htons((int)STP_DEFAULT_PORT); addr->sin_addr.s_addr = INADDR_ANY; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -