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

📄 tuntap.c

📁 This a good VPN source
💻 C
字号:
#include <stdio.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <net/if.h>#include <linux/if_tun.h>#include "nethub.h"#include "port.h"static void send_tap(int fd, void *packet, int len, void *unused){  int n;  n = write(fd, packet, len);  if(n != len){    if(errno != EAGAIN) perror("send_tap");  }}int open_tap(struct netjig_state *ns,	     struct nethub *nh,	     char *dev){  struct ifreq ifr;  int fd, err;  if((fd = open("/dev/net/tun", O_RDWR)) < 0){    perror("Failed to open /dev/net/tun");    return(-1);  }  memset(&ifr, 0, sizeof(ifr));  ifr.ifr_flags = IFF_TAP | IFF_NO_PI;  strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name) - 1);  if(ioctl(fd, TUNSETIFF, (void *) &ifr) < 0){    perror("TUNSETIFF failed");    close(fd);    return(-1);  }  err = setup_sock_tap(ns, nh, fd, send_tap);  if(err) return(err);  add_fd(ns, fd);  return(fd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -