pcap++实战(三)

TLS指纹、SSL分析、 HttpAnalyzer、 DNS解析、PCAP解析、PCAP分割与搜索

这一章主要介绍 pcap++的应用,即示例程序

pcap应用

这些应用以bin存在,但源码位于github,可用于学习和借鉴

ArpSpoofing ARP欺骗

这是一个应用程序,使用packet++和Pcap++进行ARP欺骗。你可以在这里阅读更多关于ARP欺骗的内容。

arp

使用PcapPlusPlus的路由实用程序的实现。

DnsSpoofing DNS欺骗

一个命令行实用程序,使用packe++和Pcap++进行DNS欺骗。

DNSResolver DNS解析

一个命令行实用程序,使用ARP和DNS协议解析主机名的IPv4地址。工作原理是发送DNS请求并分析DNS回复来解析IPV4地址的主机名

1
2
3
4
5
6
7
8
9
10
11
Basic usage:
DNSResolver [-hl] [-t timeout] [-d dns_server] [-g gateway] [-i interface] -s hostname

Options:
-h : 帮助信息。
-l : 列出网卡。Print the list of interfaces and exists
-s hostname : 待解析主机名。Hostname to resolve
-i interface : 使用网卡。Use the specified interface. Can be interface name (e.g eth0) or interface IPv4 address. If not set then one of the interfaces that has a default gateway will be used
-d dns_server: 指定DNS服务器。IPv4 address of DNS server to send the DNS request to. If not set the DNS request will be sent to the gateway
-g gateway : 指定网关。IPv4 address of the gateway to send the DNS request to. If not set the default gateway will be chosen
-t timeout : 超时时间。How long to wait for a reply (in seconds). Default timeout is 5 seconds

限制:IPV4 only

hostname通常指的是计算机在网络中的名称,而IPv4地址则是该计算机在网络中的具体位置。

  1. 定义:Hostname是赋予设备的标签或名称,用于在网络中标识该设备。它是易于理解和记忆的字符串,如“www.example.com”。而IPv4地址是一种数字标签,由四部分组成,每部分用小数点分隔,例如“192.168.1.1”。
  2. 唯一性:在私有网络内部,hostname必须是唯一的,以避免冲突;而在全世界范围内,IPv4地址必须唯一,以确保每个设备都可以在互联网上被精确定位。

IcmpFileTransfer Icmp文件传输

这个应用程序演示了如何仅使用ICMP消息在两台机器之间传输文件。基本思想是使用ICMP消息的数据部分在机器之间传输文件块。

HttpAnalyzer

一个应用程序,分析HTTP流量,并提供详细和多样化的信息,如数据包计数和速率,带宽,流量计数和速率,HTTP请求和响应计数和速率,主机名直方图,内容类型直方图,状态码直方图和更多。可以操作实时流量或从pcap文件读取数据包。

  1. Packet count and rate:指的是在特定时间内通过网络传输的数据包的数量和速率。数据包是网络传输的基本单位,了解它们的计数和速率有助于监测网络流量和性能。
  2. Bandwidth:带宽指的是网络连接的数据传输能力,通常以比特每秒(bps)为单位表示。它是衡量网络通信速度的重要指标。
  3. Flow count and rate:流(Flow)是指从某个源到目的地的一系列数据包。流的数量和速率可以帮助识别网络上活跃的连接数和数据流的情况。
  4. HTTP requests + responses count and rate:指HTTP请求和响应的数量及其发生的速率。每次用户在浏览器中访问网页时,都会向服务器发送一个或多个HTTP请求,并接收服务器的响应。
  5. HTTP transaction count and rate:一个HTTP事务包括一个请求和对应的响应。事务的数量和速率有助于了解服务器处理请求的性能。
  6. HTTP pipelining count:HTTP管道化技术允许客户端同时发送多个请求而不必等待每个请求的响应,从而提高通信效率。管道化计数表明了这种技术的使用情况。
  7. HTTP header size:HTTP头信息包含了描述消息内容的元数据,如内容类型、缓存控制指令等。头信息的大小可以影响传输效率。
  8. Hostname histogram:主机名直方图是一种展示不同主机名出现频率的图表统计,可用于分析服务器名称的分布情况。
  9. Content-type histogram:内容类型直方图显示了不同MIME类型的内容在HTTP传输中的分布情况,例如文本、图片、视频等。
  10. Status code histogram:状态码直方图展示了各种HTTP响应状态码的分布情况,如200(成功)、404(未找到)、500(服务器错误)等。

SSLAnalyzer

一个应用程序,分析SSL/TLS流量,并提供详细和多样化的信息,如数据包计数和速率,带宽,流量计数和速率,SSL/TLS消息计数,主机名直方图,SSL/TLS版本计数,密码套件计数和更多。可以操作实时流量或从pcap文件读取数据包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
njust@njust:~/program/pcapplusplus-23.09-ubuntu-20.04-gcc-9.4.0-x86_64/bin$ ./SSLAnalyzer -f /home/njust/arkime/tests/pcap/openssl-ssl3.pcap


STATS SUMMARY
=============

General stats
-------------

Sample time: 0.000 [Seconds]
Number of SSL packets: 5 [Packets]
Rate of SSL packets: 0.000 [Packets/sec]
Number of SSL flows: 1 [Flows]
Rate of SSL flows: 0.000 [Flows/sec]
Total SSL data: 1802 [Bytes]
Rate of SSL data: 0.000 [Bytes/sec]
Average packets per flow: 5.000 [Packets]
Average data per flow: 1802.000 [Bytes]
Client-hello message: 1 [Messages]
Server-hello message: 1 [Messages]
Number of SSL flows with successful handshake: 0 [Flows]
Number of SSL flows ended with alert: 1 [Flows]

SSL/TLS ports count
-------------------

-------------------------
| SSL/TLS ports | Count |
-------------------------
| 443 | 1 |
-------------------------

SSL/TLS versions count
----------------------

----------------------------------------
| SSL/TLS version | Count |
----------------------------------------
| SSL 3.0 | 1 |
----------------------------------------

Cipher-suite count
------------------

--------------------------------------------------------------
| Cipher-suite | Count |
--------------------------------------------------------------
| TLS_ECDHE_RSA_WITH_RC4_128_SHA | 1 |
--------------------------------------------------------------

Server-name count
-----------------

DpdkExample-FilterTraffic
一个演示PcapPlusPlus DPDK api的应用程序。该应用程序监听一个或多个DPDK端口(也称为DPDK设备),捕获所有流量,并根据用户自定义的匹配标准(如源/dest IP,源/dest TCP/UDP端口等)匹配数据包。匹配的数据包可以发送到另一个DPDK端口和/或保存到pcap文件中。此外,应用程序还会对接收到的报文和匹配的报文进行统计。

DpdkBridge
这个应用程序演示了如何使用PcapPlusPlus DPDK api在两个网络设备之间创建桥接(类似于DPDK的L2转发示例)。

KniPong
一个演示DPDK KNI的PcapPlusPlus包装器的应用程序。它模拟了用-u键运行的Unix NETCAT实用程序。它基本上是一个ping/pong客户机/服务器通道,使用来自stdin的用户提供的输入。

PfRingExample-FilterTraffic ❤❤❤

捕获、过滤、转发或保存、统计

PF_RING是一种网络套接字库,用于高性能网络流量处理和分析。它提供了一种快速捕获和处理网络数据包的方法,可以显著提高数据包捕获速度,并支持多种负载均衡方法。

以下是PF_RING在网络流量方面的一些功能和应用:

  1. 高性能数据包捕获:PF_RING可以通过绕过内核协议栈的方式直接从网卡抓取数据包,从而提高数据包捕获的速度和效率。

  2. 多种负载均衡方法:PF_RING支持多种负载均衡方法,包括RSS(Receive Side Scaling)和ZC(Zero Copy)。RSS是一种能够在多处理器系统下将接收报文高效分发到多个CPU的网卡驱动技术。ZC则是一种使用软件方法实现的流量分发技术,可以高速地将流量从网卡抓取并分发到不同的队列。

  3. 提高流量处理能力:通过使用PF_RING的负载均衡方法,可以将流量分发到多个处理节点上,从而提高流量处理的能力。这对于网络安全监视、性能评估和故障排除等任务非常有用。

  4. 支持过滤和应用层识别:PF_RING还支持过滤和应用层识别功能。通过配置过滤规则,可以过滤掉不需要关注的流量,从而减轻处理负担并提高效率。

一个演示PcapPlusPlus PF_RING api的应用程序。此应用程序监听PF_RING接口,捕获所有流量并通过用户定义的匹配标准(如源/dest IP,源/dest TCP/UDP端口等)匹配数据包。匹配的数据包可以发送到另一个PF_RING接口和/或保存到pcap文件中。此外,应用程序还会对接收到的报文和匹配的报文进行统计。

PcapPrinter

一个简单的应用程序,从pcap文件输出数据包作为可读字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
njust@njust:~/program/pcapplusplus-23.09-ubuntu-20.04-gcc-9.4.0-x86_64/bin$ ./PcapPrinter xxx/openssl-ssl3.pcap
File summary:
~~~~~~~~~~~~~
File name: /home/njust/arkime/tests/pcap/openssl-ssl3.pcap
File size: 6330 bytes
Link layer type: Ethernet

Packet length: 74 [Bytes], Arrival time: 2014-10-15 09:49:29.995637000
Ethernet II Layer, Src: 00:13:72:c4:f1:e1, Dst: 00:00:0c:07:ac:01
IPv4 Layer, Src: 10.0.0.1, Dst: 74.125.228.238
TCP Layer, [SYN], Src port: 45680, Dst port: 443

Packet length: 74 [Bytes], Arrival time: 2014-10-15 09:49:29.995637000
Ethernet II Layer, Src: 00:13:72:c4:f1:e1, Dst: 00:00:0c:07:ac:01
IPv4 Layer, Src: 10.0.0.1, Dst: 74.125.228.238
TCP Layer, [SYN], Src port: 45680, Dst port: 443
...

可以看到,展示了pcap大小、层数、包长、到达时间、以太网地址、IP地址、TCP端口

PcapSplitter pcap分割❤❤❤

一个应用程序,可以根据用户定义的各种标准将pcap文件拆分为更小的pcap文件,如文件大小,数据包计数,每个连接拆分,每个客户端- IP,每个服务器- IP,每个服务器-端口(协议)或每个IP src + IP dst(2元组)。与类似的工具相比,这个应用程序非常先进,例如:对输入文件大小或数据包计数没有限制,对输出文件数量没有技术限制(除非用户设置限制),支持IPv4和IPv6等等。

PcapSearch pcap搜索❤❤❤

一个应用程序,它在用户给定的目录/目录中搜索pcap文件,并计算有多少数据包匹配BPF格式中给定的用户定义模式。

TcpReassembly

一个应用程序,它捕获作为TCP连接的一部分传输的数据,组织数据并以一种方便协议分析和调试的方式存储数据。该应用程序重建TCP数据流,并将每个连接存储在单独的文件中。TcpReassembly理解TCP序列号,将正确重建数据流,无论重传,乱序交付或数据丢失。

IPFragUtil&IPDefragUtil

IPFragUtil将IP数据包分割成片段的实用程序。它可以在pcap和pcapng文件上工作,并允许用户选择要分割的数据包和大小。支持IPv4和IPv6报文。

IPDefragUtil将IP片段重新组装回IP数据包的实用程序。它适用于pcap和pcapng文件,并允许用户选择要重新组装的片段。支持IPv4和IPv6报文。

TLSFingerprinting TLS指纹❤❤❤

这个应用程序演示了如何从实时流量或pcap文件中收集ClientHello (JA3)和ServerHello (JA3S) TLS指纹,将它们写入输出文件并显示各种统计信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
./TLSFingerprinting -r /home/njust/arkime/tests/pcap/tls13.pcap 
Start reading '/home/njust/arkime/tests/pcap/tls13.pcap'...

Summary:
========
Total packets read: 6
TLS ClientHello packets: 1
Unique ClientHello TLS fingerprints: 1

ClientHello TLS fingerprints:
----------------------------------------------
| TLS Fingerprint | Count |
----------------------------------------------
| 4826a90ec2daf4f7b4b64cc1c8bd343b | 1 |
----------------------------------------------
Output file was written to: 'tls13.txt'

此例中提取了TLS指纹:4826a90ec2daf4f7b4b64cc1c8bd343b
TLS指纹又叫SSL指纹,或者JA3指纹,是根据客户端向服务端发送的Client Hello计算得到在TLS握手中还有服务端响应的Server Hello,也有特征,可以得到JA3S指纹又由于服务端会根据不同的Client Hello响应不同的Server Hello,根据这个又可以得到JARM指纹
简单来说:
JA3是标记客户端的指纹
JA3S是标记服务端的指纹
JARM是升级版的JA3S指纹

PcapPlusPlus-benchmark

用于测量PcapPlusPlus性能的基准应用程序。有关更多细节,请参阅基准测试页面。该应用程序目前仅在Linux上编译(运行基准测试)。

Tutorial-LiveTraffic

有很多demo没有编译到bin,需要自己git下来并且build,我下到了/下载文件夹

cmake ..报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~/下载/PcapPlusPlus/Examples/Tutorials/Tutorial-LiveTraffic/build$ cmake ..
cmake: /usr/local/lib/libcurl.so.4: no version information available (required by cmake)
Compiling Tutorial out of project
CMake Error at CMakeLists.txt:13 (find_package):
By not providing "FindPcapPlusPlus.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"PcapPlusPlus", but CMake did not find one.

Could not find a package configuration file provided by "PcapPlusPlus" with
any of the following names:

PcapPlusPlusConfig.cmake
pcapplusplus-config.cmake

Add the installation prefix of "PcapPlusPlus" to CMAKE_PREFIX_PATH or set
"PcapPlusPlus_DIR" to a directory containing one of the above files. If
"PcapPlusPlus" provides a separate development package or SDK, be sure it
has been installed.

在CmakeLists.txt中加入这一句

1
list(APPEND CMAKE_PREFIX_PATH "/home/njust/program/pcapplusplus-23.09-ubuntu-20.04-gcc-9.4.0-x86_64")

即指定CMAKE_PREFIX_PATH