⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本人收集整理的一份c/c++跨平台网络库
💻 C
字号:
#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;		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(atoi(optarg));				break;			case 'P':				raddr.sin_port = htons(atoi(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("waiting ... \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 + -