最近的项目要求写一个读写pcap文件的小程序,用来修改pcap中的部分信息,实现pcap的定制。

所以必须学会使用wireshark并能有利用WinPcap库和libpcap库进行开发。

虽然本文记录的都是windows下使用WinPcap进行开发,但是由于希望程序能够跨平台,所以代码中使用的都是库里面的跨平台函数,而不是windows专用的函数。

废话少说。

安装wireshark。这和开发本身无关,只是为了看包方便。

安装WinPcap库。

到http://www.winpcap.org/docs/default.htm下载WinPcap库的zip文件,将下载到的zip(写本文时下载的是WpdPack_4_1_2.zip)解压到一个路径,用<WpdPackDir>表示。里面有五个文件夹,包括docs(文档)、Include(头文件)、Lib(库文件)和两个例子程序。本文都是结合文档编写(差不多是翻译)。下面就是文档截图,怎么用都说的很清楚。

       

配置开发环境(以vs2010为例)

新建一个vs c++工程。右键点击项目,选择属性。
VC++目录,包含目录包含<WpdPackDir>\Include
VC++目录,库目录包含<WpdPackDir>\Lib
C/C++,预处理器,添加WPCAP和HAVE_RMOTE。
连接器,输入,添加wpcap.lib和ws2_32.lib库
   
其实文档里面都写的很清楚了。

然后,在你需要用到WinPcap库的文件当中包含pcap.h就可以了。

测试

试着读取一个名为test.pcap的文件,看看如何。关于pcap文件的格式,将在下一篇文章中阐述。

#include "pcap.h"#include "stdio.h"int main(int argc, char *argv[]) {char errbuf[100];    pcap_t *pfile = pcap_open_offline("test.pcap", errbuf);if (NULL == pfile) {printf("%s\n", errbuf);return -1;} pcap_pkthdr *pkthdr = 0;const u_char *pktdata = 0;pcap_next_ex(pfile, &pkthdr, &pktdata);printf("%d\n", pkthdr->caplen);for (bpf_u_int32 i = 0; i < pkthdr->caplen; ++i) {if (0 < i && 0 == i % 16) printf("\n");printf("%2x ", pktdata[i]);}pcap_close(pfile);return 0;
}

程序读取了文件中的第一个数据包,并按照wireshark显示的格式,以十六进制打印出了数据包中的每一个字节。

对比一下,一样的。

程序中pcap_open_offline函数以二进制读方式打开一个已经存好的tcpdump/libpcap格式的文件。

pcap_open_offline需要两个参数,第一个是文件名,第二个是个char类型指针。这个指针用来返回错误信息,只有当打开文件失败时,这个字符串被设置为相应的错误信息并返回空指针。

pcap_next_ex函数,读取下一个数据包。需要pcap_pkthdr**指针(不需要实体)和const u_char**类型的指针。

另一个函数pcap_next可以实现同样的功能。单需要提供一个指向pcap_pkthdr结构体的指针(需要new一个实体)。代码如下。

#include "pcap.h"
#include "stdio.h"int main(int argc, char *argv[]) {char errbuf[100];    pcap_t *pfile = pcap_open_offline("test.pcap", errbuf);if (NULL == pfile) {printf("%s\n", errbuf);return -1;} pcap_pkthdr *pkthdr = new pcap_pkthdr;const u_char *pktdata = 0;pktdata = pcap_next(pfile, pkthdr);printf("%d\n", pkthdr->caplen);for (bpf_u_int32 i = 0; i < pkthdr->caplen; ++i) {if (0 < i && 0 == i % 16) printf("\n");printf("%2x ", pktdata[i]);}delete pkthdr;pcap_close(pfile);return 0;
}

使用WinPcap和libpcap类库读写pcap文件(001)开发环境配置相关推荐

  1. 使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式

    本文基本翻译自https://wiki.wireshark.org/Development/LibpcapFileFormat,主要分析pcap文件的格式. 其中一些字段可能和现在的WinPcap类库 ...

  2. linux更改cxxflags环境变量,在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置(pro文件中增加 QMAKE_CXXFLAGS += -m32 命令)...

    为了能中一个系统上开发64或32位C++程序,费了些周折,现在终于能够开始干过了.在此记录此时针对Q5.4版本的32位开发环境配置过程. 1. 下载Qt 5.4 的32位版本,进行安装,安装过程中会发 ...

  3. C++ 之 C++ 操作 json 文件(C++读写json文件)及jsoncpp配置详解

    目录 前言 一.json文件简介 1.json文件 2.json与其他存储数据方式比较 二.C++操作json文件 1.jsoncpp 库下载 2.C++从字符串中读取json 3.C++从文件中读取 ...

  4. c++ 怎么配置头文件路径_OpenGL环境配置

    每次换新电脑,我想搞openGL的时候,都会苦于一个问题,那就是环境搭配,虽然搭过很多次,但就是记不住,所以今天就把快速配置的过程写下来,方便下次使用,如果有人看到我这篇文章觉得说得太模糊了,不清楚, ...

  5. .axf文件_Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  6. wamp下配置php文件,wamp开发环境快速搭建详细步骤

    简介:总结在Windows环境搭建PHP开发环境(Apache+PHP+MySQL) 安装Apache 2.解压压缩包,最好放到磁盘根目录,不然配置时容易报路径错误,我这里改了文件夹名,方便以后配置, ...

  7. wireshark读写pcap文件_PCAP-file-analysis 利用wireshark捕获tcp ip数据包和pcap文件分析 - 下载 - 搜珍网...

    reademe.txt 实验报告-终版.doc 实验数据/ 实验数据/arp.pcap 实验数据/DHCP.pcap 实验数据/Diagram1.dia 实验数据/Diagram1.png 实验数据/ ...

  8. 【C++ 之 C++ 操作 json 文件(C++读写json文件)及jsoncpp配置详解】

    文章目录 一.json文件简介 1.json文件 2.json与其他存储数据方式比较 二.C++操作json文件 1.jsoncpp 库下载 2.C++从字符串中读取json 1.简单json样式 2 ...

  9. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置

    安装 CMake.LLDB与NDK 开发工具包 CMake 简介 CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台.不同的编译器,并通过CMakeLists.txt文件中简单的 ...

最新文章

  1. idea 使用正则表达式 进行匹配替换
  2. vim中使用sed去除网上copy的源代码行号和空格
  3. 【计网】计算机网络期末总复习-谢希仁(个人总结)理论概念
  4. boost::math模块使用 non_finite_num facet 的一个非常简单的例子
  5. cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...
  6. 中国科技大学计算机学院叶辉,中国科技大学计算机科学与技术学院导师教师师资介绍简介-黄文超...
  7. 刘强东发新年信:过去一年我们异常艰难
  8. MYSQL正式环境主从复制(不锁表,不停服务)
  9. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码
  10. C++之模块对于 SAFESEH 映像是不安全的
  11. yum 安装jenkins
  12. ADSL拨号网络环境下实时视频广播的完美实现
  13. 1114 Family Property (25 分)
  14. scala中一些常见用法
  15. kettle Windows下载
  16. c语言编程多项式,多项式c语言编程.docx
  17. jzoj6495 死星 (竞赛图五元环)
  18. ReadLikeHumans: Autonomous,Bidirectional and Iterative Language Modeling for Scene Text Recognition
  19. 道高一尺 魔高一丈(使用插件订火车票)
  20. UltraEdit for Mac 18.00 强大的文本编辑器 中文破解版下载

热门文章

  1. 服务器无线网卡驱动程序,在Ubuntu里使用Windows的无线网卡驱动程序的方法教程...
  2. 使用JackJSON 流式API 创建JSON串【学习记录】
  3. 《深入理解计算机系统》第七章——链接知识点总结
  4. Set集合常用方法 遍历Set集合的方法
  5. autolayout autoresizing
  6. 2 OC 对象的本质(一个Student 占用的内存大小)
  7. iOS提示气泡,带动画
  8. 基于web创建逼真的3D图形 | CSS技巧
  9. Mysql—(1)—
  10. linux严谨的telnet搭建并用防火墙开通与禁行