技术领域
[0001] 本
发明涉及无线终端类型识别,特别是涉及一种路由器网桥模式下无线终端类型的识别系统及方法。
背景技术
[0002] DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种采用客户端/
服务器模型基于UDP协议工作的一种局域网网络协议。主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息。
[0003] 网桥(Bridge)模式,在此模式下,该设备相当于一台缩减版的小型交换机,可实现无线之间、无线到有线、无线到广域网络的
访问。最常见的能够提供无线客户端的接入,例如:无线网卡接入等;路由器此模式下没有DHCP服务器,不提供IP地址分配服务,无线客户端的IP地址需要由路由器上联DHCP服务器或者内网DHCP服务器提供IP地址。
[0004] netfilter是在linux
内核整个网络流程的若干
位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是用户自定义的功能)。
[0005] IP层的五个HOOK点如下:
[0006] NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点,目的地址转换在此点进行;
[0007] NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行;
[0008] NF_IP_FORWARD:要转发的包通过此检测点,FORWARD包过滤在此点进行;
[0009] NF_IP_POST_ROUTING:所有
马上便要通过网络设备出去的包通过此检测点,内置的源地址转换功能在此点进行;
[0010] NF_IP_LOCAL_OUT:本机
进程发出的包通过此检测点,OUTPUT包过滤在此点进行。
[0011] 现有的路由器工作在路由模式下,此时,DHCP服务器集成在路由器系统中,可以直接从路由器收到的终端发来的DHCP request或者Discover包中根据option12字段或者option60字段解析出终端关键字,然后发送到
云服务器处理。这种方法对于路由器工作在路由模式来说,很容易做到获取我们所需要的终端类型信息,这种方式存在几点不足,一是当工作在网桥模式下时候,路由器本身不提供DHCP服务器功能,只对终端的DHCP报文进行转发,因此不能通过DHCP服务器获取到终端类型信息;而是option12或者option60字段提供的信息不足以达到我们需要知道的终端类型的标准,往往最多只能知道是什么厂商和终端型号,option60字段,部分厂商往往不设置该字段或者是设置不准确(比如一部手机,部分小厂商可能只设置厂商名,而不带手机型号),option12字段对于大部分原始终端来说管用,但是当用户
修改了终端命名信息后(比如用户可以更改为任何的名字,比如Android手机默认是Andorid-45342323,而用户可以修改为564354),就不知道如何判别类型了,同时当前的方案都是需要在云端服务器查询,当路由器与Internet断开后就无法知晓这是何种终端类型。
发明内容
[0012] 鉴于以上所述
现有技术的缺点,本发明的目的在于提供一种路由器网桥模式下无线终端类型的识别系统及方法,用于解决现有路由器在网桥模式下不能通过DHCP服务器获取终端类型、终端类型判断准确率低、以及断网后无法知晓终端类型的问题。
[0013] 为实现上述目的及其他相关目的,本发明一方面提供一种路由器网桥模式下无线终端类型的识别方法,包括:在网桥模式下,抓取路由器转发的所有通讯数据包并对所有的通讯数据包进行过滤以得到无线终端与DHCP服务器交互的DHCP
请求数据包;对所述DHCP请求数据包进行解析以得到解析值;以及将所得到的解析值和所述无线终端的MAC地址一起发送至云端服务器进行无线终端类型的查询以获取所述无线终端的类型。
[0014] 优选地,对所有的通讯数据包进行过滤,包括:
[0015] 判断所述通讯数据包是否为来自无线局域网,若是,则继续判断,若否,则对所述通讯数据包放行;
[0016] 判断所述通讯数据包中的源IP地址是否为0.0.0.0和目的IP地址是否为255.255.255.255,若所述源IP地址和所述目的IP地址均为是,则继续判断,若所述源IP地址和所述目的IP地址中任一为否,则对所述通讯数据包放行;
[0017] 判断所述通讯数据包是否为用户数据包,若是,则继续判断,若否,则对所述通讯数据包放行;
[0018] 判断所述通讯数据包的源端口号是否为68和目的端口号是否为67,若所述源端口号和所述目的端口号均为是,则继续判断,若所述源端口号和所述目的端口号中任一为否,则对所述通讯数据包放行;
[0019] 判断所述通讯数据包中的信息类型字段是否为请求数据包,若是,则得到了所述DHCP请求数据包,若否,则对所述通讯数据包放行。
[0020] 优选地,对所述DHCP请求数据包进行解析以得到解析值,包括:
[0021] 对所述DHCP请求数据包中的主机名字段、附加请求参数字段、以及厂商识别字段进行解析,得出对应的主机名字段值、附加请求参数字段值、以及厂商识别字段值。
[0022] 优选地,将解析到的所述主机名字段值、所述附加请求参数字段值、以及厂商识别字段值同所述无线终端的MAC地址一起发送至用户态,由用户态将所述主机名字段值、所述附加请求参数字段值、以及厂商识别字段值和所述无线终端的MAC地址经无线通信传送至云端服务器。
[0023] 优选地,还包括:
[0024] 在路由器的本地
数据库对所得到的解析值和所述无线终端的MAC地址进行无线终端类型的查询,以获得本地查询结果;
[0025] 将所述本地查询结果上报至所述云端服务器;
[0026] 由所述云端服务器比对云端查询结果和所述本地查询结果,若比对结果一致,则由所述云端服务器将比对结果发送至所述路由器,若比对结果不一致,则由所述云端服务器将所述云端查询结果发送至所述路由器替换所述本地查询结果以更新本地数据库。
[0027] 本发明另一方面还提供了一种路由器网桥模式下无线终端类型的识别系统,包括:
[0028] 与路由器连接的数据过滤单元,用于在网桥模式下,抓取所述路由器转发的所有通讯数据包并从中过滤得到无线终端与DHCP服务器交互的DHCP请求数据包;
[0029] 与所述数据过滤单元连接的数据解析单元,用于对经所述数据过滤单元过滤得到的所述DHCP请求数据包进行解析以得到对应的解析值;以及
[0030] 与所述数据解析单元连接的无线通信单元,用于将得到的所述解析值和所述无线终端的MAC地址一起发送至云端服务器,以使得所述云端服务器对所述无线终端的类型进行查询进而获取所述无线终端的类型。
[0031] 优选地,所述数据过滤单元中包括来源判断模
块、地址判断模块、用户包判断模块、端口号判断模块、以及信息类型判断模块;
[0032] 所述来源判断模块与所述路由器的内核连接,用于获取由所述内核转发的所有通讯数据包,并对所有的通讯数据包进行逐一判断,判断所述通讯数据包是否为来自无线局域网,若是,则将所述通讯数据包发送给所述地址判断模块,若否,则对所述通讯数据包放行;
[0033] 所述地址判断模块与所述来源判断模块连接,用于对从所述来源判断模块发送来的所述通讯数据包进行判断,判断所述通讯数据包中的源IP地址是否为0.0.0.0和目的IP地址是否为255.255.255.255,若所述源IP地址和所述目的IP地址均为是,则将所述通讯数据包发送给所述用户包判断模块,若所述源IP地址和所述目的IP地址中的任一为否,则对所述通讯数据包放行;
[0034] 所述用户包判断模块与所述地址判断模块连接,用于对从所述地址判断模块发送来的所述通讯数据包进行判断,判断所述通讯数据包是否为用户数据包,若是,则将所述通讯数据包发送给所述端口号判断模块,若否,则对所述通讯数据包放行;
[0035] 所述端口号判断模块与所述用户包判断模块连接,用于对从所述用户包判断模块发送来的所述通讯数据包进行判断,判断所述通讯数据包的源端口号是否为68和目的端口号是否为67,若所述源端口号和所述目的端口号均为是,则将所述通讯数据包发送给所述信息类型判断模块,若所述源端口号和所述目的端口号中任一为否,则对所述通讯数据包放行;
[0036] 所述信息类型判断模块与所述端口号判断模块连接,用于对从所述端口号判断模块发送来的所述通讯数据包进行判断,判断所述通讯数据包中的信息类型字段是否为请求数据包,若是,则得到了所述DHCP请求数据包,若否,则对所述通讯数据包放行。
[0037] 优选地,所述数据解析单元包括主机名解析模块、请求参数解析模块、以及厂商解析模块;
[0038] 所述主机名解析模块用于对所述DHCP请求数据包中的主机名字段进行解析以得出对应的主机名字段值;
[0039] 所述请求参数解析模块用于对所述DHCP请求数据包中的附加请求参数字段进行解析以得出对应的附加请求参数字段值;
[0040] 所述厂商解析模块用于对所述DHCP请求数据包中的厂商识别字段进行解析以得出对应的厂商识别字段值。
[0041] 优选地,还包括与所述数据解析单元和所述无线通信单元连接的用户态单元,用于接收所述数据解析单元解析出的所述主机名字段值、所述附加请求参数字段值、以及厂商识别字段值和获取所述无线终端的MAC地址,并将接收到的所述主机名字段值、所述附加请求参数字段值、以及厂商识别字段值和所述无线终端的MAC地址发送给所述无线通信单元。
[0042] 优选地,还包括设于所述路由器中的本地数据库和查询单元,所述查询单元与所述本地数据库、所述数据解析单元、以及所述无线通信单元连接,所述查询单元用于根据所述解析值和所述无线终端的MAC地址在所述本地数据库中查询以获得本地查询结果,并将所述本地查询结果通过所述无线通信单元发送至所述云端服务器,所述查询单元根据所述云端服务器的反馈结果进行对应的处理,若所述云端服务器反馈云端查询结果与所述本地查询结果不一致,则所述查询单元将所述云端查询结果替换所述本地查询结果以更新所述本地数据库。
[0043] 如上所述,本发明的一种路由器网桥模式下无线终端类型的识别系统及方法,具有以下有益效果:
[0044] 本发明的路由器网桥模式下无线终端类型的识别系统及方法,当路由器工作在网桥模式下,Android手机、iPhone等无线终端连接上此路由器后,路由器能够通过无线终端与DHCP服务器交互的DHCP报文,从中解析出有用的信息,然后分别在路由器本地数据库里查询和云端服务器数据库里查询,通过两者查询结果来进行相应的设备类型更新,从而判断出该手机的设备类型是Android、iPhone等类型终端。本发明保证本地数据库不断更新,从而提高终端类型识别的正确率,随着数据库数据条数的增多,自动识别类型的准确率会不断提高,当路由器同Internet断开时,可以通过本地数据库查询识别终端类型,解决了断网后无法知晓终端类型的问题。
附图说明
[0045] 图1为本发明路由器网桥模式下无线终端类型的识别系统的结构
框图。
[0046] 图2为本发明路由器网桥模式下无线终端类型的识别方法的
流程图。
[0047] 图3为本发明路由器网桥模式下无线终端类型的识别方法中内核数据过滤处理流程图。
[0048] 图4为本发明路由器网桥模式下无线终端类型的识别方法中终端类型识别查询比对处理流程图。
[0049] 元件标号说明
[0050] 11 数据过滤单元
[0051] 12 数据解析单元
[0052] 13 无线通信单元
[0053] 14 本地数据库
[0054] 15 查询单元
[0055] 16 云端服务器
[0056] S21~S23 步骤
[0057] S301~S314 步骤
[0058] S401~S410 步骤
具体实施方式
[0059] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本
说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下
实施例及实施例中的特征可以相互组合。
[0060] 需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0061] 请参阅图1,本发明提供一种路由器网桥模式下无线终端类型的识别系统及方法,用于对无线终端类型识别,即对接入该路由器的终端(如带有WIFI功能的手机、
笔记本电脑、
平板电脑、台式计算机等)进行类型匹配,若此时路由器工作在网桥模式下,Android手机、iPhone等无线终端连接上此路由器后,路由器能够通过无线终端与DHCP服务器交互的DHCP报文,从中解析出有用的信息,然后分别在路由器本地数据库里查询和云端服务器数据库里查询,通过两者查询结果来进行相应的设备类型更新,从而判断出该手机的设备类型是Android、iPhone等类型终端。下面结合附图对本发明路由器网桥模式下无线终端类型的识别系统及方法进行说明。
[0062] 如图1所示,本发明一种路由器网桥模式下无线终端类型的识别系统包括数据过滤单元11、数据解析单元12、无线通信单元13、本地数据库14、查询单元15、以及云端服务器16,数据过滤单元11与路由器连接,数据解析单元12与数据过滤单元11连接,无线通信单元
13与数据解析单元12连接,无线通信单元13与云端服务器16无线通信连接,查询单元15与数据解析单元12、无线通信单元13、以及查询单元15连接。
[0063] 数据过滤单元11用于在网桥模式下,抓取路由器转发的所有通讯数据包并从中过滤得到无线终端与DHCP服务器交互的DHCP请求数据包;数据过滤单元11中包括来源判断模块、地址判断模块、用户包判断模块、端口号判断模块、以及信息类型判断模块。
[0064] 来源判断模块与路由器的内核连接,用于获取由内核转发的所有通讯数据包,并对所有的通讯数据包进行逐一判断,判断通讯数据包是否为来自无线局域网,若是,则将通讯数据包发送给地址判断模块,若否,则对通讯数据包放行;地址判断模块与来源判断模块连接,用于对从来源判断模块发送来的通讯数据包进行判断,判断通讯数据包中的源IP地址是否为0.0.0.0和目的IP地址是否为255.255.255.255,若源IP地址和目的IP地址均为是,则将通讯数据包发送给用户包判断模块,若源IP地址和目的IP地址中的任一为否,则对通讯数据包放行;用户包判断模块与地址判断模块连接,用于对从地址判断模块发送来的通讯数据包进行判断,判断通讯数据包是否为用户数据包,若是,则将通讯数据包发送给端口号判断模块,若否,则对通讯数据包放行;端口号判断模块与用户包判断模块连接,用于对从用户包判断模块发送来的通讯数据包进行判断,判断通讯数据包的源端口号是否为68和目的端口号是否为67,若源端口号和目的端口号均为是,则将通讯数据包发送给信息类型判断模块,若源端口号和目的端口号中任一为否,则对通讯数据包放行;信息类型判断模块与端口号判断模块连接,用于对从端口号判断模块发送来的通讯数据包进行判断,判断通讯数据包中的信息类型字段是否为请求数据包,若是,则得到了DHCP请求数据包,若否,则对通讯数据包放行。
[0065] 数据解析单元12用于对经过数据滤单元11过滤到的DHCP请求数据包进行解析以得到对应的解析值;数据解析单元12包括主机名解析模块、请求参数解析模块、以及厂商解析模块;主机名解析模块用于对DHCP请求数据包中的主机名字段(Option12)进行解析以得出对应的主机名字段值;请求参数解析模块用于对DHCP请求数据包中的附加请求参数(Option55)字段进行解析以得出对应的附加请求参数字段值;厂商解析模块用于对DHCP请求数据包中的厂商识别字段(Option60)进行解析以得出对应的厂商识别字段值。
[0066] 无线通信单元13用于将得到的解析值和无线终端的MAC地址一起发送至云端服务器16,以使得云端服务器16对无线终端的类型进行查询进而获取无线终端的类型。较佳地,还包括与数据解析单元12和无线通信单元13连接的用户态单元,用于接收数据解析单元12解析出的主机名字段值、附加请求参数字段值、以及厂商识别字段值和获取无线终端的MAC地址,并将接收到的主机名字段值、附加请求参数字段值、以及厂商识别字段值和无线终端的MAC地址发送给无线通信单元13,通过无线通信单元13将信息传送给云端服务器16。
[0067] 查询单元15用于根据解析值和无线终端的MAC地址在本地数据库14中查询以获得本地查询结果,并将本地查询结果通过无线通信单元13发送至云端服务器16,查询单元15根据云端服务器16的反馈结果进行对应的处理,若云端服务器16反馈云端查询结果与本地查询结果不一致,则查询单元将云端查询结果替换本地查询结果以更新本地数据库。
[0068] 本发明涉及到网桥模式下解析DHCP报文,首先需要抓取到DHCP request数据包,本文中路由器以嵌入式linux系统为系统
软件,要解析数据包,那么需要在linux内核态相关模块注册内核HOOK函数(又名“钩子函数”),本发明基于嵌入式linux系统内核netfileter包过滤,HOOK函数注册到NF_IP_FORWARD(转发)点,然后就可以从HOOK函数参数中解析DHCP报文了。由于HOOK函数抓到的数据包是内核转发的所有数据包,因此我们首要的就是要过滤掉不需要的数据包,注册钩子函数后,DHCP包过滤ko模块即数据过滤单元便可生成,在系统上电启动后加载此模块,HOOK函数的参数中已经可以抓取到经过路由器转发的数据包。
[0069] 数据过滤单元11的工作原理,在解析数据包时,首先因本发明的识别系统仅针对无线终端,所以对数据包是来自有线LAN侧还是无线LAN侧进行判断,若是有线LAN侧的包就直接放行,结束此包的处理流程,否则就继续判断。通过上面的判断后,继续解析此数据包,解析出数据包的源IP地址,如果该数据包的源IP地址不是0.0.0.0且目的IP地址不是255.255.255.255(广播地址),那么就对此包进行放行,结束此包处理流程,因为DHCP Request包(DHCP请求数据包)的源IP地址一定是0.0.0.0,目的IP地址是255.255.255.255;
通过判断后继续解析此数据包,由于DHCP协议是基于UDP协议,如果是TCP包,那么直接放行,放行是指让数据包顺利通过路由器,不对其进行拦截处理,结束此包的处理流程,若是UDP包则继续判断,继续解析此数据包,解析出源端口号和目的端口号,如果源端口号和目的端口号分别不为68和67,那么直接放行数据包,结束此包处理流程,因为DHCP请求数据包的由DHCP客户端也就是无线终端发送到DHCP服务器的包,而此包按照DHCP协议,源端口号一定是68,目的端口号一定是67。通过判断后继续解析此数据包,解析Option53字段,判断其值是否为3(Request包),如果不是3,则直接放行数据包,结束处理流程,若是就获得了DHCP请求数据包。经过了以上步骤处理,大部分对于终端类型识别“无用”的数据包已经过滤掉,这样处理的好处是可以提高路由器系统的运行效率,毕竟对数据包的处理会占用一定的系统资源,处理完成后,只剩下DHCP Request报文,直接对此包的Option12、Option55、Option60字段进行解析,获取其相应的值,然后通过Netlink技术将此三个字段的值同终端MAC地址发送到用户态,然后放行此数据包(只读取数据包中信息,读取结束放行,否则DHCP交互过程会失败),最后用户态将三个字段的值和对应MAC地址经Internet发送到云端。(除了这三个字段的值,还会带上终端的MAC地址来识别是哪个终端)
[0070] 云端服务器16和查询单元15的工作原理为:进行转动类型查询的方式可以按照Option60、Option12、Option55顺序进行查询,Option60是厂商识别号,通常厂家会带上厂商名,部分也同时带上产品型号;Option12是hostname,通常会设置为产品类型和序列号,Option55通常设置为请求的一些附加参数,请求的参数顺序,子字段条目多少,各个厂商和终端不一样,也会有区别。一种查询方法比如:某厂商手机的Option60字段为“****_phone”,那么可以确定此终端是手机,该厂商Android手机的Option12字段为“android-9dc35f25f1ged653”,那么通过这两个字段就可以大致确定这个终端类型是Android手机,再和Option55字段值比对,可以达到90%以上的准确率,由于Option12可能会在终端上修改过,那么当Option12不能确定时候,需要Option55字段值来确定。查询
算法可以设计多种,并不以上面的方法为限。
[0071] 一方面,云端数据库16查询此终端的终端类型,将查询结果保存,等待和路由器本地查询结果进行比对;另一方面在用户态本地数据库中查询终端类型,查询到后上报到云端和云端查询结果进行比对,如果本地查询的终端类型与云端查询到的终端类型不一致,那么云端将云端查询的结果下发到路由器本地,替换掉路由器本地查询到该无线终端的终端类型,这样便更新了本地的数据库,这样可以保证本地显示的终端类型一定的正确率,当路由器与Internet断开后,新的无线终端接入路由器,路由器也可以在本地查询到相应的终端类型,经过一定的时间积累,本地数据库可以和云端数据库保持一致。
[0072] 本发明路由器网桥模式下无线终端类型的识别系统的有益效果为:
[0073] 在网桥模式下通过抓取无线终端与DHCP服务器的通讯报文来解析DHCP Request数据包(不选择Discover包是因为当无线终端第一次采用Discover、Request步骤
申请分配到IP地址后,在IP地址租约时间未到之前用户断开无线后再次连接上,获取IP地址时候,只有Request而没有Discover步骤)中option12(hostname字段)、option55(附加请求参数)、option60(厂商识别)三个字段的参数值,然后上报的云端服务器进行查询。
[0074] 将参数值发送到云端查询的同时,也在路由器本地数据库里查询,通过调整三个字段顺序来确定查询优先级,在云端终端类型数据库中自动查找该终端的终端类型,同时在本地数据库中查找到类型后,上报到云端进行比对,如果本地查询结果同云端查询的结果不一致,那么将云端查询结果下发到本地(云端数据库数据更多,因此准确率更高),同时更新本地数据库(替换掉本地查询结果),保证本地数据库不断更新,从而提高终端类型识别正确率。如果云端数据库数据足够多,可以大大提高对终端类型的识别准确率,而且云端数据库数据可以人工添加终端类型数据,随着数据库数据条数的增多,自动识别类型的准确率会不断提高。
[0075] 当路由器同Internet断开时候,新的无线终端接入路由器后,路由器通过查询本地数据库,也可以识别终端类型。
[0076] 下面对本发明路由器网桥模式下无线终端类型的识别方法进行说明。
[0077] 如图2所示,本发明路由器网桥模式下无线终端类型的识别方法包括如下步骤:
[0078] 执行步骤S21,在网桥模式下,获取DHCP请求数据包,通过抓取路由器转发的所有通讯数据包,并对所有的通讯数据包进行过滤来得到无线终端与DHCP服务器交互的DHCP请求数据包,接着执行步骤S22。
[0079] 执行步骤S22,对DHCP请求数据包进行解析以得到解析值,接着执行步骤S22。
[0080] 执行步骤S23,将解析值和无线终端的MAC地址发送至云端服务器进行无线终端类型的查询,以获取无线终端的类型。
[0081] 如图3所示,内核过滤处理数据包流程为:
[0082] 执行步骤S301,加载内核数据包解析KO模块,用于启动数据过滤单元进行工作,该KO模块即为数据过滤单元,接着执行步骤S302。
[0083] 执行步骤S302,解析HOOK函数中收到的转发数据包,由于HOOK函数抓到的数据包是内核转发的所有数据包,因此需要过滤掉不需要的数据包,接着执行步骤S303。
[0084] 执行步骤S303,判断是否为无线LAN侧包,由于识别无线终端类型仅针对无线LAN侧,可以过滤掉有限LAN侧的,判断通讯数据包是否为来自无线局域网,若是,则继续判断,接着执行步骤S304,若否,接着执行步骤S314而对通讯数据包放行;
[0085] 执行步骤S304,解析源IP地址和目的IP地址,由于DHCP请求数据包中的源IP地址和目的IP地址为固定值,可以通过解析出通讯数据包中的源IP地址和目的IP地址对通讯数据包是否为DHCP请求数据进行判断。接着执行步骤S305。
[0086] 执行步骤S305,判断源IP地址和目的IP是否分别为0.0.0.0和255.255.255.255,判断通讯数据包中的源IP地址是否为0.0.0.0和目的IP地址是否为255.255.255.255,若源IP地址和目的IP地址均为是,则继续判断,接着执行步骤S306,若源IP地址和目的IP地址中任一为否,接着执行步骤S314而则对通讯数据包放行;
[0087] 执行步骤S306,解析数据包类型,DHCP协议是基于UDP协议,所以DHCP请求数据包一定是UDP包(用户数据包),可以以此为判断条件进一步进行过滤,接着执行步骤S307。
[0088] 执行步骤S307,是否为UDP包,判断通讯数据包是否为用户数据包,若是,则继续判断,接着执行步骤S308。若否,接着执行步骤S314而则对通讯数据包放行;
[0089] 执行步骤S308,解析数据包源端口和目的端口,由于DHCP请求数据包中的源端口和目的端口号为固定值,可以通过解析出通讯数据包中的源端口号和目的端口号对通讯数据包是否为DHCP请求数据进行判断。接着执行步骤S309。
[0090] 执行步骤S309,端口号是否分别为68和67,判断通讯数据包的源端口号是否为68和目的端口号是否为67,若源端口号和目的端口号均为是,则继续判断,接着执行步骤S310,若源端口号和目的端口号中任一为否,接着执行步骤S314而对通讯数据包放行;
[0091] 执行步骤S310,解析DHCP包类型,解析Option53字段,该字段值为3表示是DHCP请求数据包。接着执行步骤S311。
[0092] 执行步骤S311,是否为DHCP Request包,判断通讯数据包中的信息类型字段是否为请求数据包,若是接着执行步骤S312,则得到了DHCP请求数据包,若否,接着执行步骤S314而对通讯数据包放行。
[0093] 执行步骤S312,解析Option12、Option55、Option60字段获取相应值,并获取到MAC地址,接着执行步骤S313和步骤S314。读取到DHCP请求数据包中的信息即可将该DHCP请求数据包放行,否则DHCP交互过程会失败。对DHCP请求数据包中的主机名字段(Option12)、附加请求参数字段(Option55)、以及厂商识别字段(Option60)进行解析,得出对应的主机名字段值、附加请求参数字段值、以及厂商识别字段值。
[0094] 执行步骤S313,将数据包发送到用户态,通过Netlink技术将三个字段值同终端MAC地址发送到用户态。将解析到的主机名字段值、附加请求参数字段值、以及厂商识别字段值同无线终端的MAC地址一起发送至用户态,由用户态将主机名字段值、附加请求参数字段值、以及厂商识别字段值和无线终端的MAC地址经无线通信传送至云端服务器。
[0095] 执行步骤S314,将数据包放行。
[0096] 如图4所示,下面对终端的类型查询和本地数据库更新进行说明。
[0097] 执行步骤S401,云端服务器查询云端数据库,云端服务器通过云端数据库查询无线终端的类型,具体的查询方式可以按照Option60、Option12、Option55顺序进行查询,Option60是厂商识别号,通常厂家会带上厂商名,部分也同时带上产品型号;Option12是hostname,通常会设置为产品类型和序列号,Option55通常设置为请求的一些附加参数,请求的参数顺序,子字段条目多少,各个厂商和终端不一样,也会有区别。一种查询方法比如:某厂商手机的Option60字段为“****_phone”,那么可以确定此终端是手机,该厂商Android手机的Option12字段为“android-9dc35f25f1ged653”,那么通过这两个字段就可以大致确定这个终端类型是Android手机,再和Option55字段值比对,可以达到90%以上的准确率,由于Option12可能会在终端上修改过,那么当Option12不能确定时候,需要Option55字段值来确定。查询方式并不以此为限,可以选用其他的算法进行类型查询。接着执行步骤S402。
[0098] 执行步骤S402,查询到终端类型,云端服务器查询到终端类型后,将查询结果进行保存,等待和路由器本地的查询结果进行比对。接着执行步骤S406。
[0099] 执行步骤S403,路由器查询本地数据库,在路由器的本地数据库对所得到的解析值和无线终端的MAC地址进行无线终端类型的查询,以获得本地查询结果,其查询方式可以同上面云端的查询方式。接着执行步骤S404。
[0100] 执行步骤S404,查询到终端类型,获得了本地查询结果,接着执行步骤S405。
[0101] 执行步骤S405,将查询结果发送到云端服务器,路由器将本地查询结果上报至云端服务器。接着执行步骤S406。
[0102] 执行步骤S406,在云端将本地查询结果和云端查询结果进行比对,由云端服务器比对云端查询结果和本地查询结果,接着执行步骤S407。
[0103] 执行步骤S407,判断结果是否一致,比对云端查询结果和本地查询结果是否一致,若比对结果一致,则执行步骤S408,若比对结果不一致,则执行步骤S409。
[0104] 执行步骤S408,发送比对一致信息到本地路由器,告知本地路由器查询结果正确。
[0105] 执行步骤S409,将云端结果发送到路由器,更新本地数据库,由云端服务器将云端查询结果发送至路由器替换本地查询结果以更新本地数据库。能够保证本地显示的终端类型的正确率。接着执行步骤S410。
[0106] 执行步骤S410,更改路由器管理页面状态显示终端类型项。
[0107] 综上所述,本发明路由器网桥模式下无线终端类型的识别系统及方法,在路由器网桥模式下,对路由器所有的通讯数据包进行抓取并过滤得到DHCP请求数据包,解析DHCP请求数据包中的Option12、Option55、以及Option60三个字段的参数值,提高了识别终端类型的准确率,且查询终端类型为云端和本地同时进行,在本地查询类型结果错误时,将云端结果替换本地以对本地数据库进行更新,提高本地的识别准确率,在与Internet断开时,路由器能够通过查询本地数据库来识别终端类型。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0108] 上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的
权利要求所涵盖。