重庆当地网站闵行专业做网站

news/2025/9/23 19:37:15/文章来源:
重庆当地网站,闵行专业做网站,花店网站建设构思,衡水建设网站首页文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中#xff0c;我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络… 文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络过滤驱动框架下面防火墙实例tdifw的实现可以参考 TDI网络过滤驱动开发指南。TDI网络过滤驱动之tdifw实现原理分析。 对于TDI网络过滤驱动下面的防火墙应用是TDI驱动最简单的一种应用场景我们只需要对TDI_CONNECTtdi_event_connecttdi_send_datagram和tdi_event_receive_datagram消息/回调进行防火墙规则处理即可。 下面我们分析一下TDI网络过滤驱动的其他应用包括 进程流量限定。DNS重定向代理。TCP重定向代理。 这些例子相比TDIFW防火墙将会复杂很多例如最简单的流量限定。我们需要对发送和接收数据进行限流操作的话需要对发送的IRP以及接收的数据进行缓存和挂起操作当低于流量限定的时候再激活操作。整个过程涉及到数据接收的TDI请求重注入相比防火墙的拦截来说要复杂很多。 1. 技术概览 我们先来看一下整个TDI网络驱动应用的框架如下 在上述框架中 应用程序发起的网络请求或者底层来的网络数据包都先放入IoQueue队列中然后将整个数据置于PENDING状态。将数据包通过RequestQueue队列来进行其他处置例如可以如下 将数据包通过IRP请求传递给用户层让用户层计算流量或者进行UDP转发TCP连接转发等。可以在RequestQueue延迟完成数据包的传递达到流量限定的目的。在用户的进行数据包的DUMP类似TCPDUMP工具进行网络抓包。 2. 数据包的抓取 通过上面我们得知TDI驱动有一个重要的操作就是需要对网络数据包进行抓取将数据包抓取到用户层提供给用户层做各种分析。对于TCP数据我们有如下消息可以采集 IRP_MJ_CREATE创建地址对象和连接对象。TDI_SEND采集TCP/UDP数据被发送的事件我们可以从IRP中提取发送的数据用来采集本机发出去的数据。TDI_RECEIVE采集本机主动接收数据的事件。TDI_CONNECTTCP的连接请求我们可以替换连接请求的数据达到TCP代理的功能。TDI_EVENT_CONNECT被动接收连接的事件改事件只能用作通知功能。TDI_EVENT_RECEIVE/TDI_EVENT_RECEIVE_EXPEDITED接收数据包的事件抓取该事件我们可以采集本机接收的数据包信息。 对于UDP数据我们有如下事件可以采集 IRP_MJ_CREATE创建地址对象。TDI_SEND/TDI_SEND_DATAGRAM采集UDP数据被发送的事件我们可以从IRP中提取发送的数据用来采集本机发出去的数据。TDI_RECEIVE_DATAGRAM采集本机主动接收数据的事件。TDI_EVENT_RECEIVE_DATAGRAM接收UDP数据包的事件抓取该事件我们可以采集本机接收的数据包信息。 对于上述所有的事件可以从用户层的处理来分为两类 通知类。通知类事件是通知用户层有什么事件发生例如当UDP接收到IRP_MJ_CREATE消息的时候可以得到UDP_CREATED被创建的消息。决策类。决策类是需要用户层对该消息进行响应的事件例如TCP_CONNECTED响应需要我们对建立的连接请求进行决策例如TCP的连接代理。 通知类主要是通知用户层当前TDI的各种状态和情况而决策类的事件是整个事件采集的核心我们可以对数据进行加密或者解密对请求进行代理转发或者对数据进行审计。 3. 应用实例 下面我们来看一下如下TDI实例的应用包括 进程流量限定。DNS重定向代理。TCP重定向代理。 3.1 TrafficShaper(限流) 流量限定主要实现的原理是对send, recv, sendto, recvfrom等数据长度进行统计在单位时间内数据量的大小如果超过限流大小就暂停数据的发送和接收实现大致如下 virtual void tcpReceive(ENDPOINT_ID id, const char * buf, int len) {bytesIn len;if (bytesIn ioLimit){suspendLimit(...);} }virtual void tcpSend(ENDPOINT_ID id, const char * buf, int len) {bytesOut len;if (bytesOut ioLimit){suspendLimit(...);} }virtual void udpReceive(ENDPOINT_ID id, const char * buf, int len) {bytesIn len;if (bytesIn ioLimit){suspendLimit(...);} }virtual void udpSend(ENDPOINT_ID id, const char * buf, int len) {bytesOut len;if (bytesOut ioLimit){suspendLimit(...);} }除了在数据接收或者发送的回调函数中统计流量信息之后我们需要额外创建一个线程该线程统计单位事件内流量的状态 如果单位事件内流量超出限流那么暂停数据的收发。如果单位事件内流量低于限流那么恢复数据的收发。 那么suspendLimit怎么暂停数据的收发呢方法就是针对TDI_SEND这种发送请求将其IRP挂起不再进行发送处理等到流量恢复的时候再次进行发送。 3.2 DnsRedirector(DNS重定向) 我们知道如果使用gethostbyname函数我们可以获取主机名对应的IP地址信息该函数如下 hostent * gethostbyname(const char *name );例如我们浏览器访问网站的时候就会对网站地址进行域名解析也就是通过gethostbyname获取域名对应的IP地址。 其实域名解析是利用DNS协议向域名服务器发送DNS请求来查询主机名对应的主机地址的该协议格式是固定的并且有固定的端口这个端口就是53并且使用UDP协议进行发送。 因此如果我们可以对53端口的UDP数据包进行拦截加转发那么我们就可以使用DNS查询的重定向了。 因此我们只需要响应回调函数udpSend对53端口的数据进行转发处理如下 virtual void udpSend(ENDPOINT_ID id, const unsigned char * remoteAddress, const char * buf, int len) {//... }我们对udpSend回调中的数据可以使用socket和sendto以及recvfrom发送DNS请求并获取DNS请求的返回数据。 在这里有一个主要的操作就是recvfrom数据注入我们在代理线程中将原始DNS数据包代理之后然后通过recvfrom接收DNS请求的返回数据后需要将数据重新注入给TDI驱动让TDI驱动返回给原始进程从而达到DNS代理的过程。 recvfrom数据注入就是将数据发送给TDI驱动之后TDI驱动通过TDI_RECEIVE_DATAGRAM或者TDI_EVENT_RECEIVE_DATAGRAM返回数据。 3.3 TcpRedirector(TCP重定向) 其实DnsRedirector就是UDP重定向的一个例子而TcpRedirector是TCP重定向的一个例子。TCP重定向其实应用非常广泛例如很多VPN代理的TCP服务TCP流量就是通过TCP重定向来实现的。 不过本人看过一些大厂的VPN实现TCP代理用的还是LSPLayered service provider来做的本文来讨论如何通过TDI驱动来实现TCP代理。 TCP代理主要是对connect进行处理将连接的地址换成代理进程监控的地址如下 virtual void tcpConnectRequest(ENDPOINT_ID id, PTCP_CONN_INFO pConnInfo) {//...memcpy(pConnInfo-remoteAddress, redirectToAddress, sizeof(pConnInfo-remoteAddress));//... }从这里我们可以看到TCP的代理实现起来其实比较简单的该功能最复杂的一个点是代理服务器的实现一般要实现比较高效我们应当使用完成端口来对套接字进行监控。这里我们并不对TCP代理服务器做详细介绍。 4. 总结与参考 这里我们从三个实例限流UDP重定向TCP重定向大致了解TDI网络过滤驱动的基本应用场景对于驱动防火墙的TDI网络过滤驱动复杂应用我们需要将网络数据包进行截获以及重注入处理。 对于TDI网络过滤驱动更加全面的使用我们可以参考NetFilter SDK 2该SDK链接为https://netfiltersdk.com/可惜的是该SDK是一个收费的SDK不过它提供了相关的Sample代码包括TrafficShaperTcpRedirectorDnsRedirector和SocksProxyServer还是非常具有参考性的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nRF54LM20A 芯片分析;

Nordic 宣布推出新一代nRF54L系列超低功耗无线系统级芯片 (SoC)的最新成员nRF54LM20A。nRF54L系列基于Nordic创新的22nm技术平台,不仅简化设计挑战,同时实现了可靠通信、更长的电池寿命和紧凑的产品设计。1、nRF54LM…

第二天

今天的编程小车课,完全是一场“找bug”的实战演练——小车一动不动地趴在桌上,我盯着线路板看了半天,连哪里出问题都不知道,从硬件、程序到设备状态,一步步拆解问题,瞬间清晰多了。 先查硬件连接时,我才发现L29…

wordpress做过的大型网站山东济南网站建设公司

【习题】保存应用数据 判断题 首选项是关系型数据库。 错误(False) 应用中涉及到Student信息,如包含姓名,性别,年龄,身高等信息可以用首选项来存储。 错误(False) 同一应用或进程中每个文件仅存在一个Preferences实例。 正确(T…

怎么样建设自己的网站上海科技网站建设

从这一讲开始,我们将一起探讨设计模式的性能调优。在《Design Patterns: Elements of Reusable Object-Oriented Software》一书中,有 23 种设计模式的描述,其中,单例设计模式是最常用的设计模式之一。无论是在开源框架&#xff0…

毕业设计h5网站制作贵阳好的网站建设公司

import React, { Component } from react;class List extends Component {constructor(props) {super(props);}render() {return <div>1111</div>;} }export default List;

网站流量查询网站统计查询网站建设需要写语句吗

PEP 8是最古老的PEP之一&#xff0c;它向Python程序员提供了代码格式设置指南。PEP 8的篇幅很长&#xff0c;但大都与复杂的编码结构相关。 https://python.org/dev/peps/pep-0008/转载于:https://www.cnblogs.com/botoo/p/7830980.html

教做甜点的网站换友情链接的网站

朴素的 f[S]表示S到(1<<n)的期望次数 发现1的个数只增加不减少 所以可以类似拓扑序的图&#xff0c;然后枚举子集O(3^n)转移 没有优化的余地 另辟蹊径&#xff1a; 拆开每一位来看 t[i]表示第i位变成1的次数 ansE(max(t[i])) 根据min-max容斥 得到&#xff1a;ans∑E(t[i…

海口智能建站价格国外服务器租用价格

Description 给你一个字符串str&#xff0c;字符串中的字母都已按照升序排序&#xff0c;且只包含小写字母。另外给出一个目标字母target&#xff0c;请你寻找在这一有序字符串里比目标字母大的最小字母。 在比较时&#xff0c;字母是依序循环出现的。例如&#xff0c;str“ab…

福田专门做网站推广公司做网站怎么回本

41、计算机操作的最小时间单位是__________。A A. 时钟周期 B. 指令周期 C. CPU周期 D. 外围设备 42、微程序控制器中&#xff0c;机器指令与微指令的关系是__________。B A. 每一条机器指令由一条微指令来执行 B. 每一条机器指令由一段用微指令编成…

Win10服务器远程连接断开后.bat脚本进程中断的全面解决高效的方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

NRF54L15 两者结合的jlink保护机制(硬件+软件)

默认更安全:只有当硬件和软件两层都“解锁”时,调试端口才开放。 典型流程: 上电/复位时,硬件先根据 UICR.APPROTECT 决定是否允许软件控制。 如果硬件允许,固件可通过写 APPROTECT.DISABLE 临时解锁调试端口(直…

软件测试员的核心技能:一文掌握等价类划分与边界值分析

等价类划分和边界值分析,看似简单,却是测试工程师安身立命的根本。它们体现了测试工作的精髓:在混沌中建立秩序,在无限中寻找有限,在风险最高的地方投入精力。引言:我们不是在“挑刺”,而是在“守护” 作为一名…

最精品网站建设如何将自己做的网站放到网上

ChatGPT插件平台有望成为影响深远的"下一件大事"&#xff0c;因此对于开发者来说&#xff0c;有必要对ChatGPT插件的开发有一定的了解。原文: Writing a ChatGPT Plugin With Go[1] 我工作的附带福利之一是偶尔可以接触试用一些很酷的新技术&#xff0c;最近的一项技…

《CBI 技术有聊》对话 OpenCSG:智能体落地困境与企业转型的必然路径

智能体热潮下的冷思考 2025 年,“智能体(Agent)”无疑是 AI 行业的焦点。它被称为继“大模型”之后的第二次浪潮,资本热情与行业跟风让它迅速升温。然而,在热潮背后,企业的现实却并不乐观:算力闲置、数据不足、…

汕头个人网站推广建设提升审美网站

为什么80%的码农都做不了架构师&#xff1f;>>> 1.面试题 例如&#xff1a; ip计算后的值&#xff1d;53文本内容&#xff1a;1,100,北京 101,1000,上海 1001,3001,广州 ...求ip53对应的省份2.代码如下&#xff1a; #!/usr/bin/python # coding: utf8def ip_find(i…

58和搜房那个网站做房产好wordpress主题插件下载

你拿起一个计算器&#xff0c;输入“26”&#xff0c;计算器会输出“8”&#xff1b;过了一会儿&#xff0c;你又在这个计算器上输入“26”&#xff0c;它依然会输出“8”。这种靠谱的计算器——对于同一个输入&#xff0c;它始终还给我们同一个输出——我们称之为线性计算器或…

直播网站开发报价wordpress 屏蔽

在企业内网开发环境方面&#xff0c;文件服务器是一个非常重要的环节。在这当中&#xff0c;Samba服务器由于其权限控制的高度灵活性&#xff0c;在这里抚琴煮酒会进行一些列详细的说明。之前我们已经介绍了Samba服务器一些入门和基本的更换用户、端口监听、列表控制等技巧&…

h5电子商城网站开发wordpress ajax分页插件

简介&#xff1a; 上文说到云计算的十余年发展让整个互联网行业发生了翻天覆地的变化&#xff0c;Serverless 作为云计算的产物&#xff0c;或者说是云计算在某个时代的表现&#xff0c;被很多人认为是真正意义上的云计算&#xff0c;关于“Serverless 是什么”这个问题&#x…

Mac怎么搭建网站开发环境怎么做网站二维码

用户与角色之间的关系 我们在做用户模块的时候&#xff0c;漏掉了最后一个功能。在新增功能中是可以选择角色的。 用户与角色之间的关系也是多对多 一个用户对应多个角色一个角色可以被多个用户使用。现在呢&#xff0c;我们的用户表已经是写的了。我们最好就不要修改原有的用户…

微信官方网站公众平台什么叫网站降权

一、搭建开发环境 搭建环境可以从这里开始&#xff1a; 微信小程序从零开始开发步骤&#xff08;一&#xff09;搭建开发环境 - 简书 二、程序示例 1、AppleMusic https://download.csdn.net/download/m0_54925305/89977187 2、仿B站首页 https://download.csdn.net/downlo…