以下开发均基于Linux平台,以Ubuntu为例进行讲解,具体源码移步这里。
抓取Pcap文件
笔者使用libpcap库(libpcap是unix/linux平台下的网络数据包捕获函数包)进行抓包。
安装libpcap库
- Libpcap下载。
- 解压下载的压缩包
tar -zxvf filename.tar.gz
(filename是下载的文件名) - 配置生成makefile文件。进入解压的文件夹,执行
./configure
。这里可能会提示缺少flex,使用sudo apt-get install flex
即可。 - 执行
make
。这里可能会提示缺少yacc,使用sudo apt-get install yacc
即可。 - 执行
sudo make install
。
使用库函数抓包
- pcap_lookupdev():函数用于查找网络设备,返回可被 pcap_open_live() 函数调用的网络设备名指针。
- pcap_lookupnet():函数获得指定网络设备的网络号和掩码。
- pcap_open_live(): 函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。
- pcap_compile(): 函数用于将用户制定的过滤策略编译到过滤程序中。
- pcap_setfilter():函数用于设置过滤器。
- pcap_loop():函数 pcap_dispatch() 函数用于捕获数据包,捕获后还可以进行处理,此外 pcap_next() 和 pcap_next_ex() 两个函数也可以用来捕获数据包。
- pcap_close():函数用于关闭网络设备,释放资源。
- pcap_dump_open用于打开保存的文件
- pcap_dump用于输出数据到文件。
分析Pcap文件
这里给出用于读取Pcap文件的结构体。读者可以从中看出Pcap文件的结构。
1 | /* |
分析的过程即是个读取文件的过程,在此不再赘述。