拦截网页数据的方法及系统的制作方法

文档序号:7816161阅读:1122来源:国知局
拦截网页数据的方法及系统的制作方法
【专利摘要】本发明提供一种拦截网页数据的方法及系统,其中,所述方法包括:从NDIS中间层抓取以太数据包;根据所述以太数据包的HTTP请求的协议头判断是否需要拦截该HTTP请求;当判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。通过采用本发明所提供的方法,可以有效地解决现有技术中使用浏览器插件、注入浏览器进程、安装HOOK、设置代理等方式所带来的各种局限。
【专利说明】拦截网页数据的方法及系统

【技术领域】
[0001]本发明涉及通信领域,更为具体而言,涉及拦截网页数据的方法及系统。

【背景技术】
[0002]在日常生活中,用户经常会因浏览网页过程中出现的网页广告而产生困扰。所谓网页广告是指嵌入在网页中展示的网页窗口、图片、脚本等资源。网页广告不仅干扰用户正常地浏览网页,而且占用用户的网络宽带,拖慢浏览器展示网页的速度。因此,用户对于广告拦截有着强烈的需求。
[0003]根据现有技术,拦截网页广告的方法有:1)使用浏览器插件,但该方式需要为每款浏览器开发、安装、更新插件,因此开发及维护成本高;2)注入浏览器进程、安装hook,但该方式存在浏览器崩溃、卡死、不兼容、稳定性低等问题;3)设置代理,但该方式会降低浏览器的访问速度。


【发明内容】

[0004]为解决上述技术问题,本发明提供了一种拦截网页数据的方法及系统,有效地解决现有技术中使用浏览器插件、注入浏览器进程、安装Η00Κ、设置代理等方式所带来的上述各种局限。
[0005]根据本发明实施例的第一方面,提供了一种拦截网页数据的方法,所述方法包括:
[0006]从网络驱动程序接口规范(NDIS)中间层抓取以太数据包;
[0007]根据所述以太数据包的超文本传输协议(HTTP)请求的协议头判断是否需要拦截该HTTP请求;
[0008]当判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
[0009]根据本发明实施例的第二方面,提供了一种拦截网页数据的系统,所述系统包括:
[0010]抓取模块,用于从NDIS中间层抓取以太数据包;
[0011]判断模块,用于根据所述抓取模块抓取的所述以太数据包的HTTP请求的协议头判断是否需要拦截该HTTP请求;
[0012]拦截模块,用于当所述判断模块判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
[0013]实施本发明提供的拦截网页数据的方法及系统,具有以下优点:1、由于无需为每个浏览器开发、安装插件,因此开发及维护成本低;2、由于无需注入浏览器进程、安装Η00Κ,因此稳定性、兼容性好;3、由于无需设置代理,因此不存在降低浏览器访问速度等问题。

【专利附图】

【附图说明】
[0014]图1是根据本发明实施方式的拦截网页数据的方法的流程图;
[0015]图2示出了图1所示的步骤S120的一种实施方式;
[0016]图3示出了图1所示的步骤S130的一种实施方式;
[0017]图4是根据本发明实施方式的拦截网页数据的方法的另一流程图;
[0018]图5示出了图4所示的拦截网页数据的方法的框架图;
[0019]图6示出了本发明实施方式的拦截回包的结构图;
[0020]图7是根据本发明实施方式的拦截网页数据的系统的结构示意图;
[0021]图8示出了图7所示的模块200的一种实施方式的结构示意图;
[0022]图9示出了图7所示的模块300的一种实施方式的结构示意图。

【具体实施方式】
[0023]为使本发明的实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0024]图1是根据本发明实施方式的拦截网页数据的方法的流程图。参见图1,该方法包括:
[0025]SllO:从 NDIS (Network Driver Interface Specificat1n,网络驱动程序接口规范)中间层抓取本机发送的以太数据包。
[0026]其中,NDIS定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。可以通过WinPcap (windows packet capture, windows平台下一个公共的网络访问系统,用于网络封包的抓取)从NDIS中间层抓取以太数据包,也可以通过Microsoft NetworkMonitor (—款网络协议数据分析工具,它能够将计算机上的各种网络接口装置显示在同一个画面之中,并且告诉使用者每一个接口的实时流量,不论是流入或流出,都能够清楚显示)进行抓取。
[0027]S120:根据所述以太数据包的HTTP (Hypertext transfer protocol,超文本传输协议)请求的协议头判断是否需要拦截该HTTP请求。
[0028]S130:当判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
[0029]其中,通过伪装为服务器向请求的发送方回复一个响应,避免发送方未收到来自服务器的响应而再次发送请求,且该响应例如可以是一个内容长度为O的响应(相当于请求的发送方收到一个内容为空的网页),从而实现拦截。
[0030]以上,对本发明提供的方法的整体流程进行了说明,下面结合实施例对本发明的方法的详细流程进行说明。
[0031]【实施例1】
[0032]在实施例1中,拦截网页数据的方法包括上述图1所示的处理方法的所有步骤,其中,如图2所示,步骤S120具体包括下述步骤:
[0033]S121:从所述HTTP请求的协议头中解析出用于识别所述HTTP请求的关键字段。
[0034]其中,关键字段包括:URL (Uniform Resource Locator,统一资源定位符)字段以及提交者(Referer)字段。
[0035]S122:根据关键字段判断所述HTTP请求是否需要拦截。
[0036]其中,可以用关键字段查询拦截规则库,若命中拦截规则库中的规则,则判断为需要拦截所述HTTP请求,若未命中拦截规则库中的规则,则判断为不需要拦截所述HTTP请求。
[0037]可选地,为提高查询拦截规则库的效率,可以预先加载拦截规则库。
[0038]【实施例2】
[0039]在实施例2中,拦截网页数据的方法包括上述图1所示的处理方法的所有步骤,其中,如图3所示,步骤S130具体包括下述步骤:
[0040]S131:根据所述以太数据包构造包含内容长度为O的HTTP响应的拦截回包,其中所述拦截回包中设置有表不通知TCP/IP (Transmiss1n Control Protocol/Internet ProtocoI,传输控制协议/因特网互联协议)协议关闭该HTTP请求对应的TCP (Transmiss1n Control Protocol,传输控制协议)连接的第一标记符和表示通知TCP/IP协议将数据上传到应用层的第二标记符。
[0041]其中,所述数据指代一般意义上的从TCP层向应用层传输的数据。
[0042]S132:将所述拦截回包发送至所述NDIS中间层。
[0043]S133:在该NDIS中间层解析所述拦截回包,根据第一标记符关闭该HTTP请求对应的TCP连接,并根据第二标记符将所述内容长度为O的HTTP响应发送至位于所述应用层的浏览器进程,相当于浏览器请求了一个空白内容的request (请求)。
[0044]【实施例3】
[0045]在实施例3中,以所要拦截的网页数据为网页广告为例,对拦截网页数据的方法进行说明,如图4,所述方法具体包括以下步骤:
[0046]S210:初始化WinPcap驱动模块。该步骤不是每次拦截都需要执行,例如可以在首次启动该拦截网页数据的方法时执行一次。
[0047]具体地,安装并初始化WinPcap协议层网卡驱动,设置WinPcap驱动的工作模式,为后续的数据包收发提供接口。
[0048]S220:加载广告拦截规则库。
[0049]其中,广告拦截规则库定义了一组广告URL规则。为了提高后续查询规则库的效率,可以先将广告拦截规则库加载到内存,并解析每条URL规则。
[0050]S230:设置网卡拔插事件回调函数。
[0051]其中,该网卡拔插事件回调函数用于实时处理网卡的拔插事件。在网卡拔插事件回调函数中,绑定新增的网卡、解除绑定移出的网卡。并且该步骤不是必要步骤,是为了解决winpcap网卡拔插后抓包失效的问题。
[0052]S240:通过WinPcap驱动模块抓取从每个网卡发送的以太数据包。
[0053]其中,winpcap驱动默认工作模式是非实时上抛(上抛指将数据包从内核态驱动上报到应用层广告拦截进程),可以将WinPcap驱动设置为实时上抛,当网卡有发送数据包时,WinPcap驱动会实时抓取并上抛应用层。
[0054]S250:解析Winpcap驱动模块抓取到的数据帧中的TCP/IP协议头。
[0055]具体地,从WinPcap驱动拿到原始数据包(即抓取的以太数据包)后,需要解析数据包的以太(Ethernet)头、IPV4 (Internet Protocol vers1n 4,网际协议版本 4)/IPV6 (Internet Protocol Vers1n 6,网际协议版本6)协议头、TCP协议头,若非TCP数据包,则停止继续解析,并返回步骤S240。若TCP数据长度为0,则停止继续解析,并转步骤S240。
[0056]S260:从TCP数据中识别并解析HTTP请求协议头。若上层数据不是HTTP请求协议头,则停止继续解析,并转步骤S240。
[0057]其中,TCP数据指代一般意义上的在TCP层进行传输的数据,上层数据指TCP协议上层协议。
[0058]S270:从 HTTP 请求协议头中,提取 URI (Uniform Resource Identifier,通用资源标识符),Host字段,并构造完整的URL,从HTTP请求协议头中,提取referer字段。使用该HTTP请求的URL与referer字段,去查询广告拦截规则库。若查询命中规则,则转步骤S280,否则,转步骤S240。
[0059]其中,规则库中定义了带通配符的黑名单URL列表,系统初始化时,加载规则库到内存。
[0060]S280:构造一个内容长度(Content-Length)为O的HTTP响应数据,并外加FIN(finish,结束)| PUSH| ACK(acknowledgement,确认)| URG(urgent,紧急)标记符的 TCP协议头、源目的地址调换后的IP头和源目的地址调换后的Ethernet头,从而构造出一个拦截回包。其中根据TCP、IP(Internet Protocol,因特网互联协议)、Ethernet协议精确设置拦截回包中对应协议头中每个字段的内容。
[0061]S290:将构造的包含Content-Length为O的HTTP响应的拦截回包,通过WinPcap驱动发送到对应网卡上,本机操作系统将接收到该伪造的数据包(即构造的拦截回包),将Content-Length为O的HTTP响应数据发送到浏览器进程,同时关闭该TCP连接,相当于浏览器收到一个内容为空的网页,从而实现拦截。
[0062]图5示出了实施例3的广告拦截框架。如图5所示,当用户通过浏览器浏览网页时,浏览器进程会通过socket发送HTTP请求以及接收服务器HTTP响应。HTTP请求经过TCP/IP协议层、NDIS中间层处理后,会发送到以太网卡上。NDIS中间层驱动会将收发的数据包抓取(Capture) —份发送给WinPcap驱动模块,WinPcap驱动模块将Capture到的原始数据包(即抓取的以太数据包)上抛到广告拦截进程,由应用层处理。
[0063]在本实施例中只使用了 WinPcap方案中的npf (Netgroup Packet Filter,网络数据包过滤器)驱动模块,广告拦截进程直接与npf驱动进行通信,避免wpcap.dll/packet,dll (winpcap提供的两个用户态模块)的干扰。
[0064]在广告拦截进程中,首先初始化WinPcap驱动模块,释放npf驱动到drivers目录,安装并加载npf驱动程序,且只需初始化一次。其次加载广告拦截规则库,由于广告拦截规则库中有大量不含通配符的URL规则,为了提高后续查询规则库的速度,在广告拦截URL规则库初始化阶段,可以对每条URL规则做预处理。若URL规则中不含通配符,则可以使用BM(Boyer-MooreAlgorithm,模式匹配中的一种单模式匹配算法)算法提高匹配速度,初始化阶段即可将子串移动表(所述BM算法中模式字符串的跳转表)生成。
[0065]然后,可选地,初始化网卡拔插事件回调逻辑。由于广告拦截需要打开所有的网卡设备(以太网卡),在系统运行时,存在被禁用的网卡启用、添加新网卡、网卡被禁用、网卡被拔除等事件发生。为了能让广告拦截模块在任何时刻都能侦听所有网卡的数据包,需要注册网卡拔插事件回调函数。通过调用Register Device Notificat1n函数(用于注册设备或者设备类型,在指定的窗口返回相关的信息),当网卡变化时,拦截模块会收到WM_DEVICECHANGE消息(系统硬件改变时发出的系统消息),在该消息处理函数中,处理网卡变化的场景。
[0066]再针对所有已打开的网卡,读取npf抓取的网卡数据包。应用层解析网卡数据包中的Ethernet、IPV4、IPV6、TCP、HTTP协议,如果数据包不是本机发出的HTTP请求包,则直接丢弃数据包,否则从HTTP请求包中解析URL和Referer。
[0067]用解析到的URL和Referer字段去查询广告拦截规则库,当命中拦截规则库中某一条规则时,说明需要拦截屏蔽该HTTP请求,则广告拦截进程开始构造拦截回包(即构造一个 Content-Length: O 的拦截回包)。
[0068]本实施例精确构造一个包含Content-Length为O的HTTP响应的拦截回包。拦截回包结构见图6,其中HTTP头部分包含HTTP/1.1200 0K,用于标记HTTP响应正常、Content-Length:0,用于标记HTTP响应数据包长度为O。在TCP协议头部分,将抓取的以太数据包的TCP协议头的源端口号、目的端口号交换后填充到拦截回包中对应位置,根据抓取的以太数据包的TCP协议头中的ACK、SEQ号,推算出拦截回包的ACK、SEQ (sequence,序列)号。同时设置拦截回包中的FINI PUSH IACKIURG标记符,其中FIN表示通知TCP/IP协议关闭此连接,PUSH IACKIURG通知TCP/IP协议紧急将数据上传到应用层。
[0069]构造拦截回包后,应用层将拦截回包通过WinPcap的npf驱动发送到对应的NDIS中间层驱动。NDIS中间层驱动收到伪造的拦截回包后,会解析并将数据紧急推送到浏览器进程中,然后关闭该TCP连接。
[0070]浏览器进程收到Content-Length为O的HTTP响应(相当于浏览器下载了一个空白的页面)后,广告拦截模块拦截一个URL请求的整个过程完毕。
[0071]图7是根据本发明实施方式的拦截网页数据的系统的结构示意图。如图7所示,该系统包括:
[0072]抓取模块100,用于从NDIS中间层抓取以太数据包。
[0073]其中,可通过WinPcap从NDIS中间层抓取以太数据包。
[0074]判断模块200,用于根据所述抓取模块100抓取的所述以太数据包的HTTP请求的协议头判断是否需要拦截该HTTP请求。
[0075]拦截模块300,用于当所述判断模块200判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
[0076]如图8所示,在本发明的实施方式中,判断模块200可以包括:
[0077]解析单元210,用于从所述HTTP请求的协议头中解析出用于识别所述HTTP请求的关键字段。
[0078]其中,关键字段包括:URL字段以及Referer字段。
[0079]判断单元220,用于根据所述解析单元210解析出的所述关键字段判断所述HTTP
请求是否需要拦截。
[0080]其中,根据关键字段判断所述HTTP请求是否需要拦截可以用关键字段查询拦截规则库,若命中拦截规则库中的规则,则判断为需要拦截所述HTTP请求,若未命中拦截规则库中的规则,则判断为不需要拦截所述HTTP请求。
[0081]可选地,为提高查询拦截规则库的效率,所述系统还可以包括加载模块,用于加载所述拦截规则库。
[0082]如图9所示,在本发明的实施方式中,拦截模块300可以包括:
[0083]回包构造单元310,用于根据所述以太数据包构造包含内容长度为O的HTTP响应的拦截回包,其中所述拦截回包中设置有表示通知TCP/IP协议关闭该HTTP请求对应的TCP连接的第一标记符和表示通知TCP/IP协议将数据上传到应用层的第二标记符。
[0084]回包发送单元320,用于将所述回包构造单元310构造的所述拦截回包发送至所述NDIS中间层。
[0085]回包解析单元330,用于执行如下操作:在该NDIS中间层解析所述回包发送单元320发送的所述拦截回包,根据所述第一标记符关闭该HTTP请求对应的TCP连接,并根据所述第二标记符将所述内容长度为O的HTTP响应发送至位于所述应用层的浏览器进程。
[0086]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对【背景技术】做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,智能手机或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0087]本发明说明书中使用的术语和措辞仅仅为了举例说明,并不意味构成限定。本领域技术人员应当理解,在不脱离所公开的实施方式的基本原理的前提下,对上述实施方式中的各细节可进行各种变化。因此,本发明的范围只由权利要求确定,在权利要求中,除非另有说明,所有的术语应按最宽泛合理的意思进行理解。
【权利要求】
1.一种拦截网页数据的方法,其特征在于,所述方法包括: 从网络驱动程序接口规范NDIS中间层抓取以太数据包; 根据所述以太数据包的超文本传输协议HTTP请求的协议头判断是否需要拦截该HTTP请求; 当判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
2.如权利要求1所述的方法,其特征在于,所述通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截包括: 根据所述以太数据包构造包含内容长度为0的HTTP响应的拦截回包,其中所述拦截回包中设置有表示通知传输控制协议/因特网互联协议TCP/IP协议关闭该HTTP请求对应的TCP连接的第一标记符和表示通知TCP/IP协议将数据上传到应用层的第二标记符; 将所述拦截回包发送至所述NDIS中间层; 在该NDIS中间层解析所述拦截回包,根据所述第一标记符关闭该HTTP请求对应的TCP连接,并根据所述第二标记符将所述内容长度为0的HTTP响应发送至位于所述应用层的浏览器进程。
3.如权利要求1或2所述的方法,其特征在于,所述从NDIS中间层抓取以太数据包包括:通过Winpcap从NDIS中间层抓取以太数据包。
4.如权利要求1或2所述的方法,其特征在于,所述根据所述以太数据包的HTTP请求的协议头判断是否需要拦截该HTTP请求包括: 从所述HTTP请求的协议头中解析出用于识别所述HTTP请求的提交者的关键字段; 根据所述关键字段判断所述HTTP请求是否需要拦截。
5.如权利要求4所述的方法,其特征在于,所述关键字段包括:统一资源定位符URL以及提交者Referer字段。
6.如权利要求4所述的方法,其特征在于,所述根据所述关键字段判断所述HTTP请求是否需要拦截包括: 用所述关键字段查询拦截规则库,若命中所述拦截规则库中的规则,则判断为需要拦截所述HTTP请求。
7.如权利要求6所述的方法,其特征在于,所述方法还包括: 在执行所述从NDIS中间层抓取以太数据包的步骤之前,加载所述拦截规则库。
8.一种拦截网页数据的系统,其特征在于,所述系统包括: 抓取模块,用于从NDIS中间层抓取以太数据包; 判断模块,用于根据所述抓取模块抓取的所述以太数据包的HTTP请求的协议头判断是否需要拦截该HTTP请求; 拦截模块,用于当所述判断模块判断为需要拦截时,通过伪造所述HTTP请求的响应数据,对所述HTTP请求进行拦截。
9.如权利要求8所述的系统,其特征在于,所述拦截模块包括: 回包构造单元,用于根据所述以太数据包构造包含内容长度为0的HTTP响应的拦截回包,其中所述拦截回包中设置有表示通知TCP/IP协议关闭该HTTP请求对应的TCP连接的第一标记符和表示通知TCP/IP协议将数据上传到应用层的第二标记符; 回包发送单元,用于将所述回包构造单元构造的所述拦截回包发送至所述NDIS中间层; 回包解析单元,用于执行如下操作:在该NDIS中间层解析所述回包发送单元发送的所述拦截回包,根据所述第一标记符关闭该HTTP请求对应的TCP连接,并根据所述第二标记符将所述内容长度为O的HTTP响应发送至位于所述应用层的浏览器进程。
10.如权利要求8或9所述的系统,其特征在于,所述从NDIS中间层抓取以太数据包为:通过Winpcap从NDIS中间层抓取以太数据包。
11.如权利要求8或9所述的系统,其特征在于,所述判断模块包括: 解析单元,用于从所述HTTP请求的协议头中解析出用于识别所述HTTP请求的提交者的关键字段; 判断单元,用于根据所述解析单元解析出的所述关键字段判断所述HTTP请求是否需要拦截。
12.如权利要求11所述的系统,其特征在于,所述关键字段包括:统一资源定位符URL以及提交者Referer字段。
13.如权利要求11所述的系统,其特征在于,所述根据所述关键字段判断所述HTTP请求是否需要拦截为: 用所述关键字段查询拦截规则库,若命中所述拦截规则库中的规则,则判断为需要拦截所述HTTP请求。
14.如权利要求13所述的系统,其特征在于,所述系统还包括:加载模块,用于加载所述拦截规则库。
【文档编号】H04L29/06GK104320378SQ201410521165
【公开日】2015年1月28日 申请日期:2014年9月30日 优先权日:2014年9月30日
【发明者】赵中树 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1