CN103957214A - 一种教学用计算机网络数据包抓取方法 - Google Patents
一种教学用计算机网络数据包抓取方法 Download PDFInfo
- Publication number
- CN103957214A CN103957214A CN201410188336.5A CN201410188336A CN103957214A CN 103957214 A CN103957214 A CN 103957214A CN 201410188336 A CN201410188336 A CN 201410188336A CN 103957214 A CN103957214 A CN 103957214A
- Authority
- CN
- China
- Prior art keywords
- computer network
- function
- network packet
- socket
- teaching
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种教学用计算机网络数据包抓取方法,步骤一,计算机进程注入,选择需要抓包的目标进程;步骤二,获取套接字函数接口SOCKET API的地址并保存;步骤三,修改进程的所述套接子函数入口的指令;步骤四,转到自己定义的函数体中,抓取相应网络数据包,恢复函数入口指令,然后调用原API函数,即恢复原始调用;步骤五,判断是否需要继续抓包:如果需要继续抓包,跳转至步骤三;如果不需要,则跳转至步骤六;步骤六,进程结束,释放HOOK资源。本发明简洁、实用,其源码实现技术门槛要求低,只需普通windows API调用即可实现,无需专业的驱动开发知识,适合教学研究。
Description
技术领域
本发明属于涉及机网络通信协议分析教学领域,特别涉及一种利用API拦截技术和函数入口指令替换技术实现计算机网络数据包的抓取的方法。
背景技术
众所周知,windows系统是一个不开放源代码、封闭、复杂的操作系统。由于其简单的操作方式、美观的图形界面、稳定的性能、丰富的应用软件,在PC机上成为当之无愧的霸主,甚至在中高端服务器上也占有相当的市场。高校也广泛开设windos操作系统方面的课程,比如:计算机就文化基础、office办公软件、windows程序设计、MFC程序设计、COM程序设计、网络程序设计、网络协议分析等不同层次的课程。由于互联网技术的普及,尤其是近年来移动互联网技术的异军突起,网络通信技术成为学生学习、研究的热点。而在网络通信技术中,网络协议起着十分重要的作用,学习、分析、研究网络协议就是掌握网络通信技术的重要途径。在不开源的windows平台下,分析网络协议,首先要解决的问题就是如何抓取本机的网络通信数据包。目前比较成熟的商业产品有winpacp、wireshark等,这类软件产品稳定可靠,使用方法简单;但缺点是不开源,学生只知其然,而无法知其所以然;只能知晓如何使用软件抓取网络数据包,却无法知晓抓取的内在方法。在windows平台下,要实现网络数据包的抓取,开源的做法有以下两种:
一、采用windows提供的原始套接字(RAWSOCKET),通过把网卡设置为混杂模式,抓取经过本机网卡的IP数据包。这个方法的缺点是只能用于windows2000及以前的平台,后续平台不支持。
二、编写网络过滤驱动(filte driver),通过在套接字接口层与TCP/IP设备对象层之间或网络协议栈和物理网卡之间加入一层过滤驱动来实现网络数据包的拦截,其层次结构如图1所示。这个方法的优点是适用所有的windows平台,通用性非常高;缺点是需要windows驱动编程的知识(NDIS)和驱动开发包(DDK),编写代码对学生知识层次要求过高、代码量大,且稍有不慎,驱动的不稳定即会引起操作系统崩溃。
过滤驱动分为传输层过滤驱动和中间层过滤驱动两种形式。传输层过滤驱动使用NDIS(Network Driver Interface Specification网络驱动接口规范)技术,又称为TDI编程(Transport Driver Interface传输层驱动接口编程)。Windows2000和WindowsXP操作系统中,TCP/IP协议作为系统驱动程序(..\system32\TcpIp.sys),在系统启动时加载入系统内存,以TCP/IP设备对象(DeviceObject)的形式供应用程序或其它系统程序调用。传输层过滤驱动程序创建一个或多个设备对象,直接挂接到TCP/IP设备对象之上。挂接成功后,当其它程序使用网络传输功能,调用TCP/IP设备对象时,操作系统首先将该调用映射到TCP/IP设备对象之上所挂接的传输层过滤驱动程序。通过传输层过滤驱动程序,再调用下层的TCP/IP设备对象,从而完成网络访问功能。同样,从TCP/IP层上传至应用程序的网络封包,也要经传输层过滤驱动程序后,再转发至目标应用程序端口。基于此工作原理,可以在传输层过滤驱动程序中实现网络封包截获。
中间层过滤驱动与传输层过滤驱动实现基本原理一致,也是使用NDIS技术。主要差别在于,中间层驱动程序,挂接在协议设备对象(包括TCP/IP设备对象)和网卡设备对象之间。任何进出网卡的网络封包,均必须首先经过中间层驱动程序的处理。从某种意义上分析,中间层驱动程序更象一个虚拟网卡。该虚拟卡封装了物理网卡,对物理网卡的一切网络访问操作,均必须先经虚拟卡处理。
发明内容
本发明的目的是提供一种简洁、实用的教学用计算机网络数据包抓取方法。
本发明的技术方案是:
一种教学用计算机网络数据包抓取方法,包括:
步骤一,计算机进程注入,选择需要抓包的目标进程;
步骤二,获取套接字函数接口SOCKET API的地址并保存;
步骤三,修改进程的所述套接子函数入口的指令;
步骤四,转到自己定义的函数体中,抓取相应网络数据包,恢复函数入口指令,然后调用原API函数,即恢复原始调用;
步骤五,判断是否需要继续抓包:如果需要继续抓包,跳转至步骤三;如果不需要,则跳转至步骤六;
步骤六,进程结束。
优选的,所述步骤一中是利用windows的HOOK技术来进行的计算机进程注入。
优选的,所述步骤一是通过枚举系统的全部进程,来选择需要抓包的目标进程。
优选的,所述步骤二中,所述套接字函数接口SOCKET API的地址是利用windows运行时的动态装载技术来获取的。
优选的,所述步骤四中,所述网络数据包是按照如下过程进行抓取的:当进程调用正常的套接字函数接口时,自动转入到自定义的函数体中执行,直接拷贝函数的接收/发送缓冲区参数,由此得到相应的网络数据包。
优选的,所述步骤六中还包括释放HOOK资源。
本发明的有益效果有:
(1)本发明提供一个简单、简洁的网路数据包抓取方法。该方法的源码实现技术门槛要求低,只需普通windows API调用即可实现,无需专业的驱动开发知识,适合教学研究。
(2)本发明改变了计算机网络协议教学中,只能使用专业不开源软件抓取网络数据包这个方法的限制,学生可以深入到程序内部,甚至自己编码实现抓包程序,关键代码不超过50行即可实现。
(3)本发明所述的方法配合windows路由表设置,可以用于多网卡主机平台上网卡负载均衡调度,即实现进程与不同网卡的绑定。众所周知,在多网卡windows主机环境下,不依赖三方软件无法控制网卡之间的负载均衡,即:假设某张网卡上即使负载很重,而其他网卡闲置的情况下,windows也不会去调度其他网卡分担负荷。通过本发明方法,拦截到目标进程通信的目的地址,然后在windows的路由表中添加该目的地址的输出路由表,即可将不同的进程的原IP地址绑定到不同的网卡上,从而实现多网卡之间的负载均衡调度。
附图说明
图1本发明一种教学用计算机网络数据包抓取方法的过滤驱动层次结构图;
图2本发明的一种教学用计算机网络数据包抓取方法实现流程图。
具体实施方式
下面通过实施例对本发明做进一步详细说明。
如图1和2所示本发明所揭示的教学用计算机网络数据包抓取方法,包括:
步骤一,利用windows的HOOK(钩子)技术,把编写的抓取网络数据包功能的DLL(动态链接库)程序模块注入到计算机上的每一个进程,通过枚举系统的全部进程,可以选择需要抓包的目标进程。
步骤二,利用windows运行时动态装载技术,获取套接字函数接口的地址。
示例代码如下:
//动态装载windows套接字接口32位API库模块
HMODULE hWsock=LoadLibrary(L"Ws2_32.dll");
//获取套接字接口中的bind(绑定)函数接口的地址
g_pBind=(DWORD)GetProcAddress(hWsock,"bind");
//获取套接字接口中connect(连接)函数接口的地址,这个函数用于建//立客户端和服务器端的TCP协议逻辑连接
g_pConnect=(DWORD)GetProcAddress(hWsock,"connect");
//获取套接字接口中send(发送)函数接口的地址,这个函数用于发送//TCP协议数据包
g_Send=(DWORD)GetProcAddress(hWsock,"send");
//根据协议分析的需求,可以获取需要拦截的每一个套接字函数的接口//地址
读取函数接口地址的指令,为后面恢复原始调用做准备。
步骤三,在待拦截套接字截函数地址入口处写入自己构造的汇编指令。其中,步骤二和步骤三是在DLL中,拦截进程对操作系统套接字函数接口(SOCKETAPI)的调用。
构造的汇编指令:MOV EAX,自定义函数地址
JMP EAX
查找X86架构CPU的汇编手册,可以很容易得到如上两条汇编语句的机器指令十六进制代码:
0xB8 0x0 0x0 0x40 0x0 0xFF 0xE0 0x5F
其中0x0 0x0 0x40 0x0部分所在地址用自定义函数接口地址替代即可。如此,当进程调用正常的套接字函数接口时,会自动转入到自定义的函数体中执行,直接拷贝函数的接收/发送缓冲区参数即可得到相应的网络数据包;然后利用步骤二中保存信息恢复原套接字函数入口指令,调用该套接字函数,执行正常的函数功能;最后再次修改该套接字函数的入口指令,为下次拦截做准备。
在自定义函数中,拦截到进程对套接字函数接口的调用,截获这些函数参数中缓冲区字段参数,即可获取网络数据包。比如拦截到对send函数的调用,即可抓取出本机通过网卡发出的TCP协议网络数据包;拦截到recv函数调用,即可抓取到本机通过网卡接收到的TCP协议网络数据包;拦截到sendto函数的调用,即可抓取到本机通过网卡发出的UDP协议的网络数据包;拦截到recvfrom函数调用,即可抓取到本机通过网卡接收到的UDP协议的网络数据包。
步骤四,转到自己定义的函数体中,抓取相应网络数据包,恢复函数入口指令,然后调用原API函数,即恢复原始调用;
步骤五,判断是否继续进行数据抓包,如果是,则跳转至步骤三;如果不是,则跳转至步骤六。
步骤六,进程结束,释放HOOK资源。
本发明方法配合windows路由表设置可以用于多网卡主机平台上网卡负载均衡调度,即实现进程与不同网卡的绑定。众所周知,在多网卡windows主机环境下,不依赖三方软件无法控制网卡之间的负载均衡,即:假设某张网卡上即使负载很重,而其他网卡闲置的情况下,windows也不会去调度其他网卡分担负荷。通过本发明方法,拦截到目标进程通信的目的地址,然后在windows的路由表中添加该目的地址的输出路由表,即可将不同的进程的原IP地址绑定到不同的网卡上,从而实现多网卡之间的负载均衡调度。
以上所述实施例仅表达了本发明的实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制,但凡采用等同替换或等效变换的形式所获得的技术方案,均应落在本发明的保护范围之内。
Claims (6)
1.一种教学用计算机网络数据包抓取方法,其特征在于,包括:
步骤一,计算机进程注入,选择需要抓包的目标进程;
步骤二,获取套接字函数接口SOCKET API的地址并保存;
步骤三,修改进程的所述套接子函数入口的指令;
步骤四,转到自己定义的函数体中,抓取相应网络数据包,恢复函数入口指令,然后调用原API函数,即恢复原始调用;
步骤五,判断是否需要继续抓包:如果需要继续抓包,跳转至步骤三;如果不需要,则跳转至步骤六;
步骤六,进程结束。
2.根据权利要求1所述的教学用计算机网络数据包抓取方法,其特征在于,所述步骤一中是利用windows的HOOK技术来进行的计算机进程注入。
3.根据权利要求1所述的教学用计算机网络数据包抓取方法,其特征在于,所述步骤一是通过枚举系统的全部进程,来选择需要抓包的目标进程。
4.根据权利要求1所述的教学用计算机网络数据包抓取方法,其特征在于,所述步骤二中,所述套接字函数接口SOCKETAPI的地址是利用windows运行时的动态装载技术来获取的。
5.根据权利要求1所述的教学用计算机网络数据包抓取方法,其特征在于,所述步骤四中,所述网络数据包是按照如下过程进行抓取的:当进程调用正常的套接字函数接口时,自动转入到自定义的函数体中执行,直接拷贝函数的接收/发送缓冲区参数,由此得到相应的网络数据包。
6.根据权利要求2所述的教学用计算机网络数据包抓取方法,其特征在于,所述步骤六中还包括释放HOOK资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410188336.5A CN103957214A (zh) | 2014-05-06 | 2014-05-06 | 一种教学用计算机网络数据包抓取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410188336.5A CN103957214A (zh) | 2014-05-06 | 2014-05-06 | 一种教学用计算机网络数据包抓取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103957214A true CN103957214A (zh) | 2014-07-30 |
Family
ID=51334440
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410188336.5A Pending CN103957214A (zh) | 2014-05-06 | 2014-05-06 | 一种教学用计算机网络数据包抓取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103957214A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106209776A (zh) * | 2016-06-24 | 2016-12-07 | 北京金山安全管理系统技术有限公司 | 拦截原始套接字输入输出的方法和系统 |
CN106897071A (zh) * | 2017-02-28 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种api提取方法及系统 |
CN107329901A (zh) * | 2017-07-31 | 2017-11-07 | 腾讯科技(深圳)有限公司 | 数据包抓取方法、终端、服务器和存储介质 |
CN108074626A (zh) * | 2016-11-09 | 2018-05-25 | 长沙博为软件技术股份有限公司 | 一种Windows窗体控件数据抓取方法 |
CN109947414A (zh) * | 2019-01-31 | 2019-06-28 | 苏州德铂思电子科技有限公司 | 一种基于Vxworks系统的动态钩子函数实现方法 |
CN111752636A (zh) * | 2020-06-23 | 2020-10-09 | 网易传媒科技(北京)有限公司 | 数据抓取方法及装置、电子设备、存储介质 |
CN113489705A (zh) * | 2021-06-30 | 2021-10-08 | 中国银联股份有限公司 | 一种抓取应用程序http通讯数据的方法、装置存储介质 |
CN113535592A (zh) * | 2021-09-15 | 2021-10-22 | 广州锦行网络科技有限公司 | 对dpdk应用程序抓包的方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6678734B1 (en) * | 1999-11-13 | 2004-01-13 | Ssh Communications Security Ltd. | Method for intercepting network packets in a computing device |
KR20080043209A (ko) * | 2006-11-13 | 2008-05-16 | 한국전자통신연구원 | 윈도우 소켓 응용프로그램 인터페이스 후킹을 이용한네트워크 퍼징 방법 |
CN101286995A (zh) * | 2008-05-23 | 2008-10-15 | 北京锐安科技有限公司 | 一种远程控制方法和远程控制系统 |
CN102739685A (zh) * | 2012-07-04 | 2012-10-17 | 网宿科技股份有限公司 | 应用层网络通信的过滤方法和装置 |
CN103401863A (zh) * | 2013-07-30 | 2013-11-20 | 北京奇虎科技有限公司 | 一种基于云安全的网络数据流分析方法和装置 |
-
2014
- 2014-05-06 CN CN201410188336.5A patent/CN103957214A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6678734B1 (en) * | 1999-11-13 | 2004-01-13 | Ssh Communications Security Ltd. | Method for intercepting network packets in a computing device |
KR20080043209A (ko) * | 2006-11-13 | 2008-05-16 | 한국전자통신연구원 | 윈도우 소켓 응용프로그램 인터페이스 후킹을 이용한네트워크 퍼징 방법 |
CN101286995A (zh) * | 2008-05-23 | 2008-10-15 | 北京锐安科技有限公司 | 一种远程控制方法和远程控制系统 |
CN102739685A (zh) * | 2012-07-04 | 2012-10-17 | 网宿科技股份有限公司 | 应用层网络通信的过滤方法和装置 |
CN103401863A (zh) * | 2013-07-30 | 2013-11-20 | 北京奇虎科技有限公司 | 一种基于云安全的网络数据流分析方法和装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106209776A (zh) * | 2016-06-24 | 2016-12-07 | 北京金山安全管理系统技术有限公司 | 拦截原始套接字输入输出的方法和系统 |
CN108074626A (zh) * | 2016-11-09 | 2018-05-25 | 长沙博为软件技术股份有限公司 | 一种Windows窗体控件数据抓取方法 |
CN106897071A (zh) * | 2017-02-28 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种api提取方法及系统 |
CN107329901A (zh) * | 2017-07-31 | 2017-11-07 | 腾讯科技(深圳)有限公司 | 数据包抓取方法、终端、服务器和存储介质 |
CN107329901B (zh) * | 2017-07-31 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 数据包抓取方法、终端、服务器和存储介质 |
CN109947414A (zh) * | 2019-01-31 | 2019-06-28 | 苏州德铂思电子科技有限公司 | 一种基于Vxworks系统的动态钩子函数实现方法 |
CN111752636A (zh) * | 2020-06-23 | 2020-10-09 | 网易传媒科技(北京)有限公司 | 数据抓取方法及装置、电子设备、存储介质 |
CN113489705A (zh) * | 2021-06-30 | 2021-10-08 | 中国银联股份有限公司 | 一种抓取应用程序http通讯数据的方法、装置存储介质 |
CN113535592A (zh) * | 2021-09-15 | 2021-10-22 | 广州锦行网络科技有限公司 | 对dpdk应用程序抓包的方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103957214A (zh) | 一种教学用计算机网络数据包抓取方法 | |
KR102110698B1 (ko) | 단말기 상호 연결 방법, 장치 및 저장 매체 | |
US9015822B2 (en) | Automatic invocation of DTN bundle protocol | |
US20050209842A1 (en) | Remote USB port system and method | |
CN107463499A (zh) | Adb远程连接方法、装置、设备及存储介质 | |
CN104216761B (zh) | 一种在能够运行两种操作系统的装置中使用共享设备的方法 | |
CN106357761A (zh) | 基于实时操作系统的分布式消息通信中间件实现软件系统 | |
CN103442015B (zh) | 一种基于linux虚拟网卡的在无线网络控制器上对capwap隧道数据的处理方法及系统 | |
CN110120897A (zh) | 链路探测方法、装置、电子设备及机器可读存储介质 | |
CN102447738A (zh) | 一种实现基站远程调试的方法及装置 | |
CN103440213B (zh) | 一种应用于具有多cpu和网卡的系统的网卡驱动方法 | |
CN110830434A (zh) | 通用透明代理方法 | |
CN101645778B (zh) | 网络业务流识别系统及其识别方法 | |
Ruimei et al. | Design of ARM-based embedded Ethernet interface | |
CN115665057A (zh) | 数据处理方法、装置、非易失性存储介质及计算机设备 | |
CN103297384A (zh) | 协议转换的通信方法及系统 | |
CN102867142A (zh) | 一种基于Android系统的安全防护方法 | |
WO2012010002A1 (zh) | 一种物联网终端java应用的业务调试装置和方法 | |
CN106027305A (zh) | 一种基于arm的相同ip的双机热备的方法 | |
CN103023940A (zh) | 一种pc与移动终端之间的数据传输方法和装置 | |
CN103874230A (zh) | 数据发送处理方法及装置 | |
CN106713462A (zh) | 一种网络数据包处理方法和装置 | |
CN101453741B (zh) | 调试移动终端数据业务的方法和系统 | |
CN115022424A (zh) | 水电lcu控制器网卡虚拟控制方法、系统、设备及其介质 | |
CN111880769B (zh) | 一种适用于物联网应用系统接口的抽象描述方法及其应用 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140730 |