发明内容
本发明的目的在于克服现有技术的缺陷,提供路由器上行数据溯源方法、装置、计算机设备及存储介质。
为实现上述目的,本发明采用以下技术方案:路由器上行数据溯源方法,包括:
注册自定义的钩子函数至规则链内;
由应用程序对驱动程序设置路由器源标识以及WAN网卡名称;
当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据;
判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件;
若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;
计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量;
计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量;
根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量;
若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;
从所述结构体内获取网络层数据的头部;
将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置;
在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;
更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包;
对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
其进一步技术方案为:所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量之后,还包括:
若不需要清除所述可选字段特定种类数据量,则将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并执行所述在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐。
其进一步技术方案为:所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件,包括:
判断所述协议类型是否是IP协议;
若所述协议类型是IP协议,则判断所述出口网卡名称是否是WAN网卡名称;
若所述出口网卡名称是WAN网卡名称,则判断所述网络层数据的头部是否是TCP协议;
若所述网络层数据的头部是TCP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件;
若所述协议类型不是IP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;
若所述出口网卡名称不是WAN网卡名称,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;
若所述网络层数据的头部不是TCP协议,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件。
其进一步技术方案为:所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量,包括:
判断所述可选字段特定种类数据量是否大于所述剩余可利用空间量;
若所述可选字段特定种类数据量不大于所述剩余可利用空间量,则判断所述剩余可利用空间量以及所述可选字段特定种类数据量的总和是否大于路由器源标识的数据量;
若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,则需要清除所述可选字段特定种类数据量;
若所述可选字段特定种类数据量大于所述剩余可利用空间量,则不需要清除所述可选字段特定种类数据量;
若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和不大于路由器源标识的数据量,则进入结束步骤。
其进一步技术方案为:所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件之后,还包括:
若所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件,则进入结束步骤。
其进一步技术方案为:所述结构体包括应用层数据、传输层数据、网络层数据以及网络数据包的出口网卡名称。
其进一步技术方案为:所述对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和,包括:
将新的数据包的网络层数据以及传输层数据进行二进制反码求和,以得到结果,将所述结果存入校验和字段内。
本发明还提供了路由器上行数据溯源装置,包括:
注册单元,用于注册自定义的钩子函数至规则链内;
设置单元,用于由应用程序对驱动程序设置路由器源标识以及WAN网卡名称;
结构体获取单元,用于当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据;
第一判断单元,用于判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件;
传输层数据获取单元,用于若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;
第一计算单元,用于计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量;
第二计算单元,用于计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量;
第二判断单元,用于根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量;
标记单元,用于若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;
网络层数据获取单元,用于从所述结构体内获取网络层数据的头部;
第一处理单元,用于将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置;
第二处理单元,用于在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;
更新单元,用于更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包;
校验和计算单元,用于对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
本发明还提供了一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
本发明还提供了一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述的方法。
本发明与现有技术相比的有益效果是:本发明通过借助钩子函数获取上行数据包即网络数据包的结构体,并根据结构体的协议类型、出口网卡名称以及网络层数据来判断是否可修改传输层数据的头部的可选字段,当可以修改时,通过修改蜂窝无线路由器上行数据包的传输数据层的头部的可选字段,加入源标识,使得路由器下挂网络设备上行TCP通信的数据包都包含了源标识,实现方便路由器接入各种网络设备,且可应用于各种对溯源有要求的特殊应用场景。
下面结合附图和具体实施例对本发明作进一步描述。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1和图2,图1为本发明实施例提供的路由器上行数据溯源方法的应用场景示意图。图2为本发明实施例提供的路由器上行数据溯源方法的示意性流程图。该路由器上行数据溯源方法应用于服务器中。该服务器与若干个网络设备进行数据交互,通过修改上行数据包传输层数据头部的可选字段,加入源标识;所有下挂蜂窝无线路由器的网络设备,上行TCP通信的数据包都包含了源标识;加入传输层数据的头部可选字段的源标识可通过路由器管理界面配置。
图2是本发明实施例提供的路由器上行数据溯源方法的流程示意图。如图2所示,该方法包括以下步骤S110至S250。
S110、注册自定义的钩子函数至规则链内。
在本实施例中,钩子函数是自定义的hook钩子函数,用于获取上行数据包。
具体地,系统启动后,驱动程序初始化,注册自定义的hook钩子函数到规则链NF_IP_POST_ROUTING。
S120、由应用程序对驱动程序设置路由器源标识以及WAN网卡名称。
在本实施例中,路由器源标识是指路由器的标识,可用于插入到传输层数据的头部的可选字段中。
WAN网卡名称是指WAN口网卡名称,驱动程序只对流过该网卡的数据包才插入传输层数据的头部可选字段。
具体地,应用程序对驱动程序设置路由器源标识例如:IMEI+IMSI,假设数据大小为A,用于插入到TCP头部可选字段。其中,IMEI为864284040183357,IMSI:460110123456789,则设置源标识的命令为:echo864284040183357460110123456789>/sys/module/ippack/parameters/g_option_data_buf。
应用程序对驱动程序设置网卡名称,例如WAN口网卡名称,使驱动程序只对流过该网卡的数据包才插入TCP头部可选字段。WAN口网卡名称为rmnet_data0,则设置的命令为:echo rmnet_data0>/sys/module/ippack/parameters/g_net_interface。
S130、当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据。
在本实施例中,所述结构体包括应用层数据、传输层数据、网络层数据以及网络数据包的出口网卡名称。
具体地,当linux内核网络协议栈发送网络数据包时,传递网络数据包结构体sk_buff到自定义的钩子函数,其中,结构体sk_buff包含应用层数据、传输层数据、网络层数据以及该网络数据包的出口网卡名称。
另外,在自定义的hook钩子函数中,从结构体sk_buff获取protocol字段,以得到协议类型。
S140、判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件。
在一实施例中,请参阅图3,上述的步骤S140可包括步骤S141~S145。
S141、判断所述协议类型是否是IP协议。
在本实施例中,在自定义的hook钩子函数中,从结构体sk_buff获取protocol字段,判断protocol字段是否等于0x0800即IP协议的标识,不满足条件则结束不处理。
S142、若所述协议类型是IP协议,则判断所述出口网卡名称是否是WAN网卡名称。
从结构体sk_buff获取到该网络数据包的出口网卡名称,判断出口网卡名称是否与设置的WAN网卡名称一致,不满足条件则结束不处理。
S143、若所述出口网卡名称是WAN网卡名称,则判断所述网络层数据的头部是否是TCP协议。
在本实施例中,从结构体sk_buff获取到网络层数据,判断网络层数据的头部的protocol字段是否为TCP协议,不满足条件则结束不处理。
S144、若所述网络层数据的头部是TCP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件;
S145、若所述协议类型不是IP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;
若所述出口网卡名称不是WAN网卡名称,则执行所述步骤S145;
若所述网络层数据的头部不是TCP协议,则执行所述步骤S145。
若所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件,则进入结束步骤。
在结束时自定义的钩子函数返回内核网络协议栈。
S150、若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;
S160、计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量。
在本实施例中,剩余可利用空间量是指传输层数据的头部剩余可利用的空间量大小。
S170、计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量。
在本实施例中,可选字段特定种类数据量是指所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量大小。
具体地,从结构体sk_buff获取传输层数据,计算该传输层数据的包中头部剩余可利用的空间大小,假设数据大小为B,计算该传输层数据包中原有的头部的option中,kind=1和kind=8类型占用的数据大小,假设数据大小为C。
S180、根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量。
在本实施例中,判断是否需要清除可选字段特定种类数据量是为了避免传输层数据的头部空间不足,无法插入对应的数据。
在一实施例中,请参阅图4,上述的步骤S180可包括步骤S181~S184。
S181、判断所述可选字段特定种类数据量是否大于所述剩余可利用空间量;
S182、若所述可选字段特定种类数据量不大于所述剩余可利用空间量,则判断所述剩余可利用空间量以及所述可选字段特定种类数据量的总和是否大于路由器源标识的数据量;
S183、若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,则需要清除所述可选字段特定种类数据量;
S184、若所述可选字段特定种类数据量大于所述剩余可利用空间量,则不需要清除所述可选字段特定种类数据量;
若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和不大于路由器源标识的数据量,则进入结束步骤。
如果B大于A时,即所述可选字段特定种类数据量大于所述剩余可利用空间量,说明传输层数据的头部空间足够可以直接插入,标记不需要清除,跳到步骤S250,否则进入判断B+C与A的关系,如果B+C大于A时,即所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,说明传输层数据的头部空间不足,标记需要清除数据C,跳到步骤S190,否则结束不处理。
S190、若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;
S200、从所述结构体内获取网络层数据的头部;
S210、将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置。
在本实施例中,从结构体sk_buff获取网络层数据的头部,将网络层数据+传输层数据的头部向前移动到满足插入数据A为止,如果需要删除kind=1和kind=8对应的数据C时,则清除kind=1和kind=8,其他类型的kind向前移动到所述传输层数据的头部的可选字段的开始位置。
S220、在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;
在本实施例中,在其他kind类型的尾部位置,插入kind=254并且携带路由器源标识的数据,例如IMEI+IMSI数据,如果传输层数据的头部大小不符合4字节对齐时,插入kind=1补位4字节对齐,具体可如图5所示。
S230、更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包。
在本实施例中,新的数据包是指根据加入路由器源标识后的数据更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段后得到的数据包。
具体地,由于已经插入路由器源标识导致数据包长度变大,更新网络层数据的头部中长度字段,更新传输层数据的头部中指示头部长度的字段。
S240、对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
在本实施例中,将新的数据包的网络层数据以及传输层数据进行二进制反码求和,以得到结果,将所述结果存入校验和字段内。
具体地,把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和,把得到的结果存入校验和字段。
S250、若不需要清除所述可选字段特定种类数据量,则将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并执行所述步骤S220。
基于linux系统的子系统netfilter框架,利用hook的钩子功能,在上行出口处的hook钩子函数对网络数据包进行分析、处理、修改传输层数据的头部的可选字段,通过修改蜂窝无线路由器上行数据包的传输数据层的头部的可选字段,加入源标识,使得路由器下挂网络设备上行TCP通信的数据包都包含了源标识,灵活应用于各种对溯源有要求的特殊应用场景。
上述的路由器上行数据溯源方法,通过借助钩子函数获取上行数据包即网络数据包的结构体,并根据结构体的协议类型、出口网卡名称以及网络层数据来判断是否可修改传输层数据的头部的可选字段,当可以修改时,通过修改蜂窝无线路由器上行数据包的传输数据层的头部的可选字段,加入源标识,使得路由器下挂网络设备上行TCP通信的数据包都包含了源标识,实现方便路由器接入各种网络设备,且可应用于各种对溯源有要求的特殊应用场景。
图6是本发明实施例提供的一种路由器上行数据溯源装置300的示意性框图。如图6所示,对应于以上路由器上行数据溯源方法,本发明还提供一种路由器上行数据溯源装置300。该路由器上行数据溯源装置300包括用于执行上述路由器上行数据溯源方法的单元,该装置可以被配置于服务器中。具体地,请参阅图6,该路由器上行数据溯源装置300包括注册单元301、设置单元302、结构体获取单元303、第一判断单元304、传输层数据获取单元305、第一计算单元306、第二计算单元307、第二判断单元308、标记单元309、网络层数据获取单元310、第一处理单元311、第二处理单元312、更新单元313以及校验和计算单元314。
注册单元301,用于注册自定义的钩子函数至规则链内;设置单元302,用于由应用程序对驱动程序设置路由器源标识以及WAN网卡名称;结构体获取单元303,用于当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据;第一判断单元304,用于判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件;若所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件,则进入结束步骤。传输层数据获取单元305,用于若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;第一计算单元306,用于计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量;第二计算单元307,用于计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量;第二判断单元308,用于根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量;标记单元309,用于若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;网络层数据获取单元310,用于从所述结构体内获取网络层数据的头部;第一处理单元311,用于将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置;第二处理单元312,用于在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;更新单元313,用于更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包;校验和计算单元314,用于对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
在一实施例中,所述校验和计算单元314,用于将新的数据包的网络层数据以及传输层数据进行二进制反码求和,以得到结果,将所述结果存入校验和字段内。
在一实施例中,如图6所示,所述路由器上行数据溯源装置300还包括第三处理单元315。
第三处理单元315,用于若不需要清除所述可选字段特定种类数据量,则将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并执行所述在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐。
在一实施例中,如图7所示,所述第一判断单元304包括协议判断子单元3041、名称判断子单元3042、头部判断子单元3043、第一确定子单元3044以及第二确定子单元3045。
协议判断子单元3041,用于判断所述协议类型是否是IP协议;名称判断子单元3042,用于若所述协议类型是IP协议,则判断所述出口网卡名称是否是WAN网卡名称;若所述出口网卡名称不是WAN网卡名称,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;头部判断子单元3043,用于若所述出口网卡名称是WAN网卡名称,则判断所述网络层数据的头部是否是TCP协议;若所述网络层数据的头部不是TCP协议,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件。第一确定子单元3044,用于若所述网络层数据的头部是TCP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件;第二确定子单元3045,用于若所述协议类型不是IP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件。
在一实施例中,如图8所示,所述第二判断单元308包括第一大小判断子单元3081以及第二大小判断子单元3082。
第一大小判断子单元3081,用于判断所述可选字段特定种类数据量是否大于所述剩余可利用空间量;若所述可选字段特定种类数据量大于所述剩余可利用空间量,则不需要清除所述可选字段特定种类数据量;第二大小判断子单元3082,用于若所述可选字段特定种类数据量不大于所述剩余可利用空间量,则判断所述剩余可利用空间量以及所述可选字段特定种类数据量的总和是否大于路由器源标识的数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,则需要清除所述可选字段特定种类数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和不大于路由器源标识的数据量,则进入结束步骤。
需要说明的是,所属领域的技术人员可以清楚地了解到,上述路由器上行数据溯源装置300和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
上述路由器上行数据溯源装置300可以实现为一种计算机程序的形式,该计算机程序可以在如图9所示的计算机设备上运行。
请参阅图9,图9是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500可以是服务器,其中,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
参阅图9,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。
该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种路由器上行数据溯源方法。
该处理器502用于提供计算和控制能力,以支撑整个计算机设备500的运行。
该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种路由器上行数据溯源方法。
该网络接口505用于与其它设备进行网络通信。本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下步骤:
注册自定义的钩子函数至规则链内;由应用程序对驱动程序设置路由器源标识以及WAN网卡名称;当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据;判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件;若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量;计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量;根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量;若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;从所述结构体内获取网络层数据的头部;将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置;在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包;对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
其中,所述结构体包括应用层数据、传输层数据、网络层数据以及网络数据包的出口网卡名称。
在一实施例中,处理器502在实现所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量步骤之后,还实现如下步骤:
若不需要清除所述可选字段特定种类数据量,则将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并执行所述在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐。
在一实施例中,处理器502在实现所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件步骤时,具体实现如下步骤:
判断所述协议类型是否是IP协议;若所述协议类型是IP协议,则判断所述出口网卡名称是否是WAN网卡名称;若所述出口网卡名称是WAN网卡名称,则判断所述网络层数据的头部是否是TCP协议;若所述网络层数据的头部是TCP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件;若所述协议类型不是IP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;若所述出口网卡名称不是WAN网卡名称,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;若所述网络层数据的头部不是TCP协议,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件。
在一实施例中,处理器502在实现所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量步骤时,具体实现如下步骤:
判断所述可选字段特定种类数据量是否大于所述剩余可利用空间量;若所述可选字段特定种类数据量不大于所述剩余可利用空间量,则判断所述剩余可利用空间量以及所述可选字段特定种类数据量的总和是否大于路由器源标识的数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,则需要清除所述可选字段特定种类数据量;若所述可选字段特定种类数据量大于所述剩余可利用空间量,则不需要清除所述可选字段特定种类数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和不大于路由器源标识的数据量,则进入结束步骤。
在一实施例中,处理器502在实现所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件步骤之后,还实现如下步骤:
若所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件,则进入结束步骤。
在一实施例中,处理器502在实现所述对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和步骤时,具体实现如下步骤:
将新的数据包的网络层数据以及传输层数据进行二进制反码求和,以得到结果,将所述结果存入校验和字段内。
应当理解,在本申请实施例中,处理器502可以是中央处理单元(CentralProcessing Unit,CPU),该处理器502还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本发明还提供一种存储介质。该存储介质可以为计算机可读存储介质。该存储介质存储有计算机程序,其中该计算机程序被处理器执行时使处理器执行如下步骤:
注册自定义的钩子函数至规则链内;由应用程序对驱动程序设置路由器源标识以及WAN网卡名称;当linux内核网络协议栈发送网络数据包时,由钩子函数获取所述网络数据包的结构体的协议类型、出口网卡名称以及网络层数据;判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件;若所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件,则从所述结构体内获取传输层数据;计算所述传输层数据的头部剩余可利用的空间量,以得到剩余可利用空间量;计算所述传输层数据的头部可选字段中种类等于一和种类等于八所占用的数据量,以得到可选字段特定种类数据量;根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量;若需要清除所述可选字段特定种类数据量,则标记所述可选字段特定种类数据量;从所述结构体内获取网络层数据的头部;将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并清除所述传输层数据的头部可选字段中种类等于一和种类等于八的字段,将种类不等于一和八的字段向前移动至所述传输层数据的头部可选字段的开始位置;在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐;更新所述网络层数据的头部中长度字段,更新所述传输层数据的头部中指示头部长度的字段,以得到新的数据包;对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和。
其中,所述结构体包括应用层数据、传输层数据、网络层数据以及网络数据包的出口网卡名称。
在一实施例中,所述处理器在执行所述计算机程序而实现所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量步骤之后,还实现如下步骤:
若不需要清除所述可选字段特定种类数据量,则将所述网络层数据以及所述传输层数据的头部向前移动至满足插入所述路由器源标识的数据量,并执行所述在种类不等于一和八的字段的尾部位置插入种类等于254且携带路由器源标识的数据,且当所述传输层数据的头部不符合四字节对齐时,插入种类等于一的字段,以使得所述传输层数据的头部的四字节进行对齐。
在一实施例中,所述处理器在执行所述计算机程序而实现所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件步骤时,具体实现如下步骤:
判断所述协议类型是否是IP协议;若所述协议类型是IP协议,则判断所述出口网卡名称是否是WAN网卡名称;若所述出口网卡名称是WAN网卡名称,则判断所述网络层数据的头部是否是TCP协议;若所述网络层数据的头部是TCP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据都满足设定条件;若所述协议类型不是IP协议,则确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;若所述出口网卡名称不是WAN网卡名称,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件;若所述网络层数据的头部不是TCP协议,则执行所述确定所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件。
在一实施例中,所述处理器在执行所述计算机程序而实现所述根据所述剩余可利用空间量、所述可选字段特定种类数据量以及所述路由器源标识对应的数据量判断是否需要清除所述可选字段特定种类数据量步骤时,具体实现如下步骤:
判断所述可选字段特定种类数据量是否大于所述剩余可利用空间量;若所述可选字段特定种类数据量不大于所述剩余可利用空间量,则判断所述剩余可利用空间量以及所述可选字段特定种类数据量的总和是否大于路由器源标识的数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和大于路由器源标识的数据量,则需要清除所述可选字段特定种类数据量;若所述可选字段特定种类数据量大于所述剩余可利用空间量,则不需要清除所述可选字段特定种类数据量;若所述剩余可利用空间量以及所述可选字段特定种类数据量的总和不大于路由器源标识的数据量,则进入结束步骤。
在一实施例中,所述处理器在执行所述计算机程序而实现所述判断所述协议类型、所述出口网卡名称以及所述网络层数据是否都满足设定条件步骤之后,还实现如下步骤:
若所述协议类型、所述出口网卡名称以及所述网络层数据不是都满足设定条件,则进入结束步骤。
在一实施例中,所述处理器在执行所述计算机程序而实现所述对新的数据包重新计算所述网络层数据的校验和以及所述传输层数据的校验和步骤时,具体实现如下步骤:
将新的数据包的网络层数据以及传输层数据进行二进制反码求和,以得到结果,将所述结果存入校验和字段内。
所述存储介质可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。