当前位置: 首页 > news >正文

音乐网站源码带手机版推进网站集约化建设

音乐网站源码带手机版,推进网站集约化建设,外贸crm客户管理软件,网站建设首选定制开发这篇文章想详细阐述一下有关于 TUN/TAP 设备的编程。 其实关于这两种设备的编程#xff0c;基本上属于八股文#xff0c;大家一般都这么干。 启动设备之前 有的linux 并没有将tun 模块编译到内核之中#xff0c;所以#xff0c;我们要做的第一件事情就是检查我们的系统是…这篇文章想详细阐述一下有关于 TUN/TAP 设备的编程。 其实关于这两种设备的编程基本上属于八股文大家一般都这么干。 启动设备之前 有的linux 并没有将tun 模块编译到内核之中所以我们要做的第一件事情就是检查我们的系统是否支持 TUN/TAP 。具体如何检查和解决请查看这里http://blog.csdn.net/lishuhuakai/article/details/70305543这篇文章就不再赘述。 光有tun 模块还不够我们还要创建上篇文章中所提到的文件运行命令 % sudo mknod /dev/net/tun c 10 200 # c表示为字符设备10和200分别是主设备号和次设备号这样你到 /dev/net/ 目录下就可以看到一个名称为 tun 的文件了。当然这里的 tun 可以改成任意的你喜欢的名称。 启动设备 对于TUN设备我们一般这样来初始化 int tun_alloc(char dev[IFNAMSIZ]) // dev数组用于存储设备的名称 {struct ifreq ifr;int fd, err;if ((fd open(/dev/net/tun, O_RDWR)) 0) { // 打开文件perror(open);return -1;}bzero(ifr, sizeof(ifr));/* Flags : IFF_TUN - TUN设备* IFF_TAP - TAP设备* IFF_NO_PI - 不需要提供包的信息*/ifr.ifr_flags IFF_TUN | IFF_NO_PI; // tun设备不包含以太网头部,而tap包含,仅此而已if (*dev) {strncpy(ifr.ifr_name, dev, IFNAMSIZ); }if ((err ioctl(fd, TUNSETIFF, (void *) ifr)) 0) { // 打开设备perror(ioctl TUNSETIFF);close(fd);return err;}// 一旦设备开启成功系统会给设备分配一个名称对于tun设备一般为tunXX为从0开始的编号对于tap设备// 一般为tapX,X为从0开始的编号strcpy(dev, ifr.ifr_name); // 拷贝设备的名称至dev中return fd; }如果我们想启动一个TAP 设备的话很简单将上面的ifr.ifr_flags IFF_TUN | IFF_NO_PI;改为ifr.ifr_flags IFF_TAP | IFF_NO_PI;即可那么我们就启动了一个 TAP 设备。 设定网络地址 上面的代码打开了文件并且返回了文件的描述符但是还不够对于一张网卡来说我们还要给其配置网络地址有时候甚至是路由信息网卡才能够正常地工作。 一旦虚拟的 TUN/TAP 设备启动成功我们便可以通过命令来给其设定地址。 我来举个例子,以一个 TAP 设备为例 % sudo ip link set dev tap0 up # 启动tap0网卡,虽然网卡已经启动但是此时使用ipconfig命令并不能看到tap0这个设备因为我们还没有给其配置ip地址% sudo ip address add dev tap0 10.0.1.5/24 # 给tap0设置ip地址% ifconfig # 此时在ifconfig命令下已经可以看到tap0设备了 tap0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 10.0.1.5 netmask 255.255.255.0 broadcast 0.0.0.0inet6 fe80::1872:80ff:fe20:46e2 prefixlen 64 scopeid 0x20linkether 1a:72:80:20:46:e2 txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0% ip route show # 显示所有的路由信息 default via 192.168.140.2 dev ens33 proto static metric 100 10.0.0.0/24 dev ens39 proto kernel scope link src 10.0.0.130 metric 100 10.0.1.0/24 dev tap0 proto kernel scope link src 10.0.1.5 # 给网卡设定ip后系统自动添加了路由 192.168.140.0/24 dev ens33 proto kernel scope link src 192.168.140.133 metric 100通过手动敲命令的方式来配置 tap0 设备略显麻烦其实我们可以直接在程序中调用 system 函数 int run_cmd(char *cmd, ...) {va_list ap;char buf[CMDBUFLEN];va_start(ap, cmd);vsnprintf(buf, CMDBUFLEN, cmd, ap);va_end(ap);if (debug) { // DEBUG模式下输出信息printf(EXEC: %s\n, buf);}return system(buf); }将上面的命令直接传递给 run_cmd 函数即可. 当然如果你不喜欢这种方式我们自然还可以有其他的方法比如说使用下面的函数 int set_stack_attribute(char *dev) {struct ifreq ifr;struct sockaddr_in addr;int sockfd, err -1;bzero(addr, sizeof(addr));addr.sin_family AF_INET;inet_pton(AF_INET, tapaddr, addr.sin_addr);bzero(ifr, sizeof(ifr));strcpy(ifr.ifr_name, dev);bcopy(addr, ifr.ifr_addr, sizeof(addr));sockfd socket(AF_INET, SOCK_DGRAM, 0);if (sockfd 0) {perror(socket);return -1;}// ifconfig tap0 10.0.1.5 #设定ip地址if ((err ioctl(sockfd, SIOCSIFADDR, (void *)ifr)) 0) {perror(ioctl SIOSIFADDR);goto done;}/* 获得接口的标志 */if ((err ioctl(sockfd, SIOCGIFFLAGS, (void *)ifr)) 0) {perror(ioctl SIOCGIFADDR);goto done;}/* 设置接口的标志 */ifr.ifr_flags | IFF_UP;// ifup tap0 #启动设备if ((err ioctl(sockfd, SIOCSIFFLAGS, (void *)ifr)) 0) {perror(ioctl SIOCSIFFLAGS);goto done;}inet_pton(AF_INET, 255.255.255.0, addr.sin_addr);bcopy(addr, ifr.ifr_netmask, sizeof(addr));// ifconfig tap0 10.0.1.5/24 #设定子网掩码if ((err ioctl(sockfd, SIOCSIFNETMASK, (void *) ifr)) 0) {perror(ioctl SIOCSIFNETMASK);goto done;}done:close(sockfd);return err; }上面的函数主要干的事情和上面的命令大致相同。 收发数据 收发数据非常简单每次读取返回的文件描述符即可接收数据没有数据到来时会一直阻塞在哪里当然你也可以玩一下非阻塞 IO然后想要发送数据的话只需要将数据写入到该文件描述符对应的文件中即可。 作者Yihulee 链接https://www.jianshu.com/p/ab91f7cd98cd 来源简书 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
http://www.yutouwan.com/news/236034/

相关文章:

  • 国外做电商平台的网站有什么网站开发人员没有按照设计开发
  • 最新的高端网站建设wordpress自定义分类模板
  • 怎么根据网站做二维码东莞哪里能学建设网站
  • 游戏网站开发过程开发一个项目的流程
  • 深圳西乡 网站建设益阳市建设局网站是什么
  • 网站开发实施方案进度软件工程很难学吗
  • 建网站公司专业指数基金怎么选
  • 怎么做的网站收录快汽车之家网站系统是什么做的
  • 微信公众号内置手机网站内衣网站建设详细方案
  • wordpress仿京东邢台seo
  • 哪个公司网站备案快建筑工程招标网
  • 联想网站建设与分析1网站免费建站
  • 织梦模板网站好吗网页微信能不能传文件
  • 检测WordPress主题的网站怎么建立一个网站能够与讯飞云对话
  • 网站的基本价格建设网站建设安全培训平台
  • 网站菜单分类怎么做的wordpress开发单页面跳转
  • 区县12380网站建设情况肥城房产网
  • 免费公司网站模版论坛网站开发开题报告
  • 青岛网站设计系统网站的背景图怎么做的
  • 做网站和做app的区别温州百度推广公司
  • 个人网站做联盟营销锦州网站建设哪家好
  • 设计网站注意哪些问题厦门建设工程招标中心网站
  • 青浦网站制作永久免费个人域名注册
  • 广东省网站集约化建设通知重庆网站建设方案书
  • 桂林哪里学建设网站网站哪里可以做
  • 网站建设在线推广昆山住房与城乡建设局网站
  • 公司网站建设上海为什么自己做的网站uc打不开
  • 简易动漫网站模板最近alexa排名查询
  • 学校网站建设学生文明上网遂宁网站建设略奥网络
  • 免费网站空间申请教程贵阳网站制作计划