手把手教你捕获数据包(下)【数据包的游戏系列之二】

从VoLTE通话到手游加速:手把手教你用Wireshark抓包分析LTE网络中的QCI值 本文详细介绍了如何使用Wireshark抓包分析LTE网络中的QCI值,从VoLTE通话到手游加速的应用场景。通过实战案例和QCI参数对照表,帮助读者理解不同业务场景下的QoS管理机制,提升网络优化能力。 阅读详情

B. 打开相应网卡并设置为混杂模式:

   在此之前肯定要有一段让用户选择网卡、并获得用户选择的网卡的名字的代码,既然上面已经可以获得所有网卡的名字了,这段代码就暂且略过了。

   我们主要是要用到 pcap_open_live 函数,不过这个函数winpcap的开发小组已经建议用pcap_open 函数来代替,不过因为我的代码里面用的就是pcap_open_live,所以也不便于修改了,不过pcap_open_live使用起来也是没有任何问题的,下面是pcap_open_live的函数声明:

 /*************************************************

pcap_t* pcap_open_live  (  char *    device, 

                             int    snaplen, 

  int    promisc, 

  int    to_ms, 

  char *    ebuf

 )  

     功能:

           根据网卡名字打开网卡,并设置为混杂模式,然后返回其句柄

     参数:

           Device  : 就是前前面我们获得的网卡的名字;

           Snaplen :  我们从每个数据包里取得数据的长度,比如设置为100,则每次我们只是获得每个数据包 100 个长度的数据,没有什么特殊需求的话就把它设置为65535最大值就可以了;

           Promisc:这个参数就是设置是否把网卡设置为“混杂模式”,设置为 1 即可;

           to_ms :   超时时间,毫秒,一般设置为 1000即可。

     返回值:

           pcap_t :  类似于一个网卡“句柄”之类的,不过当然不是,这个参数是后面截获数据要用到的。

******************************************************************************/

虽然看起来比较复杂,不过用起来还是非常简单的,其实 1 行就OK了:

    pcap_t* adhandle;

       char errbuf[PCAP_ERRBUF_SIZE];

// 打开网卡,并且设置为混杂模式

// pCardName是前面传来的网卡名字参数

adhandle = pcap_open_live(pCardName,65535,1,1000,errbuf);

 

C. 截获数据包并保存为文件:------------------------------------------------------

     当然,不把数据包保存为文件也可以,不过如果不保存的话,只能在截获到数据包的那一瞬间进行分析,转眼就没了^_^

所以,为了便于日后分析,所以高手以及我个人经常是把数据包保存下来的慢慢分析的。

但是注意网络流量,在流量非常大的时候注意硬盘空间呵呵,常常几秒中就有好几兆是很正常的事情。

下面首先来详细讲解一下,这个步骤中需要用到的winpcap函数:

/**************************************************************

pcap_dumper_t* pcap_dump_open  (  pcap_t *    p, 

                                      const char *    fname

 )

功能:

      建立或者打开存储数据包内容的文件,并返回其句柄

参数:

       pcap_t *    p     :前面打开的网卡句柄;

      const char * fname :要保存的文件名字   

返回值:

       pcap_dumper_t* : 保存文件的描述句柄,具体细节我们不用关心

***************************************************************/

/***************************************************************

int pcap_next_ex          (  pcap_t *    p, 

                              struct pcap_pkthdr **    pkt_header, 

  u_char **    pkt_data

 )  

功能:

      从网卡或者数据包文件中读取数据内容

参数:

      pcap_t *    p:    网卡句柄

      struct pcap_pkthdr ** pkt_header: 并非是数据包的指针,只是与数据包捕获驱动有关的一个Header

      u_char ** pkt_data:指向数据包内容的指针 ,包括了协议头  

返回值:

          1 : 如果成功读取数据包

          0 :pcap_open_live()设定的超时时间之内没有读取到内容

          -1: 出现错误

          -2: 读文件时读到了末尾

***************************************************************/

/***************************************************************

void pcap_dump  (  u_char *    user, 

                       const struct pcap_pkthdr *    h, 

  const u_char *    sp

 )   

功能:

      将数据包内容依次写入pcap_dump_open()指定的文件中

参数:

      u_char * user   :  网卡句柄

      const struct pcap_pkthdr * h: 并非是数据包的指针,只是与数据包捕获驱动有关的一个Header

      const u_char * sp: 数据包内容指针    

返回值:

          Void

****************************************************************/

 下面给出一段完整的捕获数据包的代码,是在线程中写的,为了程序清晰,我去掉了错误处理代码以及线程退出的代码,完整代码可下载文后的示例源码,老规矩,重要的步骤用粗体字标出。

我们实际在捕获数据包的时候也最好是把代码放到另外的线程中。

/*********************************************************

*   进程:

*                   这个是程序的核心部分,完成数据包的截获

*     参数:

*                   pParam: 用户选择的用来捕获数据的网卡的名字

*********************************************************/

UINT CaptureThread(LPVOID pParam)

{

       const char* pCardName=(char*)pParam;          // 转换参数,获得网卡名字                       

 

       pcap_t* adhandle;

       char errbuf[PCAP_ERRBUF_SIZE];             

       // 打开网卡,并且设置为混杂模式

 adhandle=pcap_open_live(pCardName,65535,1,1000,errbuf);      {

 

       pcap_dumper_t* dumpfile;

// 建立存储截获数据包的文件

       dumpfile=pcap_dump_open(adhandle, "Packet.dat");   

 

       int re;

       pcap_pkthdr* header;      // Header

       u_char* pkt_data;         // 数据包内容指针

// 从网卡或者文件中不停读取数据包信息

       while((re=pcap_next_ex(adhandle,&header,(const u_char**)&pkt_data))>=0)

      {

          // 将捕获的数据包存入文件

              pcap_dump((unsigned char*)dumpfile,header,pkt_data);     

       }

       return 0;

}  

将个线程加入到程序里面启动以后。。。等等,如何来启动这个线程就不用我说了吧,类似这样的代码就可以

::AfxBeginThread(CaptureThread,chNIC);     // chNIC是网卡的名字,char* 类型

启动线程一段时间以后(几秒中就有效果了),可以看到数据包已经被成功的截获下来,并存储到程序目录下的Packet.dat文件中。

=====================================================

至此,数据包的截获方法就讲完了,大家看了这篇文章,其实你就一定也明白了,无论是raw socket的方法还是winpcap的方法,其实都很简单的,真的没有什么东西,只是会让不明白原理的人看起来很神秘而已,isn’t it?

呵呵,不过也不要高兴的太早,这个保存下来的数据包文件,你可以试着用UltraEdit打开这个文件看看,是不是大部分都是乱码?基本上没有什么可读性,这是因为:

此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。

呵呵,所以我们要走的路还很长,这只是刚刚入门而已^_^

请期待本系列的下一部拙作

《手把手教你分析数据包》

本文的源码也将在下一文中一起发布

 

                                                                                                                 --------  Made In DLUT | DIP

                                                                                                                   --------  Finished at
游戏逆向开发实战指南:从内存扫描到协议分析的全栈技能 逆向工程是理解软件内部运行机制的关键技术,其核心原理在于通过静态与动态分析,解析程序的数据结构、执行逻辑与通信协议。这项技术的价值在于能够深入理解复杂系统的运作方式,广泛应用于软件安全分析、漏洞挖掘、兼容性开发与自动化测试等领域。在游戏开发与安全研究场景中,掌握逆向工程能力尤为重要,它使开发者能够分析游戏逻辑、优化性能或进行安全评估。本指南聚焦于**游戏逆向开发**,系统性地拆解了从**数据层内存寻址**、逻辑层代码反编译,到协议层网络数据分析的完整技术栈,并提供了应对反外挂机制的实用策略,旨在帮助学习者构 阅读详情

相关推荐

Android游戏逆向工程实战:从工具链配置到动态调试完整指南

逆向工程是深入理解软件运行原理、进行安全审计和二次开发的核心技术。其基本原理是通过静态分析和动态调试,解析程序的代码逻辑与数据结构,从而掌握其内部工作机制。在移动安全领域,这项技术对于分析应用行为、挖掘潜在漏洞具有重要价值。特别是在Android游戏开发中,逆向工程常用于学习优秀的设计模式、分析性能优化方案,以及进行合法的资源提取与机制研究。实际应用时,开发者需要掌握APK结构解析、资源提取、代码定位等静态分析技能,并结合Frida动态插桩、网络抓包等动态调试手段。本指南聚焦Android游戏逆向,详细介绍

weixin_33860553的博客 361

实战对某棋牌app渗透测试

某天无聊,看到朋友发过来一个信息,说要测试一个app。只扔过来一个链接,其余什么都没有。 就一个下载页面然后点击下载即可开启“致富”人生。现在很多棋牌都是这种套路直接扔一个静态页面下载软件开玩。真的是能省多少省多少。 废话不多说下载app扔到模拟器测试。 模拟器打开如下: 点击没反应,以为是模拟器的问题于是换个模拟器继续测试发现问题一样。猜测是检测模拟器与手机。现在很多棋牌app都是会检测模拟器的,发现是模拟器运行会各种错误。 于是手机安装: 发现可以正常运行。实锤了是检测模拟器与手机。 app渗透的

黑战士的博客 3万+

别再死记硬背!用Cisco Packet Tracer 5.3手把手教你搞懂局域网IP规划与设备选型

本文通过Cisco Packet Tracer 5.3实战教学,详细解析企业级局域网的IP规划与设备选型技巧。从核心层到接入层的设备选择、子网划分的工程思维到无线网络部署的隐藏细节,帮助读者摆脱死记硬背,掌握网络设计的底层逻辑。特别适合计算机网络初学者和准备CCNA认证的学员。

weixin_42562079的博客 357

抓包工具:Fiddler -强大效能之 AutoResponder

关于Fiddler的AutoResponder重定向功能,主要是时进行会话的拦截,然后替换原始资源的功能。 他与手动修该reponse是一样的,只是更加方便了,可以创建相应的rules,适合批处理的重定向功能。 下边直接说他的使用方式把: 使用的是手机上边的百度手机助手的棋牌游戏界面。 1、首先看图 (我们来重定向第一个欢乐斗地主这个图片)

钢铁烈阳--非花非雾 1万+

网页 游戏 数据包截取工具

轻松截取数据包 不用注册安装 所有数据包有效 还可以截取指定ip的数据包

游戏、app抓包

模拟器加抓包工具抓取app,小程序数据

m0_73452266的博客 4694

无人驾驶-2024-09-智能驾驶与机器视觉09:视觉与多传感器融合

从本章开始,我们将详细介绍视觉与多传感器融合技术。自动驾驶中常用的传感器都有其优势和局限性,单一传感器无法应对复杂的驾驶场景。多传感器融合技术旨在综合利用不同的传感器优势,提升感知的精度和鲁棒性。本章首先介绍多传感器融合的相关概念,之后详细介绍典型的融合方法。

u013250861的博客 593

手把手教你捕获数据包(上)【数据包的游戏系列之二】

手把手教你捕获数据包(上)【数据包的游戏系列之二】 前   言      经常看到论坛有人问起关于数据包的截获、分析等问题,幸好本人也对此略有所知,也写过很多的sniffer,所以就想写一系列的文章来详细深入的探讨关于数据包的知识。我希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释、详细的分析、以及编码步骤,另外附上带有详细注释的源码

1230

大数据架构中的数据血缘追踪技术解析

数据血缘(Data Lineage)是指数据从源头到目标的完整流转路径,它记录了数据在整个生命周期中的变化过程。在大数据架构中,数据血缘追踪技术已经成为数据治理的核心组成部分。本文旨在全面解析数据血缘追踪的技术原理、实现方法和应用实践,帮助读者深入理解这一关键技术。本文将从基础概念入手,逐步深入到技术实现细节,最后探讨实际应用和未来趋势。数据血缘的核心概念和技术原理数据血缘的数学模型和算法实现实际项目案例和代码解析主流工具和解决方案比较未来发展方向和技术挑战。

架构师的AI之路,分享AI应用开发架构的学习与实践。 688

C语言版数字锁相放大器实现指南:从复数运算到嵌入式MCU移植的坑我都帮你踩了

本文详细介绍了C语言实现数字锁相放大器的关键技术,包括复数运算优化、嵌入式MCU移植的实战经验及内存管理策略。针对STM32等资源受限平台,提供了从浮点到定点数转换的优化方案,帮助工程师高效处理微弱信号提取问题。

weixin_30721077的博客 432

手把手教你捕获数据包【数据包的游戏系列之二】 by PiggyXP【小猪】

前   言      经常看到论坛有人问起关于数据包的截获、分析等问题,幸好本人也对此略有所知,也写过很多的sniffer,所以就想写一系列的文章来详细深入的探讨关于数据包的知识。我希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释、详细的分析、以及编码步骤,另外附上带有详细注释的源码(为了照顾大多数朋友,我提供的都是MFC的源码)。不

XmagicX的专栏 1849

【Unity终极奥义】Unity打包去掉启动画面Logo,无需破解,一学就会

大家都知道Unity打包的应用在启动的时候都会有一个默认的UnityLogo。 而且这个Logo使用升级版和破解版都是可以随意清除和更换的。 但是Unity个人版是无法通过Unity的打包设置去进行更换的。 那今天就教大家一个使用个人普通版更换Unity启动画面Logo的方法!一起来看一下吧!

努力前行,总会成为自己心中的那道光 8万+

(转)手把手教你捕获数据包(上)【数据包的游戏系列之二】

前    言       经常看到论坛有人问起关于数据包的截获、分析等问题,幸好本人也对此略有所知,也写过很多的 sniffer ,所以就想写一系列的文章来详细深入的探讨关于数据包的知识。 我希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释、详细的分析、以及编码步骤,另外附上带有详细注释的源码 ( 为了照顾大多数朋友,我提供的都是 MFC

飞鸟Blog 1191

基于多头注意力时间卷积网络(MATCN)的虚拟电厂短期功率预测模型

​时空特征解耦​:TCN负责时间模式,注意力捕捉空间关联​动态门控机制​:自适应调整两种特征的融合比例​多尺度感知​:膨胀卷积覆盖5分钟到24小时的时间跨度​轻量化设计​:参数量比传统Transformer减少52%

hasakie的博客 322

TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书

创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。评估板接口资源丰富,引出5x Ethernet(两路支持TSN)、2x CAN-FD、多路UART、多路DI/DO、GPMC、PCIe、USB等接口,板载WIFI模块,支持4G/5G模块、NVME硬盘,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。

创龙,嵌入式一体化解决方案商 727

(转)手把手教你捕获数据包(下)【数据包的游戏系列之二】

B. 打开相应网卡并设置为混杂模式:    在此之前肯定要有一段让用户选择网卡、并获得用户选择的网卡的名字的代码,既然上面已经可以获得所有网卡的名字了,这段代码就暂且略过了。    我们主要是要用到 pcap_open_live 函数,不过这个函数 winpcap 的开发小组已经建议用 pcap_open 函数来代替,不过因为我的代码里面用的就是 pcap_open_live ,所以也不便

飞鸟Blog 1324

YOLOv8剪枝 稀疏训练+slim剪枝测试精度仅掉1.6个点,速度提高10.3fps!

摘要 本文介绍了YOLOv8剪枝方法Slim(Network Slimming),通过L1正则化作用于BN层的缩放因子(γ),自动识别并剪除冗余通道,实现模型轻量化。核心步骤包括:稀疏训练(引入L1正则化)、通道剪枝(按γ阈值裁剪)、微调恢复精度。实验表明,该方法能有效压缩模型大小、减少计算量,且支持通过调整speed_up等超参数控制剪枝强度。移植代码需修改C2F模块以适配剪枝,并配置稀疏训练参数(如reg、sl_epochs)。最终剪枝模型需移除优化器以减小体积,但不支持多卡训练。

FJN110的博客 861

java获取tmoca数据包_(转)手把手教你捕获数据包(下)【数据包的游戏系列之二】...

B.打开相应网卡并设置为混杂模式:在此之前肯定要有一段让用户选择网卡、并获得用户选择的网卡的名字的代码,既然上面已经可以获得所有网卡的名字了,这段代码就暂且略过了。我们主要是要用到pcap_open_live函数,不过这个函数winpcap的开发小组已经建议用pcap_open函数来代替,不过因为我的代码里面用的就是pcap_open_live,所以也不便于修改了,不过pcap_open_live...

weixin_39530833的博客 223

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

手把手教你模拟快手直播弹幕:基于Netty+Protobuf的Python实现

本文详细介绍了如何通过逆向工程模拟快手直播弹幕的完整流程。从网络抓包分析入手,识别出底层基于Netty框架和Protobuf协议,并提供了Python实现方案,包括协议破解、数据帧构建及弹幕消息处理,帮助开发者深入理解实时通信协议并构建数据监控工具。

weixin_29251131的博客 159

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

手把手教你抓微信小程序:告别“无法抓包”的噩梦

实战经验:突破微信小程序抓包限制的完整方案 为什么小程序抓包这么难? 做过小程序逆向或接口分析的朋友应该都遇到过这个场景:照着网上的教程,打开Charles或Fiddler,设置好系统代理,装上证书,信心满满地点开微信小程序,结果—— 要么直接提示“网络不给力”,要么请求全部失败。 这不是你操作不对,而是小程序的底层机制在“作梗”。 小程序的反代理原理 微信小程序框架内置了 代理检测逻辑 ,它会检查当前网络环境是否配置了系统级代理。一旦检测到,小程序就会拒绝通过代理发送请求,直接走直连通道。而传统的抓包工具

rsandtl的博客 323

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Wireshark网络流量分析实战:从TCP故障排查到安全威胁识别

网络流量分析是网络运维与安全领域的核心技术,它通过捕获和解析数据包,透视网络通信的底层原理。理解TCP/IP协议栈、HTTP等应用层协议的工作原理,是进行有效分析的基础。这项技术的核心价值在于,它能将抽象的网络问题具象化,将性能瓶颈和安全威胁转化为可视化的数据模式,从而精准定位故障根源或攻击行为。在实际应用场景中,无论是排查服务器响应缓慢、连接超时等性能问题,还是识别端口扫描、暴力破解、慢速攻击等安全事件,流量分析都是不可或缺的“侦探”工具。本文以Wireshark这一经典工具为例,结合**TCP重传**、

weixin_30231327的博客 281

手把手带你吃透硬件驱动开发实战项目

本文聚焦硬件驱动开发实战,从基础入门切入,详解驱动程序的角色、类型及开发核心逻辑。围绕开发环境搭建、硬件设备解析、需求设计、编码实现、测试调试等关键环节展开,结合网卡驱动开发实战案例,拆解项目全流程及问题解决方案。同时涵盖驱动优化、兼容性处理与维护技巧,兼顾理论深度与实操性。旨在帮助开发者掌握驱动开发核心技能,应对不同系统与硬件场景的开发挑战,为投身相关实战项目提供清晰指引,也展望了技术发展下驱动开发的未来趋势。

邓邓子的博客 841
上一篇: 手把手教你捕获数据包(上)【数据包的游戏系列之二】
下一篇: 手把手教你玩转ARP包(二)【数据包的游戏系列之一】
superhacker110
博客等级 码龄22年 2粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值