pcap++实战(二)
pcap++实战(二)
tutorials:这一部分主要介绍pcapplusplus库的基本概念,我们会利用这个库实际写一些代码
库的组成
PcapPlusPlus由3个库组成:common++, packet++和pcap++,让我们来讲解一下每一个库的目的和它的主要类:
common++
一个库,用于解析、创建和编辑各种支持协议的数据包。这个库可以独立使用,不依赖于Pcap++, libpcap/WinPcap/Npcap等。主要类和实用程序:
RawPacket
- 原始包Layer
- 所有协议层的基类。每个协议层负责解析数据包中属于该协议的特定字节Packet
-表示由不同的PcapPlusPlus协议解析器解析,包含不同协议层Protocol layers (for example:
EthLayer, IPv4Layer, IPv6Layer, TcpLayer, UdpLayer, DnsLayer, HttpRequestLayer, HttpResponseLayer, PayloadLayer
, etc.) - 代表特定协议解析器的类。Layer
子类PacketUtils
- 一个包含几个广泛使用的方法的类,例如基于5元组或2元组计算哈希值TcpReassembly
-一个提供TCP流的TCP重组的类(又名TCP重构)IPv4Reassembly
- 提供IPv4报文重组(即IPv4碎片化)的类
pcap++
一个库,用于拦截和发送数据包,提供网络和网卡信息,统计等。这个库主要是一个c++捕获引擎的外壳wrapper,如libpcap, WinPcap, Npcap, DPDK和PF_RING,但也提供了一些独特的这些引擎没有的特性和能力。主要类和实用程序:
- PcapLiveDevice——表示一个Linux/MacOS/FreeBSD网络接口,可以捕获和发送数据包以及检索接口信息。也可用于Android设备
- WinPcapLiveDevice -代表一个Windows网络接口,包含了所有在PcapLiveDevice中暴露的功能。这个类实际上继承了PcapLiveDevice,并为WinPcap/Npcap和Windows操作系统做了相关的调整
- DpdkDevice——表示支持DPDK的网络接口,封装DPDK捕获和发送数据包以及检索接口信息的基本功能
- PfRingDevice——表示启用了PF_RING的网络接口,封装了PF_RING功能,用于捕获和发送数据包以及检索接口信息
- PcapRemoteDevice——表示远程机器上的网络接口,允许使用rpcap协议在该接口上捕获和发送数据包。这个类实际上包装了WinPcap的远程捕获功能,因此只能在Windows上使用
- pcap和pcap-ng文件读取和写入器(PcapFileReaderDevice, PcapFileWriterDevice, PcapNgFileReaderDevice, PcapNgFileWriterDevice, IFileReaderDevice, IFileWriterDevice)
- 包过滤引擎——一个c++ API,用于BPF(伯克利包过滤)格式,用于从网络接口或pcap/pcap-ng文件中进行易于使用的包过滤
- NetworkUtils—包含需要网络交互的常见和基本操作的类,例如通过发送ARP请求发现远程机器的MAC地址,从主机名发现IPv4地址(通过发送DNS请求),等等
Common++
一个包含通用代码实用工具和类的库,可用于packe++和Pcap++。主要类和实用程序:
IPv4Address, IPv6Address
- classes representing IPv4 and IPv6 addresses accordinglyMacAddress
- a class representing a MAC (Ethernet) addressIpUtils.h
- all kinds of helpful network utilitiesLoggerPP
- a simple logging infrastructure used widely in PcapPlusPlusSystemUtils.h
- several useful utilities for interaction with the operating system
Raw packets vs. Parsed packets 原始包和解析包
PcapPlusPlus中有两种类型的数据包:原始数据包和解析数据包。原始数据包是从网络捕获的原始字节流及其捕获的时间戳。原始数据包不包含任何关于构建它的协议的数据,当然协议数据不能被添加、删除或编辑。另一方面,解析的数据包是包含所有协议数据的数据包,可以根据协议进行编辑。这揭示了PcapPlusPlus的核心功能之一:获取从网络捕获的原始数据包并从中创建解析数据包,这意味着识别它们的协议,保存关于这些协议的元数据,并允许用户轻松访问所有这些解析数据以进行读写(编辑,添加数据和删除数据)。
数据结构
结构示意图:在下面的图中,你可以看到RawPackets,parsed Packets和Layers之间的关系:
一个解析包包含第一层指针和原始包,第一层指针指向第一层,每个layer都包含前一层和后一层的指针、原始字节流、协议场(可读可写),每个原始包包含了原始字节流、时间辍和link type
tshark
参考:
Written with StackEdit中文版.