路由器及路由器推送本地信息的方法与流程

文档序号:12132473阅读:450来源:国知局
路由器及路由器推送本地信息的方法与流程

本发明涉及一种通信领域,尤其涉及一种路由器及路由器推送本地信息的方法。



背景技术:

目前市面上的基于路由器的广告植入大多都是强制式的,即在用户使用免费wifi之前强制让用户观看广告视频或将用户对于网页的请求重定向到广告页面,待用户浏览完广告后才能正常使用网络,此类技术降低了用户的体验效果,不能满足既不影响用户的正常上网,同时又能实现商业wifi的广告植入的需求。



技术实现要素:

有鉴于此,实有必要提供一种路由器及利用该路由器在实现不影响用户连接wifi浏览网页的同时推送本地信息的方法。

一种路由器推送本地信息的方法,包括如下步骤:接收客户端发送的http请求报文;根据预设的本地信息植入规则判断http请求报文是否需要反馈植入本地信息,所述预设的本地信息植入规则中包括待推送的本地信息的javascripts脚本链接;若http请求报文是需要反馈植入本地信息,则修改http请求报文头部以删除http请求报文http头部Accept-Encoding属性:将已修改的http请求报文发送给WEB服务器;接收WEB服务器发送的WEB服务器回应请求的http回应报文;根据预设本地信息植入规则,在http回应报文的</body>或</html>标记前插入本地信息的javascripts脚本链接;并发送已修改的http 回应报文给用户端。

一种路由器,所述路由器包括接收单元、第一检测单元、修改单元以及发送单元,所述接收单元用于接收客户端发送http请求报文;所述第一检测单元用于根据预设的本地信息植入规则来判断http请求报文是否需要反馈植入本地信息;且所述预设的本地信息植入规则中包括待推送的本地信息的javascripts脚本链接;所述修改单元用于当第一检测单元判断http请求报文需要反馈植入本地信息时,修改http请求报文头部以删除请求报文http头部Accept-Encoding属性;所述发送单元用于发送已修改的http请求报文发送给WEB服务器;所述接收单元还用于接收WEB服务器发送的WEB服务器回应请求的http回应报文;所述修改单元还用于根据预设本地信息植入规则,在http回应报文的</body>或</html>字段后插入本地信息的javascripts脚本链接;所述发送单元还用于发送已修改的http回应报文给用户端。

基于上述路由器及路由器推送本地信息的方法,用户正常使用网络的同时,又能植入本地信息让用户浏览目标网址同时看到所植入的本地信息,即实现wifi商业价值的同时保证了用户的较佳体验。

附图说明

图1为本实施方式路由器推送本地信息的系统的功能模块图。

图2为本实施方式路由器推送本地信息的方法的流程图。

图3为本实施方式中图2的ORG方向的子流程图。

图4为本实施方式中图2的ORG方向的子流程图。

具体实施方式

下面将结合本发明实施方式中的附图,对实施方式中的技术方案进行清楚、完整的描述。

请参看图1,其为路由器推送本地信息的系统的功能模块图。该路由器推送本地信息的系统1包括路由器10、用户端20以及WEB服务器30。当用户端20接入wifi网络后,用户端20访问WEB服务器30的请求报文经由路由器10转发给相应的WEB服务器30;而WEB服务器30回应用户请求的回应报文也经由路由器10转发给用户端20。在路由器10分别转发请求报文和回应报文给相应的WEB服务器30和用户端20过程中,路由器10通过修改请求报文以及回应报文,实现本地信息的植入。本实施方式中,选择http get请求报文和http回应报文。

路由器10包括接收单元101、第一检测单元102、第二检测单元103、修改单元104以及发送单元105。

本实施方式中,路由器是基于linux内核来实现的,且linux内核的网络协议栈采用了netfilter框架。其中,报文从进入路由器到离开路由器流程为:报文从链路层进入prerouting点即数据进来点后,路由器会判断是否是访问本地路由器的报文,若报文不是访问本地路由器的则会进入forward点,然后进入postrouting即数据出去点将报文从路由器发出。本实施方式是通过在forward点修改进入路由器的http get请求报文和http回应报文以实现本地信息植入以及推送。其主要通过在forward hook挂载钩子函数实现本地信息植入。其中钩子函数的处理流程分为ORG方向以及REP方向,ORG方向为用户端20发送请求报文给WEB服务器30方向;REP方向为WEB服务器30发送回应报文给用户端20方向。

接收单元101用于接收进入路由器的报文,其包括用户端20访问WEB服务 器30的http get请求报文以及WEB服务器30回应用户的请求的http回应报文。具体地,http get请求报文和http回应报文均从链路层进入prerouting点。

接收单元101还用于接收管理员发送的预设的本地信息植入规则。其中本地信息植入规则包括植入信息的目的主机,即目的主机的MAC地址或者IP地址、目的主机的目标网址,即用户访问哪些网址时向其植入本地信息、该本地信息植入次数以及本地信息的javascripts脚本链接。

第一检测单元102用于判断接收单元101接收的报文是http get请求报文还是http回应报文,以及还用于在ORG方向即用户端20发送http get请求报文给WEB服务器30方向,检测判断http get请求报文是否是访问路由器本地的报文、根据预设的本地信息植入规则检测判断http get请求报文是否需要反馈植入本地信息以及路由器对http get请求报文在修改过程中的检测判断,其包括判断http get请求报文的http头部accept的属性是否是html或sthml、判断http get请求报文的http头部是否有Accept-encoding的属性。

修改单元104用于根据第一检测单元102检测判断的http get请求报文的http头部存在Accept-encoding属性的结果,删除http get请求报文的http头部Accept-encoding的属性。因为“Accept-Encoding”属性意为要求服务器对于http get请求的回应必须是压缩的,如果服务器回应的报文若是压缩的,则就无法向其中植入本地信息,因此,在ORG方向流程中,当第一检测单元102检测http get请求报文的http头部有Accept-encoding的属性的结果,需要修改删除http get请求报文的http头部Accept-encoding的属性以取消压缩字段。

此外,在ORG方向流程中,修改单元104还用于在http get请求报文所属 的连接跟踪里标注可植入本地信息的标记。具体地,可植入本地信息的标记的设定是为了在REP方向流程里,可根据该可植入本地信息标记决定是否要对http回应报文进行修改。

第二检测单元103用于检测REP方向即WEB服务器30发送http回应报文给用户端20方向,判断http回应报文是否是访问路由器本地的报文、判断http回应报文所属的连接跟踪中是否有可植入本地信息的标记、判断http回应报文所属的连接跟踪中是否有已植入本地信息的标记、以及路由器在http回应报文修改过程中的检测判断包括判断http回应报文是否是WEB服务器20对请求回应的首个数据包、判断http回应报文是否是WEB服务器20对请求回应的最后一个数据包、判断http回应报文的http头部accept的属性是否是html或sthml以及还用于检测判断所接受的WEB服务器对请求回应的http回应报文中有没有</body>或</html>字段。

修改单元104还用于修改http回应报文的http头部的Content-Length属值以使Content-Length属值增加插入的本地信息javascripts脚本链接的信息长度、重新生成两个http回应报文并在其中</body>或</html>标记前插入预设本地信息植入规则中的本地信息链接以及还用于在http回应报文所属连接跟踪里标注已植入本地信息的标记。具体地,实现本地信息植入通过在http回应报文的</body>或</html>标记前插入一个javascripts脚本的链接才可实现本地信息告植入,因此修改单元104重新生成两个http回应报文,其中两个http回应报文的信息包括原报文的信息以及插入的本地信息链接。此外,而插入一个本地信息的javascripts脚本的链接将会使得用户端30请求的网页文件的大小改变,而Content-Length属值代表了请求网页的大小,因此,要在原有的请求的网页文件的长度大小的基础上加上要插入的javascripts信息长度,故又 由修改单元104修改Content-Length属值。当成功植入本地信息后,在http回应报文所属的连接跟踪中打上已植入本地信息的标记,可避免后续同一会话的报文重走REP方向流程。

修改单元104还用于当第二检测单元103判断出回应报文不是WEB服务器请求回应的首个数据包时,将根据所修改的Content-Length属值而对所述接收到的数据包重新编排序列号。

发送单元105用于发送已被修改的http get请求报文给WEB服务器30以及已修改的http回应报文给用户端20。本实施方式中,http get请求报文和http回应报文在forward点修改处理完毕后,将进入postrouting点处理,经链路层分别发送给WEB服务器30和用户端20。

请参看图2,其为路由器推送本地信息方法的流程图。

步骤S201,接收报文。具体地,报文通过链路层进入网络层的prerouting点。

步骤S202,判断所接收的报文为请求报文或者回应报文。若判断所接收的报文为请求报文,则进行步骤S203;若判断接收的报文为回应报文,则进行步骤S208。本实施方式中,请求报文为http get请求报文;回应报文为http回应报文。

步骤S203,判断http get请求报文是否是访问路由器本地的报文,若http get请求报文是访问路由器本地的报文,则直接放行;若http get请求报文不是访问路由器本地的报文,则进行步骤S204。具体地,http get请求报文进入网络层的prerouting点后,路由器将判断http get请求报文的目的IP是否为路由器本机IP。若判断http get请求报文不是访问本地路由器的报文,则进行后续步骤S204;若判断http get请求报文是访问本地路由器的报文,则直接放 行。例如,用户端访问的是百度,则该请求的数据不是到路由器本地的,则将进入到forward点,进行本地信息植入所需步骤。

步骤S204,根据预设的本地信息植入规则判断http get请求报文是否需要反馈植入本地信息,若http get请求报文是需要反馈植入本地信息,则进行步骤S205,若http get请求报文不需要反馈植入本地信息,则直接放行。具体地,预设的本地信息植入规则包括植入该本地信息的目的主机的MAC地址或者IP地址、目的主机的目标网址以及该本地信息植入次数,只有当判断http get请求报文有与上述规则中的内容匹配才反馈植入本地信息。

步骤S205,修改http get请求报文以删除请求报文http头部Accept-Encoding属性,具体地,http get请求报文中http头部包含”Accept-Encoding”属性,意为要求服务器对于http get请求的回应必须是压缩的。但是如果服务器回应的报文是压缩的就无法向其中植入本地信息,所以判断出http get请求报文中http头部包含“Accept-Encoding”属性,则路由器上首先要修改这个删除“Accept-Encoding”属性。

步骤S206,给http get请求报文所属的连接跟踪里标注可植入本地信息的标记,具体地,标注可植入本地信息的标记的设定是为了在REP方向流程里,可根据该可植入本地信息的标记决定是否要对http回应报文进行修改。

步骤S207,将已被修改的http get请求报文转发给WEB服务器。具体地,上述步骤S203到步骤S207表示ORG方向的流程,即路由器修改了用户端发送给WEB服务器方向的http get请求报文,并将修改后的http get请求报文转发给WEB服务器。而当WEB服务器接http get收请求报文后,将针对http get请求报文的内容回应,并发出http回应报文要给用户端,因而,该http回应报文也有路由器转发给用户端方向的流程为REP方向流程,即步骤S208到步骤 S219。

步骤S208,根据步骤S202所判断接收的报文为http回应报文后,判断http回应报文是否是访问路由器本地的报文,若http回应报文是访问路由器本地的报文,则直接放行;若http回应报文不是访问路由器本地的报文,则进行步骤S209。具体地,路由器接收到http回应报文后,将判断http回应报文的目的IP是否为路由器本机IP,若http回应报文的目的IP不是路由器本机IP,则进入到forward点,进行后续步骤;若http回应报文的目的IP是路由器本机IP,则直接放行。

步骤S209,判断http回应报文所属连接跟踪里是否有可植入本地信息的标记,若http回应报文所述连接跟踪里有可植入本地信息的标记,则进行步骤S210;若http回应报文所述连接跟踪里没有可植入本地信息的标记,则直接放行。具体地,根据报文找到所属的连接跟踪,然后再检查该连接跟踪里是否有之前在ORG方向上打上的可植入本地信息的标记。

步骤S210,判断http回应报文所述连接跟踪里是否有已植入本地信息的标记,若http回应报文所述连接跟踪里有已植入本地信息的标记,则直接放行;若http回应报文所述连接跟踪里没有已植入本地信息的标记,则进行步骤S211。

步骤S211,判断回应报文是否是WEB服务器对请求回应的首个数据包,若回应报文是WEB服务器对请求回应的首个数据包则进行步骤S212;若回应报文不是WEB服务器对请求回应的首个数据包,则进行步骤S214。具体地,因为http get请求的网页文件的大小不同,当http get请求的页面大于WEB服务器的MSS值时,WEB服务器将回应报文分几个分段报文以多个数据包形式依次将发出,且将前面几个分段报文的tcp头部的psh标记为0,最后一个分段报文报文的TCP 头部的psh字段为1,因此,回应报文以一个或者多个分段报文的形式从WEB服务器发送出去。例如,用户端发起http get请求upgrade.html页面,而upgrade.html页面大于服务器的MSS值,于是服务器将upgrade.html页面分几个报文依次发送,TCP头部的psh字段为1的表示这upgrade.html页面的最后一个报文。此外,在TCB协议栈中通过报文的TCP头部的确认号Acknowledgment number以及序列号sequence numbler来确认http回应报文是WEB服务器对请求回应的哪个数据包即哪个分段报文,其中确认号Acknowledgment number为当前端成功接收的数据位数,序列号sequence numbler当前端成功发送的数据位数。

步骤S212,判断http回应报文的http头部accept属性是否为html或shtml;若http回应报文的http头部accept属性不是html或shtml,则放行数据;若http回应报文的http头部accept属性是html或shtml,则进行步骤S213。

步骤S213,修改http回应报文http头部Content-Length属值。具体地,Content-Length属值代表http get请求的网页文件大小,因为要插入本地信息的内容,所以网页文件大小会改变,所以需要修改该属值,以使Content-Length属值增加插入的本地信息javascripts脚本链接的信息长度。

步骤S214,当步骤S211判断回应报文不是WEB服务器对请求回应的首个数据包,则重新编排该数据包的序列号。具体地,因为根据本地信息javascripts脚本链接的信息长度修改了第一数据包中的Content-Length属值,所以需要编排除第一数据包外的其他数据包的序列号。

步骤S215,判断http回应报文是否是WEB服务器对请求回应的最后一个数据包,若http回应报文是WEB服务器对请求回应的最后一个数据包,则进行步 骤S216;若http回应报文不是WEB服务器对请求回应的最后一个数据包,则直接放行。具体地,通过检测TCP头部的psh字段是否为1来检测回应报文是否是WEB服务器对请求回应的最后一个数据包,当路由器检测到http回应报文的TCP头部psh标记是为1,则表示已全部接收用户端请求访问页面的数据。

步骤S216,判断所接收的WEB服务器对请求回应的http回应报文的内容是否有</body>或</html>字段。若所接收的WEB服务器对请求回应的http回应报文的内容中没有</body>或</html>字段,则放行数据;若所接收的WEB服务器对请求回应的http回应报文的内容有</body>或</html>字段,则进行步骤S217。

步骤S217,修改回应报文,根据预设的本地信息植入规则插入本地信息的javascripts脚本链接,具体地,重新生成第一报文和第二报文,第一报文复制原报文</body>或</html>前内容,即源IP和目的IP,MAC头部信息;第二报文插入本地信息的javascripts脚本链接,并复制</body>或</html>后的内容,第一报文和第二报文代替原报文。具体地,因为在用户端请求的html文件中</body>或</html>标记前插入一个本地信息的javascripts脚本链接才可实现本地信息植入,譬如,在用户端发起http get请求upgrade.html页面,在该upgrade.html文件中的</body>或</html>标记前插入一个本地信息的javascripts脚本链接才可植入本地信息,例如<scripttype="text/javascript"src="example.js"charset="utf-8"></script>中,example.js脚本即为广告链接。

步骤S218,在http回应报文所属的连接跟踪里标注已植入本地信息的标记。具体地,当成功植入本地信息后,在http回应报文所属的连接跟踪里中标注已植入本地信息的标记,可避免后续同一会话的报文重走REP方向流程。

步骤S219,将已修改的http回应报文转发给用户端。

利用上述流程,路由器在接收请求报文和回应报文后,分别对请求报文和回应报文进行修改,实现了本地信息的植入。

请参看图3,其为路由器推送本地信息方法的在ORG方向中根据预设的本地信息植入规则判断http get请求报文是否需要反馈植入本地信息的子流程图。

步骤S301,判断接收的http get请求报文目的IP或者目的MAC地址是否与预设的本地信息植入规则中的目的IP或者目的MAC地址相同,若http get请求报文目的IP或者目的MAC地址与预设的本地信息植入规则中的目的IP或者目的MAC地址不同,则直接放行;若http get请求报文目的IP或者目的MAC地址与预设的本地信息植入规则中的目的IP或者目的MAC地址相同,则进行步骤S302。具体地,管理员预先向路由器下发本地信息植入规则,规则内容中包括植入该本地信息的目的主机MAC地址或者IP地址、目的主机的目标网址以及该本地信息植入次数。只有当请求报文中包含该规则中的内容才可能被植入该本地信息,因此首先将判断请求报文目的IP或者目的MAC地址是否与预设的本地信息植入规则中的目的IP或者目的MAC地址相同。

步骤S302,判断预设的本地信息植入规则中已植入该本地信息次数是否小于预设次数,若已植入该本地信息次数小于预设次数,则进行步骤S303;若已植入该本地信息次数不小于预设次数,则直接放行。

步骤S303,判断http get请求报文的目标网址URL是否和预设的本地信息植入规则中的目标网址URL相同,若http get请求报文的目标网址URL和预设的本地信息植入规则中的目标网址URL不同,则直接放行;若http get请求报文的目标网址URL和预设的本地信息植入规则中的目标网址URL相同,则代表http get请求报文是需要反馈植入本地信息。具体地,要检测判断http get请求报文和本地信息植入规则的目的主机的目标网址是否相同,因为只有用户访 问的是目标网址时才向其植入本地信息。

请参看图4,其为路由器推送本地信息方法的在ORG方向中修改http get请求报文以删除请求报文http头部Accept-Encoding属性步骤的子流程图。

步骤S401,判断所接收的http get请求报文的http头部accept属性是否为html或shtml,若所接收的http get请求报文的http头部accept属性为html或shtml,则进行步骤S402,;若所接收的http get请求报文的http头部accept属性不是html或shtml,则直接放行。具体地,路由器要判断http get请求是否为html或shtml类型,是因为http头部中的”accept”属性为“text/html”才可以植入本地信息。

步骤S402,判断http get请求报文http头部是否有Accept-Encoding属性,若http get请求报文http头部有Accept-Encoding属性,则进行步骤S403。

步骤S403,删除http get请求报文http头部的Accept-Encoding属性。具体地,因为“Accept-Encoding”属性为要求服务器对于http get请求的回应必须是压缩的。但是如果服务器回应的报文是压缩的就无法向其中植入本地信息,所以判断出报文中http头部包含“Accept-Encoding”属性,则路由器上首先要修改这个删除属性“Accept-Encoding”。

利用上述流程,路由器已成功的修改用户端与WEB服务器之间的交互报文,实现了本地信息的植入。且实现本地信息的植入的同时也不影响用户端原对WEB服务器访问。

对所公开实例的上述说明,使得本技术领域专业人员能够实现或者使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要 符合与本文所公开的原理和新颖特点一致的最宽范围。

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