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

微信免费建站新建网站站点的

微信免费建站,新建网站站点的,优酷视频上传网站源码,网站登录模版 下载什么是linux tun设备 Linux TUN 设备是一种虚拟网络设备#xff0c;用于在用户空间和内核空间之间建立数据通道#xff0c;使用户空间程序可以通过这个设备与内核网络栈进行交互。TUN 设备是一种通用的网络隧道设备#xff0c;常用于实现虚拟专用网络#xff08;VPN#…什么是linux tun设备 Linux TUN 设备是一种虚拟网络设备用于在用户空间和内核空间之间建立数据通道使用户空间程序可以通过这个设备与内核网络栈进行交互。TUN 设备是一种通用的网络隧道设备常用于实现虚拟专用网络VPN和其他网络隧道技术。 TUN 设备的工作原理 将网络数据包从用户空间发送到内核空间或者从内核空间发送到用户空间。可以收发第三层数据报文包如IP封包这使得用户空间的应用程序可以读取和处理传入的数据包然后将数据包发送回TUN 设备再由内核负责将数据包发送到目标地址。在使用 TUN 设备时用户空间程序通常会打开 TUN 设备文件并像读写普通文件一样对其进行读写操作。这样用户空间程序就可以将网络数据包发送到 TUN 设备或者从 TUN 设备读取接收到的数据包。TUN 设备通常具有一个虚拟的 IP 地址作为与内核网络栈进行交互的入口和出口 基本处理框架 创建 TUN 设备 在 Linux 系统中可以使用 ip 命令或者其他网络管理工具来创建 TUN 设备。用户空间应用程序与 TUN 设备交互 用户空间的应用程序通常会打开 TUN 设备文件这类似于打开普通文件。例如应用程序可以打开 /dev/net/tun 设备文件。数据包传输 当用户空间的应用程序向 TUN 设备文件写入数据包时数据包将被发送到内核空间的 TUN 设备驱动程序。这个过程是由内核的 TUN/TAP 驱动来完成的。内核处理 内核中的 TUN/TAP 驱动程序接收从用户空间传入的数据包。对于 TUN 设备它会将数据包解析为 IP 数据包并将其发送到内核网络栈进行进一步处理。数据包处理 在内核网络栈中数据包将按照路由表和网络配置进行处理。如果数据包的目标地址与本地网络或者路由表匹配那么数据包将被内核转发到目标地址。接收数据包 当内核收到其他网络设备传入的数据包如网络接口收到的数据包如果目标地址是 TUN 设备的 IP 地址那么数据包将被传递给 TUN 设备驱动程序。用户空间读取 数据包通过 TUN 设备驱动程序传递到用户空间的应用程序打开的 TUN 设备文件。应用程序可以读取这些数据包并进行处理。 如下是框架流程图 linux tun设备可以用作什么技术 VPNVirtual Private Network TUN 设备可用于构建 VPN。通过将数据包从用户空间发送到内核空间再通过TUN 设备进行加密、隧道封装和传输可以实现安全的远程访问和数据传输。隧道技术 TUN 设备也可用于其他隧道技术如隧道模式下的 IPv6-over-IPv4 和 IPv4-over-IPv6 隧道。它允许不同网络之间通过隧道进行通信。加密通信 TUN 设备可以用于实现端到端的加密通信保护数据的安全性和隐私。虚拟专用网络 使用 TUN 设备可以创建虚拟专用网络VPN或虚拟局域网VLAN将不同的网络或子网连接在一起。网络隔离 TUN 设备可以用于实现网络隔离将不同的应用程序或服务隔离在不同的虚拟网络中增强网络的安全性。协议代理 TUN 设备还可以用作协议代理允许用户空间应用程序处理特定的网络协议例如将 UDP 或 TCP 流量进行自定义处理。网络测试和仿真 利用 TUN 设备可以在用户空间中模拟网络环境用于测试和仿真网络应用程序的性能和稳定性。 本文今天要完成什么 使用虚拟机ubuntu 自带tun驱动完成 虚拟驱动的启动应用层发包给虚拟网卡驱动tun并写入设备节点文件应用层完成读取加密写入设备节点并发送给协议栈使用tcpdump工具抓取包验证是否正确发送与接收 完成框架 利用已有的tun设备驱动打开并配置ip添加静态路由表写两个应用层进程分别完成数据发送到tun和数据接收处理加密并发回tun驱动 linux已经自带驱动 ubuntu:/dev/net$ ls tun应用层代码1 基本逻辑 打开虚拟设备网卡添加静态路由阻塞等待数据的到来read后再进行wirite操作 #include net/if.h #include sys/ioctl.h #include sys/stat.h #include fcntl.h #include string.h #include sys/types.h #include linux/if_tun.h #includestdlib.h #includestdio.h #include netinet/in.h #include arpa/inet.h#define IP_VERSION 4 #define IP_HEADER_LENGTH 20 // IPv4头部长度单位为字节 #define DEST_IP 10.0.0.2struct iphdr {unsigned char ihl_version;unsigned char tos;unsigned short total_length;unsigned short id;unsigned short frag_off;unsigned char ttl;unsigned char protocol;unsigned short checksum;unsigned int saddr;unsigned int daddr; }; int tun_alloc(int flags) {struct ifreq ifr;int fd, err;char *clonedev /dev/net/tun;if ((fd open(clonedev, O_RDWR)) 0) {return fd;}memset(ifr, 0, sizeof(ifr));ifr.ifr_flags flags;if ((err ioctl(fd, TUNSETIFF, (void *) ifr)) 0) {close(fd);return err;}system(sudo ifconfig tun0 10.0.0.1 up);//启动tun虚拟网卡system(sudo route add -net 10.0.0.2 netmask 255.255.255.255 dev tun0);//将所有发送到 10.0.0.2 的数据包通过网络接口 tun0 进行传输而且这个目标地址被视为一个单独的主机而不是一个整个网络。system(sudo route add -net 192.168.6.1 netmask 255.255.255.255 dev tun0);printf(Open tun/tap device: %s for reading...\n, ifr.ifr_name);return fd; }int main() {int tun_fd, nread;char buffer[1500];char buffer1[IP_HEADER_LENGTH 100]; // IP头部长度 应用层数据长度 tun_fd tun_alloc(IFF_TUN | IFF_NO_PI);if (tun_fd 0) {perror(Allocating interface);exit(1);} while (1) {//发送数据包到TUN/TAP设备memset(buffer,0,sizeof(buffer));//读取协议栈发送来的信息nread read(tun_fd, buffer, sizeof(buffer));if (nread 0) {close(tun_fd);exit(1);}printf(Read %zd bytes from tun/tap device\n, nread);// 以十六进制格式输出IP数据包for (int i 0; i nread; i) {printf(%02X , buffer[i]);if ((i 1) % 16 0) {printf(\n);}}printf(\n);// 构造 IP 数据包头部此处就可以进行数据加密具体的功能未完成可自行加密处理struct iphdr *ip_header (struct iphdr *)buffer1;ip_header-ihl_version (IP_VERSION 4) | (IP_HEADER_LENGTH / 4);ip_header-tos 0;ip_header-total_length htons(IP_HEADER_LENGTH 8); // IP 头部长度 ICMP 数据长度ip_header-id 0;ip_header-frag_off 0;ip_header-ttl 64;ip_header-protocol 1;//IPPROTO_ICMPCMP 协议ip_header-checksum 0; // 留空内核会自动计算校验和ip_header-saddr inet_addr(10.0.0.1); // 源 IP 地址ip_header-daddr inet_addr(14.0.0.2); // 目标 IP 地址// 添加 ICMP 数据char *icmp_data buffer1 IP_HEADER_LENGTH;icmp_data[0] 8; // ICMP 类型为 8Echo Requesticmp_data[1] 0; // ICMP 代码为 0icmp_data[2] 0; // 校验和高位字节icmp_data[3] 0; // 校验和低位字节icmp_data[4] 0x12; // 标识符高位字节icmp_data[5] 0x34; // 标识符低位字节icmp_data[6] 0; // 序列号高位字节icmp_data[7] 0; // 序列号低位字节// 计算 ICMP 校验和unsigned short checksum 0;for (int i 0; i 8; i 2) {checksum (icmp_data[i] 8) | icmp_data[i 1];}checksum (checksum 16) (checksum 0xFFFF);checksum ~checksum;icmp_data[2] (checksum 8) 0xFF;icmp_data[3] checksum 0xFF;// 将数据包写入TUN设备的设备节点ssize_t num_bytes_sent write(tun_fd, buffer1, IP_HEADER_LENGTH 8);if (num_bytes_sent 0) {perror(write);close(tun_fd);return -1;}printf(Sent %zd bytes to TUN device.\n, num_bytes_sent);}close(tun_fd);return 0; }应用层2代码 基本逻辑 负责给虚拟网卡驱动发送应用层数据包 #include net/if.h #include sys/ioctl.h #include sys/stat.h #include fcntl.h #include string.h #include sys/types.h #include linux/if_tun.h #includestdlib.h #includestdio.h #include netinet/in.h #include arpa/inet.h#define DEST_IP 10.0.0.2 #define DEST_IP1 192.168.6.1int main() {// 创建套接字int sockfd socket(AF_INET, SOCK_DGRAM, 0);if (sockfd 0) {perror(Error creating socket);//close(tun_fd);exit(1);}sleep(5);// 设置目标 IP 地址和端口printf(------------start-------------------\n);struct sockaddr_in dest_addr;memset(dest_addr, 0, sizeof(dest_addr));dest_addr.sin_family AF_INET;dest_addr.sin_port htons(12345);inet_pton(AF_INET, DEST_IP, (dest_addr.sin_addr));// 模拟发送数据到 TUN 设备const char* message Hello, TUN device!!!!!;int sockfd1 socket(AF_INET, SOCK_DGRAM, 0);if (sockfd1 0) {perror(Error creating socket);//close(tun_fd);exit(1);}sleep(5);// 设置目标 IP 地址和端口printf(------------start-------------------\n);struct sockaddr_in dest_addr1;memset(dest_addr1, 0, sizeof(dest_addr1));dest_addr1.sin_family AF_INET;dest_addr1.sin_port htons(1234);inet_pton(AF_INET, DEST_IP1, (dest_addr1.sin_addr));// 模拟发送数据到 TUN 设备const char* message1 tun tunt tunt!!!!!!;while(1){sendto(sockfd1, message1, strlen(message1), 0, (struct sockaddr*)dest_addr1, sizeof(dest_addr1)); sleep(5);sendto(sockfd, message, strlen(message), 0, (struct sockaddr*)dest_addr, sizeof(dest_addr));}close(sockfd);close(sockfd1);}应用层如何编译 如果您经常阅读我的文章就不应该问出这样的问题以前的文章都有提及 验证 root权限执行应用层代码1与结果有删减 sudo ./net_device_user1 RTNETLINK answers: File exists Open tun/tap device: tun0 for reading...Read 50 bytes from tun/tap device 45 00 00 32 03 FFFFFF9E 40 00 40 11 23 1B 0A 00 00 01 0A 00 00 02 FFFFFF86 0D 30 39 00 1E 05 27 48 65 6C 6C 6F 2C 20 54 55 4E 20 64 65 76 69 63 65 21 21 21 21 21 Sent 28 bytes to TUN device. Read 47 bytes from tun/tap device 45 00 00 2F 03 FFFFFF9F 40 00 40 11 23 1D 0A 00 00 01 0A 00 00 02 FFFFFFC0 3E 04 FFFFFFD2 00 1B FFFFFFF3 FFFFFFDE 74 75 6E 20 74 75 6E 74 20 74 75 6E 74 21 21 21 21 21 21 Sent 28 bytes to TUN device. root权限执行应用层代码2与结果 sudo ./net_device.o ------------start-------------------抓取tupdump包 sudo tcpdump -i tun0 -w tcpdump_30.pcap tcpdump: listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes tcpdump: pcap_loop: The interface went down 16 packets captured 16 packets received by filter 0 packets dropped by kernel分别抓到了应用层发来的数据包两个包读取完后完成数据包的发送 利用十六进制转字符串验证应用代码2发送给应用代码1的数据是否发送成功 第一个包 Read 50 bytes from tun/tap device 45 00 00 32 03 FFFFFF9E 40 00 40 11 23 1B 0A 00 00 01 0A 00 00 02 FFFFFF86 0D 30 39 00 1E 05 27 48 65 6C 6C 6F 2C 20 54 55 4E 20 64 65 76 69 63 65 21 21 21 21 21其中的data数据转化结果 第二个包 Read 47 bytes from tun/tap device 45 00 00 2F 03 FFFFFF9F 40 00 40 11 23 1D 0A 00 00 01 0A 00 00 02 FFFFFFC0 3E 04 FFFFFFD2 00 1B FFFFFFF3 FFFFFFDE 74 75 6E 20 74 75 6E 74 20 74 75 6E 74 21 21 21 21 21 21 结果 验证成功 ps 完成的功能很少希望这能抛砖引玉 代码解释不是特别详细代码行中有很多注释希望能帮助到你
http://www.zqtcl.cn/news/367746/

相关文章:

  • asp net mvc做网站软文推广是什么
  • 张家口住房和城乡建设厅网站如何做点击赚钱的网站
  • 网站在建设中无法访问贵州碧江区住房和城乡建设局网站
  • 营销类网站 英文东莞正规的免费网站优化
  • 柳州网站推广最好的公司百度seo优化培训
  • 哈尔滨门户网站建站哪个网站做农产品
  • 网站行业关键词如何建设网站
  • wordpress插件目录504wordpress访问优化插件
  • 固定ip做网站网页源码提取工具
  • php网站模板源码下载公司网络营销推广软件
  • 免费电子版个人简历模板温州快速排名优化
  • 网站修改titlewordpress显示icp备案
  • 中国国际贸易单一窗口登录南京专业网站优化公司
  • 手机网站建设合同wordpress案例分析
  • 深圳做网站什么公司好广州电商小程序开发
  • 郑州高新区做网站的公司如何欣赏网站
  • 网站做维恩图做网站的公司杭州
  • 柳州公司网站制作公司wordpress 网店
  • 网站增加栏目费用在网站开发中如何设置登录
  • 怎样用php做网站百度推广联系人
  • 怎么建立手机网站如何申请公司域名
  • 营销型网站怎么收费邓州企业网站
  • 北京建设官方网站邢台网站维护
  • 新余网站制作网站开发工资咋样
  • 襄阳网站建设外包自己做一个网站
  • 网站域名的后缀wordpress文章归类
  • 查询企业信息的官方网站大连建设网站公司
  • 网站建设 全包专业建设规划方案模板
  • 做网站好还是做微信小程序好浙江建设工程造价信息网站
  • 网站开发怎么报价推广普通话手抄报模板可打印