一、PCAP抓包
抓包(Packet Capture)是一种网络分析工具,而PCAP是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的,比如WireShark也是用PCAP库来抓取数据包的。PCAP抓取出来的数据包并不是原始的网络字节流,而是对其进行从新组装,形成一种新的数据格式。它可以记录网络数据包的详细信息,包括源地址、目标地址、协议类型、数据内容等。
在 Linux 中,可以使用工具如 tcpdump 或 Wireshark 来进行抓包操作。以下是一些常见的抓包工具和示例用法:
tcpdump:
安装 tcpdump:如果系统未安装 tcpdump,可以使用包管理工具进行安装。例如,在 Debian/Ubuntu 系统中可以使用 sudo apt install tcpdump 命令安装。
抓取数据包:可以使用以下命令抓取指定网络接口的数据包,并将结果保存到文件中:
sudo tcpdump -i eth0 -w capture.pcap
其中 -i eth0 指定抓取的网络接口为 eth0,-w capture.pcap 指定将抓取的数据包保存到 capture.pcap 文件中。
查看抓包结果:可以使用 Wireshark 或 tcpdump 自带的命令行工具(例如 tcpdump -r capture.pcap)来查看抓取的数据包内容。
Wireshark:
安装 Wireshark:可以从 Wireshark 官网下载安装包,并根据系统进行安装。
使用 Wireshark 图形界面进行抓包操作:打开 Wireshark 图形界面,在菜单栏选择相应的网络接口(如 eth0),然后点击“开始捕获”按钮进行抓包。抓包结束后,可以保存捕获的数据包到 PCAP 文件中。
Tips:在使用抓包工具时需要管理员权限或 root 权限,以便访问网络接口并进行数据包捕获操作。另外,抓包操作会捕获网络上的所有数据包,包括敏感信息,请在合法授权和合规的情况下使用抓包工具。
二、PCAP格式
pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump、wireshark等等,
了解pcap格式可以加深对原始数据包的了解,自己也可以手工构造任意的数据包进行测试。pcap文件的格式为:
文件头header:24字节
数据包头 + 数据包 :数据包头为16字节,后面紧跟数据包
数据包头 + 数据包 …:一个用PCAP抓取的数据包的文件格式如下:
Pcap文件头24B各字段说明:
pcap.h里定义了文件头的格式
struct pcap_file_header { bpf_u_int32 magic; u_short version_major; u_short version_minor; bpf_int32 thiszone; bpf_u_int32 sigfigs; bpf_u_int32 snaplen; bpf_u_int32 linktype; };
| magic |major | minor | thiszone | sigfigs | snaplen | linktype |
| d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00 |
Magic: 4B:0x1A 2B 3C 4D :用来标示文件的开始
Major: 2B,0x02 00 :当前文件主要的版本号
Minor: 2B,0x04 00 当前文件次要的版本号
ThisZone: 4B 当地的标准时间;全零
SigFigs: 4B 时间戳的精度;全零
SnapLen: 4B 最大的存储长度,4字节抓包最大长度如果要抓全,设为0x0000ffff
(65535),tcpdump -s 0就是设置这个参数,缺省为68字节
LinkType: 4B 链路类型
常用类型:
0 BSD loopback devices, except for later OpenBSD
1 Ethernet, and Linux loopback devices
6 802.5 Token Ring
7 ARCnet
8 SLIP
9 PPP
10 FDDI
100 LLC/SNAP-encapsulated ATM
101 “raw IP”, with no link
102 BSD/OS SLIP
103 BSD/OS PPP
104 Cisco HDLC
105 802.11
108 later OpenBSD loopback devices (with the AF_value in network byte order)
113 special Linux “cooked” capture
114 LocalTalk
其中我们最为常见的类型就是1,以太网链路。
Pcap数据包头各字段说明:
struct pcap_pkthdr { struct timeval ts; bpf_u_int32 caplen; bpf_u_int32 len; }; struct timeval { long tv_sec; suseconds_t tv_usec; };
Timestamp:时间戳高位,精确到seconds;时间戳低位,精确到microseconds;8字节的抓包时间 ,4字节表示秒数,4字节表示微秒数;
Caplen:4字节 保存下来的包长度(最多是snaplen,比如68字节),即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len:4字节数据包的真实长度,即离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
Packet 数据:即 Packet(通常就是链路层的数据帧去掉前面用于同步和标识帧开始的8字节和最后用于CRC校验的4字节)具体内容,长度就是Caplen,这个长度的 后面,就是当前PCAP文件中存放的下一个Packet数据包,也就是说:PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,我 们需要靠第一个Packet包确定下一组数据在文件中的起始位置,向后以此类推。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_61636702/article/details/137571766
————————————————