`
ah_fu
  • 浏览: 227975 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

提供一个读取CAP文件的类

阅读更多

     最近在做一些协议分析的工作,常常和ETHREAL打交道。 我写好自己的程序后,往往要放到真实的网络环境中去测试,看自己的协议处理程序是否正确。反反复复觉得很不爽。
      于是考虑,如果可以把ETHREAL抓下来的数据直接作为测试数据使用,就方便多了。于是研究了一下CAP文件的格式(见上篇文章),自己写了一个读取CAP文件内容的类,公布给大家,希望能对你们有所用处。
     具体的使用请看压缩包中的README.TXT文件,此代码能同时在LINUX和WINDOWS上使用。
    没有办法添加附件,请需要的朋友发邮件给我:ahfu@qq.com  可以从这里下载:http://download1.csdn.net/down3/20070516/16191424179.rar


 

CapFileReader类使用说明

功能:读取ethreal生成的CAP格式的文件内的信息
接口说明
CapFileReader(void);  //默认构造函数
~CapFileReader(void);  //析构函数
bool Open(const char* CapFile);  //打开CAP文件,参数为文件的路径
bool Read();  //读取下一个数据段,达到文件末尾返回false
void Close();  //关闭Cap文件的读取
inline unsigned short DataLength() const;  //得到当前数据段的数据长度,要先调用Read()方法
bool GetSourceMacAddr(char* Buffer, int Length);  //得到当前数据段的源网卡物理地址,要先调用Read()方法
bool GetDestMacAddr(char* Buffer, int Length);  //得到当前数据段的目的网卡物理地址,要先调用Read()方法
bool GetIPHeader(IP_HEADER& ip);  //假设当前数据段的协议是IP协议,获得IP协议的头信息,要先调用Read()方法
bool GetIPData(int HeadLen, char* Buffer, int Length);  //假设当前的数据段的协议是IP协议,获得IP协议的内容,要先调用Read()方法
bool GetInternetData(char* Buffer, int Length);  //得到Internet协议的内容,包括ARP、IP等,要先调用Read()方法
inline time_t GetStartTime() const;  //得到开始抓包的时间
inline unsigned int GetMicroSecond() const;  //得到当前数据段相对开始抓包时间的微秒数,要先调用Read()方法
inline unsigned short GetInternetProtocol() const;  //得到当前数据段的协议标识,要先调用Read()方法

使用示例:
CapFileReader cap;
if (!cap.Open("1.cap"))
{
    printf("File not exists!\n");
    return;
}
IP_HEADER ip;
while (cap.Read())
{
    if (cap.GetInternetProtocol()==PROTOCOL_IP)
    {
        if (!cap.GetIPHeader(ip))
        {
            printf("Get IP Header fail!\n");
            continue;
        }
        if (ip.Proto == PROTOCOL_TCP)
        {
            printf("TCP\n");
        }
        else if (ip.Proto == PROTOCOL_UDP)
        {
            printf("UDP\n");
        }
        else
        {
            printf("IP\n");
        }
    }
    else if (cap.GetInternetProtocol()==PROTOCOL_ARP))
    {
        printf("ARP\n");
    }
    else
    {
        printf("unknown\n");
    }
}
cap.Close();

分享到:
评论

相关推荐

    cap文件解析API

    1. **文件读取**:首先,API应该提供一个方法来读取cap文件,这可能涉及到二进制文件的处理,确保正确解析文件头,获取文件的结构信息。 2. **数据包解析**:API需要能够解析每个数据包,这包括解码网络层(如IP)...

    解析cap文件

    Cap4j是一个Java库,用于处理cap文件,它提供了API来进行数据包的读取、写入和过滤操作,对于开发者来说,可以方便地集成到自己的应用中进行数据分析。 总结起来,cap文件解析涉及网络监控、故障排查、安全分析等多...

    华硕24mb bios主板分离8+16mbBIOS提取两个BIOS芯片文件华硕官网BIOS提取软件cap转bin去文件头编程器

    标签“软件/插件”表明了在这个过程中会使用到的软件工具,这可能是一个专门用于处理华硕主板BIOS的软件,它能够解析24mb的CAP文件,并将其拆分为两个正确的BIN文件。此外,它可能还具有去除文件头的功能,因为某些...

    视频文件的读取与保存

    3. 使用`cap.read(frame)`读取视频帧,`frame`通常是一个`cv::Mat`对象,存储了当前帧的像素数据。 4. 可以使用OpenCV的各种图像处理函数对帧进行操作,如`cv::imshow`显示帧,`cv::imwrite`保存为图片等。 5. 循环...

    split_cap_2-1.zip

    在本案例中,我们关注的是"split_cap_2-1.zip"这个压缩包文件,它包含了一个工具——SplitCap,能够将通过Wireshark捕获的pcap文件按照会话(session)进行拆分,每个会话生成一个独立的文件。 首先,我们要理解什么...

    java分析cap

    4. **文件读写**:Jpcap支持从CAP文件中读取数据包,也能够将捕获到的数据包保存为CAP文件。 在实际应用中,Java分析CAP包的能力可以帮助开发者诊断网络问题,如检查网络延迟、丢包、错误的数据传输等。同时,这也...

    用opencv读取一个文件中的多个视频

    每个视频文件都需要创建一个新的VideoCapture对象,然后使用`cap.read()`方法读取帧。如果成功,`read()`方法会返回一个布尔值,表示是否成功读取了帧。以下是如何读取并显示视频帧的示例代码: ```cpp cv::Mat ...

    cap转下载脚本工具

    "cap转下载脚本工具"的工作原理是解析CAP文件中的内容,生成相应的下载命令序列,这个序列通常是一个文本脚本,包含了向Java Card发送的APDU(Application Protocol Data Unit)指令。APDU是智能卡与外界通信的基本...

    format_cap.rar_cap pc_format_c_format_cap_winpcap_winpcap c

    3. **设备打开**:使用`pcap_open_live()`函数连接到目标网络接口,或者使用`pcap_open_offline()`函数打开一个cap文件。 4. **数据包过滤**:你可以使用`pcap_setfilter()`设置一个BPF(Berkeley Packet Filter)...

    OpenCVSharp读取视频文件并解析出图片

    通过提供视频文件的路径,我们可以创建一个`VideoCapture`对象,从而能够访问视频中的每一帧。例如: ```csharp using OpenCvSharp; // 创建VideoCapture对象,参数为视频文件路径 var capture = new VideoCapture...

    华硕主板BIOS CAP格式转BIN格式

    1. 获取转换工具:首先,你需要找到一个能够处理华硕CAP文件并将其转换为BIN格式的工具。这类工具通常由编程器制造商或第三方软件开发者提供,如AWDFLASH、WinFlash等。确保下载的工具来自可信赖的来源,以避免病毒...

    DSPF28335的CAP代码

    【描述】"主要是DSPF28335的CAP源代码,开发环境是CCS3.3"表明了开发者使用的是Code Composer Studio(CCS)版本3.3,这是一个集成开发环境,专为TI的微控制器和数字信号处理器提供服务。在这个环境下,开发者编写、...

    matlab读取stl文件

    在MATLAB中读取STL(StereoLithography)文件是三维建模和可视化中的一个常见任务。STL文件格式通常用于存储3D模型,它由一系列三角面片组成,这些面片定义了物体的表面。MATLAB提供了几个工具和函数来处理这种文件...

    videocap (摄像头程序) Delphi源码

    通过对上述文件的分析,我们可以推断出`videocap`程序是一个使用Delphi开发的,通过DirectShow框架访问摄像头,并可能具有实时预览、捕获图片或视频功能的应用。开发者通过阅读和学习这个源码,可以了解到如何在...

    Linux下分布式系统以及CAP理论分析

    CAP理论为我们提供了一个框架,帮助我们理解这些权衡并指导我们在特定应用场景下做出最合适的设计决策。未来,随着分布式系统的发展和技术的进步,可能会出现新的方法和技术来进一步优化CAP理论中的权衡,但当前CAP...

    基于OpenCV的avi文件读取和处理

    我们可以通过调用`cap.read()`来获取每一帧,它返回一个布尔值表示是否成功读取帧,以及一个numpy数组表示实际的图像帧。 ```python while cap.isOpened(): ret, frame = cap.read() if not ret: break # 在...

    03-cap.rar

    该资源的压缩包"03-cap.rar"包含了一份此书源码的副本,对于学习和研究系统级编程的开发者来说,这是一个宝贵的资料。 在Linux和UNIX系统中,编程往往涉及到与底层操作系统紧密交互,这需要理解系统调用、库函数和...

    screen_cap_Screencap截屏_screencap_Vc_

    总结来说,"screen_cap_Screencap截屏_screencap_Vc_"是一个使用VC++实现的高级截屏工具,它提供了丰富的截图选项,并且能够实时显示和保存截图。这样的程序对于开发者来说是一个挑战,需要掌握多种技术和API,但...

    bin文件转换为C文件转换工具

    在提供的`bin2txt.rar`压缩包中,可能包含的就是这样一个转换工具,它可能将.bin文件转换为一个包含十六进制数据的.C文件和相应的头文件。解压并运行这个工具,用户可以将他们的二进制文件轻松地集成到C项目中。 ...

    CAP2ALLO导库

    3. **生成Allegro TXT网标**:转换完成后,CAP2ALLO会生成一个TXT文件,该文件包含了Allegro导入时所需的全部连接信息。这种TXT格式是Allegro的标准输入,可以方便地通过Allegro的导入功能加载到设计中。 4. **保持...

Global site tag (gtag.js) - Google Analytics