浏览器中弹出定制信息的装置和方法与流程

文档序号:14490702阅读:184来源:国知局
浏览器中弹出定制信息的装置和方法与流程

本发明涉及计算机技术及软件领域,尤其涉及一种浏览器中弹出定制信息的装置和方法。



背景技术:

随着人们对各种信息需求的增长,定制广告的投放方式也越来越多,最普遍的就是在用户使用终端设备上网的时候弹出定制推送的信息。实现这种功能主要有两种方案:一种是在终端设备上安装定制化的应用程序,即打开该应用程序后弹出推送内容;另一种是基于终端设备上标准固有的应用程序进行推送,即用户使用浏览器上网时弹出推送内容。

第一种方案推广较难成本较高,主要原因如下:首先,需要用户安装额外的应用程序,对此用户较为反感;其次,市面上的安全杀毒软件很容易误判该应用程序为病毒,从而导致安装失败;最后,需要投入的人力和物力等资源较多而回报较少,尤其对没有用户基础的软件发行方来说性价比不高。

第二种方案相对第一种而言,则具有实现简单、部署方便、业务模式清晰等特点,开发者可以与运营商或者网络设备制造商合作实现。但是由于可使用的现成工具软件有各种各样的局限性,如资费较高、配置复杂、扩展性不强、需要替换用户报文、性能较低等缺陷,导致该方案并未普及。如squid软件,该软件是工作在用户态,并且对具体http协议的特性有依赖。http协议本身非常复杂,特性较多,这样会导致对一些网页的处理不符合该协议。比如很多论坛登录会返回set-cookie响应头,可能会导致登录异常。



技术实现要素:

有鉴于此,本发明提供一种浏览器中弹出定制信息的装置和方法,具有处理性能好,移植性强,可扩展性高等特点,能够实现定制信息智能拉取,http报文截取、修改、更新、转发以及http报文流跟踪流机制。

为实现上述目的,根据本发明的一个方面,提供了一种浏览器中弹出定制信息的装置。

本发明的一种浏览器中弹出定制信息的装置包括:定制信息获取模块,运行在用户态,用于获取定制信息,并将所述定制信息发送至定制信息保存模块;定制信息保存模块,运行在内核态,用于接收所述定制信息获取模块发送的定制信息,并保存所述定制信息;处理模块,运行在内核态,用于处理报文,包括:截取报文,修改所述报文的部分内容后转发,以向返回浏览器的报文中插入所述定制信息;学习模块,运行在内核态,用于与所述处理模块交互,记录需要处理的报文的报文信息以及所述报文的处理过程,以便所述处理模块对后续相关报文进行快速处理。

可选地,处理模块还用于:使用skb机制处理报文,且每次对报文修改后均更新报文长度和校验和字段。

可选地,所述装置还用于:所述处理模块截取http协议的上行请求报文,获取报文信息,所述学习模块创建流节点以记录所述报文信息并上链,然后所述处理模块将所述http协议的上行请求报文头部的编码类型字段删除后转发,所述报文信息包括:源ip、目的ip、源端口、目的端口以及报文url信息;以及所述处理模块截取http协议的下行响应报文,获取报文信息,根据所述报文信息判断所述学习模块的链上是否已存在相应的流节点,若存在,则向所述http协议的下行响应报文中插入定制信息,然后所述学习模块将所述流节点下链。

可选地,处理模块还用于:将定制信息配置为与http协议的下行响应报文相应的格式,以便实现定制信息的成功插入。

可选地,学习模块还用于:在创建流节点以记录所述报文信息并上链之后,启动流节点老化机制,若所述流节点的上链时间超过预设时长阈值,则将所述流节点下链。

可选地,学习模块还用于:判断所述处理模块截取到的http协议上行请求报文的url后缀名是否为index.html,若是,则创建流节点以记录所述报文信息并上链,否则不予上链。

可选地,所述装置还用于:若需要多次对同一报文流中的报文插入定制信息,则所述学习模块在所述处理模块首次向所述报文流中的报文插入定制信息后不下链所述流节点,以及所述学习模块记录所述处理模块首次处理所述报文流中的报文的过程,以便所述处理模块处理所述报文流中后续的报文时,快速修改报文及转发。

为实现上述目的,根据本发明的另一方面,提供了一种浏览器中弹出定制信息的方法。

本发明的一种浏览器中弹出定制信息的方法包括:获取定制信息,并将所述定制信息从用户态发送至内核态中保存;在内核态中处理报文,包括:截取报文,修改所述报文的部分内容后转发,以向返回浏览器的报文中插入所述定制信息;其中,在内核态中处理报文的过程中,记录需要处理的报文的报文信息以及所述报文的处理过程,以便对后续相关报文进行快速处理。

可选地,在内核态中处理报文还包括:使用skb机制处理报文,且每次对报文修改后均更新报文长度和校验和字段。

可选地,所述方法还包括:截取http协议的上行请求报文,获取报文信息,创建流节点以记录所述报文信息并上链,然后将所述http协议的上行请求报文头部的编码类型字段删除后转发,所述报文信息包括:源ip、目的ip、源端口、目的端口以及报文url信息;以及截取http协议的下行响应报文,获取报文信息,根据所述报文信息判断链上是否已存在相应的流节点,若存在,则向所述http协议的下行响应报文中插入定制信息,然后将所述流节点下链。

可选地,在内核态中处理报文还包括:将定制信息配置为与http协议的下行响应报文相应的格式,以便定制信息的成功插入。

可选地,所述方法还包括:在创建流节点以记录所述报文信息并上链之后,启动流节点老化机制,若所述流节点的上链时间超过预设时长阈值,则将所述流节点下链。

可选地,所述方法还包括:判断截取到的http协议上行请求报文的url后缀名是否为index.html,若是,则创建流节点以记录所述报文信息并上链,否则不予上链。

可选地,所述方法还包括:若需要多次对同一报文流中的报文插入定制信息,则在首次向所述报文流中的报文插入定制信息后不下链所述流节点,以及记录首次处理所述报文流中的报文的过程,以便处理所述报文流中后续的报文时,快速修改报文及转发。

根据本发明的技术方案,通过在用户态与定制信息业务服务器长连接,从而能够智能的拉取定制信息,通过将定制信息保存在内核态,从而便于后续在内核态中向报文中插入定制信息;通过在内核态中处理报文,插入定制信息,从而一方面可以节省报文处理中内核态与用户态之间的通信次数,另一方面可以实现通过打补丁而非完全替换的便捷方式对报文快速修改和转发;通过利用skb机制,从而可以实现在不拷贝原始报文数据的情况下高效便捷的处理目标报文,并且可以利用skb机制的校验功能,保证报文修改的准确性;通过将定制信息配置为与http协议的下行响应报文相应的格式,从而可以确保定制信息的成功插入;通过设置流节点老化机制,从而可以在尽可能确保定制信息插入的同时,保证处理性能的稳定,减少对资源的占用和浪费;通过在需要多次对同一报文流中的报文插入定制信息时,记录首次处理报文流中的报文的过程,从而可以实现在处理所述报文流中的后续报文时,快速修改报文及转发。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的浏览器中弹出定制信息的装置的主要模块的示意图;

图2是根据本发明实施例的浏览器中弹出定制信息的装置的整体框架示意图;

图3是根据本发明实施例的浏览器中弹出定制信息的装置的处理模块针对上行报文的处理机制的示意图;

图4是根据本发明实施例的浏览器中弹出定制信息的装置的处理模块针对下行报文的处理机制的示意图;

图5是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块的上链逻辑的流程图;

图6是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块的下链逻辑的流程图;

图7是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块的流节点老化机制的示意图;

图8是根据本发明实施例的浏览器中弹出定制信息的方法的主要步骤的示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

本发明实施例提供一种浏览器中弹出定制信息的装置和利用该装置在浏览器中弹出定制信息的方法,可以实现定制信息智能拉取、报文截取并修改以及报文流跟踪流等机制。该技术方案具有处理性能好、移植性强、可扩展性高等特点。

为了精确地阐述本发明实施例,首先定义本发明实施例中一些基本的名词:

http协议:互联网上应用最为广泛的一种网络协议;

学习模块:记录报文流的四元组(源ip、目的ip、源端口、目的端口)信息及url信息;

header:http协议头部;

payload:http协议的数据负载;

netlink机制:用以实现用户进程与内核进程通信的一种特殊的进程间通信(ipc),也是网络应用程序与内核通信的最常用的接口;

skb机制:linux内核原生的报文处理的一系列接口函数。

图1是根据本发明实施例的浏览器中弹出定制信息的装置的主要模块的示意图。

如图1所示,本发明实施例的浏览器中弹出定制信息的装置10主要包括如下模块:定制信息获取模块101、定制信息保存模块102、处理模块103以及学习模块104,其中,

定制信息获取模块101,运行在用户态,用于获取定制信息,并将所述定制信息发送至定制信息保存模块;定制信息保存模块102,运行在内核态,用于接收所述定制信息获取模块发送的定制信息,并保存所述定制信息;处理模块103,运行在内核态,用于处理报文,包括:截取报文,修改所述报文的部分内容后转发,以向返回浏览器的报文中插入所述定制信息;学习模块104,运行在内核态,用于与所述处理模块103交互,记录需要处理的报文的报文信息以及所述报文的处理过程,以便所述处理模块103对后续相关报文进行快速处理。

处理模块103还可用于:使用skb机制处理报文,且每次对报文修改后均更新报文长度和校验和字段。

具体而言,装置10还可用于:处理模块103截取http协议的上行请求报文,获取报文信息,学习模块104创建流节点以记录所述报文信息并上链,然后处理模块103将所述http协议的上行请求报文头部的编码类型字段删除后转发,所述报文信息包括:源ip、目的ip、源端口、目的端口以及报文url信息;以及处理模块103截取http协议的下行响应报文,获取报文信息,根据所述报文信息判断所述学习模块104的链上是否已存在相应的流节点,若存在,则向所述http协议的下行响应报文中插入定制信息,然后学习模块104将所述流节点下链。

其中,处理模块103还可用于:将定制信息配置为与http协议的下行响应报文相应的格式,以便实现定制信息的成功插入。

学习模块104还可用于:在创建流节点以记录所述报文信息并上链之后,启动流节点老化机制,若所述流节点的上链时间超过预设时长阈值,则将所述流节点下链。

学习模块104还可用于:判断所述处理模块103截取到的http协议上行请求报文的url后缀名是否为index.html,若是,则创建流节点以记录所述报文信息并上链,否则不予上链。

此外,装置10还可用于:若需要多次对同一报文流中的报文插入定制信息,则所述学习模块104在所述处理模块103首次向所述报文流中的报文插入定制信息后不下链所述流节点,以及所述学习模块104记录所述处理模块103首次处理所述报文流中的报文的过程,以便所述处理模块103处理所述报文流中后续的报文时,快速修改报文及转发。

图2是根据本发明实施例的浏览器中弹出定制信息的装置的整体框架示意图。

如图2所示,从整体而言,本发明实施例的浏览器中弹出定制信息的装置的大致原理如下:定制信息获取模块101与业务服务器保持长连接,业务服务器定期会推送最新的定制信息。定制信息获取模块101接收后通过netlink通道将定制信息从用户态发送给内核态,并由定制信息保存模块102保存。处理模块103主要负责截取筛选http协议的上、下行报文,并更改替换报文中部分内容后再转发。学习模块104主要使得该方案具有学习功能,对于每个报文流只要通过第一条报文学习后生成记录,后续该流的报文就可以快速处理后转发,从而提高了该方案的处理能力和转发性能。

图3是根据本发明实施例的浏览器中弹出定制信息的装置的处理模块103针对上行报文的处理机制的示意图;图4是根据本发明实施例的浏览器中弹出定制信息的装置的处理模块103针对下行报文的处理机制的示意图。以下结合图3和图4对处理模块103的处理原理进行详细说明。

处理模块103处理机制:

与现有技术中squid软件的报文处理模块在用户态实现机制相比,本发明实施例中的处理报文的核心模块是在内核态完成,这样就减少了内核态与用户态的两次通过netlink的通信,即从内核态将未处理的报文发送到用户态,然后从用户态将处理完后的报文发送到内核态;并且在内核态处理时可以使用skb机制,在不拷贝原始报文数据的情况下调用skb各种功能函数,通过偏移指针的方式高效便捷的处理目标报文,并可享受skb机制自带的校验功能,从而保证了整体方案的健壮性和容错性。处理模块103处理报文可细分为上行报文处理机制和下行报文处理机制。

a、上行报文处理机制:

当判断截取到的报文是http协议的上行请求报文后,学习模块104创建一个新的流节点,节点中保存报文中部分信息如:源ip、目的ip、源端口、目的端口以及请求报文的url等信息,以标记需要对哪个报文流中的报文进行处理。

若http请求报文头部中有编码类型accept-encoding字段,则由处理模块103将其删除。编码类型accept-encoding字段声明了浏览器支持的编码类型,若该字段存在并有值,则web服务器发送响应数据前,会将数据明文经过该编码算法处理成编码密文后再发送,这就将导致处理模块103在处理下行响应报文时无法正确解析数据,从而无法获取所需标志位信息。由于报文长度改变需要重新计算所有协议头部的校验和checksum字段的值。

b、下行报文处理机制:

由于不同web服务器对上行请求的响应报文处理格式是不一致的,主要分为chunk和非chunk两种结构。在chunk结构中,http响应header中没有content-length字段,payload中的数据则是由“chunk单元”组成,报文在结束的位置有明显的结束标志位。在非chunk结构中,header中有content-length字段,payload中的数据则是由“iframe单元”组成。为了实现方便,将推送信息分别构造成“chunk单元”和“iframe单元”。

当截取到http的下行响应报文时,则需要经过查找关键字的方式判断响应报文是属于chunk还是非chunk,然后再构造对应的推送信息单元后插入在报文中。最后更新报文的参数转发。

需要注意的是:在对报文进行增删改查的修改时,务必使用skb机制提供偏移函数操作,并且每次改动均需要更新长度和校验和字段,否则报文接收方在接收后因校验和不一致而丢包。

图5是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块104的上链逻辑的流程图;图6是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块104的下链逻辑的流程图;图7是根据本发明实施例的浏览器中弹出定制信息的装置的学习模块104的流节点老化机制的示意图。以下结合图5、图6和图7对学习模块104的学习原理进行详细说明。

学习模块104工作机制:

学习模块104的机制与现有技术中nf_conn机制类似,可以看作裁剪定制版的nf_conn,目的是为了监控上下行http连接的属性,有针对性的修改http报文。该模块沿用nf_conn的哈希链表的存储方式,索引是源ip、目的ip、源端口、目的端口的四元组(nl_conn是五元组,多了一个协议号,由于我们只针对http协议,所以不需要该元素)。

学习模块104可以实现两种功能:首先,该模块可以提供精准插入推送的定制信息的功能。之前采用的方案中选择插入广告的http下行报文目的性不是很强,而学习模块104则根据http报文的特性可以有针对性的插入广告,从而大幅度提升定制信息推送成功的概率,避免了一些不必处理节省了系统资源;其次,该模块可以在一些条件下提高转发性能。例如,当需要多次推送定制消息时可以根据流节点记录的信息快速的重构报文并转发,节省了常规解析http报文的流程处理。学习模块104的工作机制主要包括上链机制和下链机制两种。

a、上链机制:

在截取到http的上行请求报文,获取到四元组信息以及其他信息(如请求的url等信息),经过判断后确定是否构造哈希链表节点(即前述“流节点”)然后上链,上链的同时并启动下链定时器,最后由处理模块103消除http上行请求报文头中的编码类型accept-encoding字段后将报文转发出去。

其中,本发明实施例中,为了提供精准插入推送的定制信息的功能,提高定制信息推送的成功概率,在获取到上行请求报文的url后,还可以检测url后缀名是否为index.html等,代表该请求是指向网站默认的首页,若是则上链,若不是则放行。

b、下链机制:

在截取到http的下行响应报文,获取到四元组信息并进行源与目的颠倒后查找学习模块104的哈希链表,若没有找到相关流节点则转发,若找到则进入尝试插入广告判断,成功插入后则该流节点下链。从而保证用户只会在第一次打开相关网页的情况看到推送的定制信息。

此外,根据前述设置流节点老化机制,即当下链定时器超时(即预先设定时长阈值,例如可以但不限于为30秒)后把流节点下链。这样做的目的在于流节点在存储链上会占用存储空间,例如一个首页可能会有200多个请求,创建200多个流节点,如果流节点响应超时,则这些流节点会占用较大的存储空间,因此,为了保障不影响浏览器性能,应及时启动异常处理机制,判定某流节点老化后,对该流节点进行删除以下链。

根据本发明实施例的浏览器中弹出定制信息的装置可以看出,通过在用户态与定制信息业务服务器长连接,从而能够智能的拉取定制信息,通过将定制信息保存在内核态,从而便于后续在内核态中向报文中插入定制信息;通过在内核态中处理报文,插入定制信息,从而一方面可以节省报文处理中内核态与用户态之间的通信次数,另一方面可以实现通过打补丁而非完全替换的便捷方式对报文快速修改和转发;通过利用skb机制,从而可以实现在不拷贝原始报文数据的情况下高效便捷的处理目标报文,并且可以利用skb机制的校验功能,保证报文修改的准确性;通过将定制信息配置为与http协议的下行响应报文相应的格式,从而可以确保定制信息的成功插入;通过设置流节点老化机制,从而可以在尽可能确保定制信息插入的同时,保证处理性能的稳定,减少对资源的占用和浪费;通过在需要多次对同一报文流中的报文插入定制信息时,记录首次处理报文流中的报文的过程,从而可以实现在处理所述报文流中的后续报文时,快速修改报文及转发。

图8是根据本发明实施例的浏览器中弹出定制信息的方法的主要步骤的示意图。

如图8所示,本发明实施例中利用浏览器中弹出定制信息的装置进行定制信息的推送的方法主要包括如下步骤:

步骤s81:获取定制信息,并将所述定制信息从用户态发送至内核态中保存;

步骤s82:在内核态中处理报文,包括:截取报文,修改所述报文的部分内容后转发,以向返回浏览器的报文中插入所述定制信息;

步骤s83:其中,在内核态中处理报文的过程中,记录需要处理的报文的报文信息以及所述报文的处理过程,以便对后续相关报文进行快速处理。

其中,本发明实施例中,在内核态中处理报文还包括:使用skb机制处理报文,且每次对报文修改后均更新报文长度和校验和字段。

此外,本发明实施例的浏览器中弹出定制信息的方法还可包括:截取http协议的上行请求报文,获取报文信息,创建流节点以记录所述报文信息并上链,然后将所述http协议的上行请求报文头部的编码类型字段删除后转发,所述报文信息包括:源ip、目的ip、源端口、目的端口以及报文url信息;以及截取http协议的下行响应报文,获取报文信息,根据所述报文信息判断链上是否已存在相应的流节点,若存在,则向所述http协议的下行响应报文中插入定制信息,然后将所述流节点下链。

另外,在内核态中处理报文还可包括:将定制信息配置为与http协议的下行响应报文相应的格式,以便定制信息的成功插入。

本发明实施例的浏览器中弹出定制信息的方法还可包括流节点老化机制和报文url筛选机制:在创建流节点以记录所述报文信息并上链之后,启动流节点老化机制,若所述流节点的上链时间超过预设时长阈值,则将所述流节点下链;判断截取到的http协议上行请求报文的url后缀名是否为index.html,若是,则创建流节点以记录所述报文信息并上链,否则不予上链。

此外,本发明实施例中,若需要多次对同一报文流中的报文插入定制信息,则在首次向所述报文流中的报文插入定制信息后不下链所述流节点,以及记录所述首次处理所述报文流中的报文的过程,以便处理所述报文流中后续的报文时,快速修改报文及转发。

从以上描述可以看出,通过在用户态与定制信息业务服务器长连接,从而能够智能的拉取定制信息,通过将定制信息保存在内核态,从而便于后续在内核态中向报文中插入定制信息;通过在内核态中处理报文,插入定制信息,从而一方面可以节省报文处理中内核态与用户态之间的通信次数,另一方面可以实现通过打补丁而非完全替换的便捷方式对报文快速修改和转发;通过利用skb机制,从而可以实现在不拷贝原始报文数据的情况下高效便捷的处理目标报文,并且可以利用skb机制的校验功能,保证报文修改的准确性;通过将定制信息配置为与http协议的下行响应报文相应的格式,从而可以确保定制信息的成功插入;通过设置流节点老化机制,从而可以在尽可能确保定制信息插入的同时,保证处理性能的稳定,减少对资源的占用和浪费;通过在需要多次对同一报文流中的报文插入定制信息时,记录首次处理报文流中的报文的过程,从而可以实现在处理所述报文流中的后续报文时,快速修改报文及转发。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1