System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及代码测试的,尤其是涉及一种windows下测试网络协议栈的方法、装置和电子设备。
技术介绍
1、lwip是一种由瑞典计算机科学院(sics)开发的小型开源的tcp/ip协议栈,由于其代码量小、使用内存少的特点,通常用于嵌入式系统。该tcp/ip协议栈功能实现较为完整,并且可以移植到不同操作系统的环境下运行,提供了raw api、netconn api、bsd socket套接字三种编程接口。
2、在进行网络协议栈(主要指链路层协议栈和ip层协议栈)的测试中,有时需要向网络发送或接收ip层或数据链路层协议的数据包。在linux系统(linux官方提供了原始套接字的接口)中,使用原始套接字编程能够解决上述网络协议栈测试的大部分问题,但是windows对原始套接字进行了很多功能限制,windows官方它没有提供原始套接字的接口,部分带有原始套接字编程的服务端/客户端应用程序(如python、c/c++)想要在windows系统上测试是不可行的,例如,不能通过伪造的源ip地址进行拒绝服务攻击、不能发送ip欺骗数据包等。尽管windows下也可以使用npcap、winpcap,提供了对底层网络驱动的访问,可以绕过内核协议栈直接捕获链路层数据,或者由用户组包协议首部再发送数据。但是使用这些测试工具(npcap、winpcap)同样存在一些缺点:1.npcap的api接口相对底层,编码较为复杂(即npcap接口的应用程序编码复杂),不如套接字方便易用,对测试人员的编程技术有一定要求,降低了协议栈测试开发效率;2.只是
3、综上,如何在windows系统下对用原始套接字编写的应用程序进行网络协议栈的测试成为目前亟需解决的技术问题。
技术实现思路
1、有鉴于此,本专利技术的目的在于提供一种windows下测试网络协议栈的方法、装置和电子设备,以缓解现有技术无法在windows系统下对用原始套接字编写的应用程序进行网络协议栈的测试的技术问题。
2、第一方面,本专利技术实施例提供了一种windows下测试网络协议栈的方法,应用于用户协议栈,所述用户协议栈包括:虚拟网络驱动模块、协议栈处理模块和用户模块,所述方法包括:
3、所述虚拟网络驱动模块读取物理网卡中的网络数据,并将所述网络数据存储至队列mbox,其中,所述网络数据经由网卡协议驱动和npcap进入所述虚拟网络驱动模块;
4、所述协议栈处理模块循环获取并处理队列mbox中的网络数据,并将处理后的网络数据通过recvbox通知所述用户模块,其中,所述协议栈处理模块为lwip协议栈中实现的原始套接字,所述原始套接字包括:链路层套接字和网络层套接字;
5、所述用户模块将所述处理后的网络数据发送至用原始套接字编写的应用程序,实现数据的接收测试。
6、进一步的,所述虚拟网络驱动模块为开发人员创建虚拟网卡和收包线程后得到的;
7、其中,创建虚拟网卡的过程包括:利用npcap查询windows下的网络设备描述符,所述网络设备描述符表示网络中不同的物理网卡;
8、从所述网络设备描述符中选择目标网络设备描述符,以建立与所述目标网络设备描述符对应的目标物理网卡的虚拟网卡;
9、设置所述虚拟网卡的ip地址、mac地址、网关和子网掩码信息,所述虚拟网卡的ip地址与windows下的物理网卡的ip地址不同,且所述虚拟网卡的mac地址与windows下的物理网卡的mac地址不同;
10、创建得到所述虚拟网卡后,得到对应的链表结构,以用于所述虚拟网卡的管理;
11、创建的收包线程中,循环调用pcap_next实现收包。
12、进一步的,所述协议栈处理模块为开发人员在lwip协议栈中创建原始套接字得到的;
13、其中,创建原始套接字的过程包括:根据lwip协议栈的基本套接字的实现方式在对应链路层和/或网络层编写原始套接字、所述原始套接字的控制块和收包回调函数;
14、将所述收包回调函数注册到所述协议栈处理模块。
15、进一步的,所述协议栈处理模块循环获取并处理队列mbox中的网络数据,包括:
16、获取所述网络数据;
17、通过所述协议栈处理模块中的以太网链路层处理模块解析所述网络数据中的链路层数据的链路层协议头数据,并去除所述链路层协议头数据,得到去除链路层协议头的剩余网络数据;
18、所述以太网链路层处理模块将所述网络数据中的链路层数据发送至链路层套接字处理模块,进而进行对应的协议处理后,发送至套接字收包回调模块,实现将处理后的链路层数据通过recvbox通知所述用户模块;
19、所述协议栈处理模块中的ip层处理模块获取所述以太网链路层处理模块发送的所述去除链路层协议头的剩余网络数据,解析所述去除链路层协议头的剩余网络数据中的ip层数据的ip层协议头数据,并去除所述ip层协议头数据,得到去除ip层协议头的剩余网络数据;
20、所述ip层处理模块将所述去除链路层协议头的剩余网络数据中的ip层数据发送至网络层套接字处理模块,进而进行对应的协议处理后,发送至套接字收包回调模块,实现将处理后的ip层数据通过recvbox通知所述用户模块。
21、进一步的,所述方法还包括:
22、所述协议栈处理模块中的tcp处理模块/udp处理模块/icmp处理模块获取所述ip层处理模块发送的所述去除ip层协议头的剩余网络数据,解析所述去除ip层协议头的剩余网络数据中的对应的协议头数据,并去除对应的协议头数据后,发送至套接字收包回调模块,实现将处理后的数据通过recvbox通知所述用户模块。
23、进一步的,在所述虚拟网络驱动模块读取物理网卡中的网络数据之前,所述方法还包括:
24、所述原始套接字编写的应用程序调用所述用户模块的接口。
25、进一步的,所述用户模块的接口为封装得到的pyd接口。
26、第二方面,本专利技术实施例还提供了一种windows下测试网络协议栈的装置,应用于用户协议栈,所述用户协议栈包括:虚拟网络驱动模块、协议栈处理模块和用户模块,所述装置包括:
27、所述虚拟网络驱动模块读取物理网卡中的网络数据,并将所述网络数据存储至队列mbox,其中,所述网络数据经由网卡协议驱动和npcap进入所述虚拟网络驱动模块;
28、所述协议栈处理模块循环获取并处理队列mbox中的网络数据,并将处理后的网络数据通过recvbox通知所述用户模块,其中,所述协议栈处理模块为lwip协议栈中实现的原始套接字,所述原始套接字包括:链路层套接字和网络层套接字;
29、所述用户模块将所述处理后的网络数据发送至用原始套接字编写的应用程序,实现数据的接收测试。
30、第三方面,本专利技术实施例还提供了一种电子设备,包括存储器、处理本文档来自技高网...
【技术保护点】
1.一种Windows下测试网络协议栈的方法,其特征在于,应用于用户协议栈,所述用户协议栈包括:虚拟网络驱动模块、协议栈处理模块和用户模块,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述虚拟网络驱动模块为开发人员创建虚拟网卡和收包线程后得到的;
3.根据权利要求1所述的方法,其特征在于,所述协议栈处理模块为开发人员在LwIP协议栈中创建原始套接字得到的;
4.根据权利要求1所述的方法,其特征在于,所述协议栈处理模块循环获取并处理队列mbox中的网络数据,包括:
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,在所述虚拟网络驱动模块读取物理网卡中的网络数据之前,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,所述用户模块的接口为封装得到的pyd接口。
8.一种Windows下测试网络协议栈的装置,其特征在于,应用于用户协议栈,所述用户协议栈包括:虚拟网络驱动模块、协议栈处理模块和用户模块,所述装置包括:
9
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有机器可运行指令,所述机器可运行指令在被处理器调用和运行时,所述机器可运行指令促使所述处理器运行上述权利要求1至7中任一项所述的方法。
...【技术特征摘要】
1.一种windows下测试网络协议栈的方法,其特征在于,应用于用户协议栈,所述用户协议栈包括:虚拟网络驱动模块、协议栈处理模块和用户模块,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述虚拟网络驱动模块为开发人员创建虚拟网卡和收包线程后得到的;
3.根据权利要求1所述的方法,其特征在于,所述协议栈处理模块为开发人员在lwip协议栈中创建原始套接字得到的;
4.根据权利要求1所述的方法,其特征在于,所述协议栈处理模块循环获取并处理队列mbox中的网络数据,包括:
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,在所述虚拟网络驱动模块读取物理网卡中的网络数据之前,...
【专利技术属性】
技术研发人员:冮宇航,谢海生,
申请(专利权)人:东软睿驰汽车技术沈阳有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。