手把手教你捕获数据包2

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头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。
呵呵,所以我们要走的路还很长,这只是刚刚入门而已^_^
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值