-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
根据 TCP 序号(Seq)及确认号(Ack) 对 PCAP 文件中的 TCP 流进行重组,并按时间顺序导出内容。
举个例子,客户端要给服务器发送 "ab" 两个字符串,服务器收到之后回复 "c",最后客户端关闭连接。
我们抓包得到的内容是这样的
| time | src | sport | dst | dport | seq | ack | flags | content |
|---|---|---|---|---|---|---|---|---|
| 1 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 0 | - | SYN | |
| 2 | 1.2.3.4 | 80 | 192.168.1.1 | 5200 | 0 | 1 | SYN,ACK | |
| 3 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 1 | 1 | ACK | |
| 4 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 1 | 1 | PUSH | a |
| 5 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 1 | 1 | PUSH | a |
| 6 | 1.2.3.4 | 80 | 192.168.1.1 | 5200 | 1 | 2 | ACK | |
| 7 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 2 | 1 | PUSH | b |
| 8 | 1.2.3.4 | 80 | 192.168.1.1 | 5200 | 1 | 3 | ACK | |
| 9 | 1.2.3.4 | 80 | 192.168.1.1 | 5200 | 1 | 3 | PUSH | c |
| 10 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 3 | 2 | FIN,ACK | |
| 12 | 1.2.3.4 | 80 | 192.168.1.1 | 5200 | 2 | 4 | FIN,ACK | |
| 10 | 192.168.1.1 | 5200 | 1.2.3.4 | 80 | 4 | 3 | ACK |
重组完成是这样的
client: IP=192.168.1.1, PORT=5200
server: IP=1.2.3.4, PORT=80
flow:
time=4, direction=c2s, content="a"
time=7, direction=c2s, content="b"
time=9, direction=s2c, content="c"
注意第 5 个是重发第 4 个没收到的包,必须剔除。
名词解释
客户端(client)
我们称 TCP 连接的发起方为客户端,即先发送 SYN 标志的那一端。
服务器(server)
与客户端通讯的一端称为服务器端。
TCP 端点(endpoint)
指使用 TCP 交换数据的双方,上述客户端和服务器端都是 TCP 端点。
每个端点均由 IP 地址和 TCP 端口标识,例如:
- 端点1(IP=1.2.3.4, PORT=80)
- 端点2(IP=1.2.3.4, PORT=90)
TCP 流(flow)
指 TCP 两端点之间传输的数据(流),按流向来分的话,它有两条,分别是
- 客户端 --->>> 服务器
- 服务器 --->>> 客户端
TCP 流由两端点标识,即两 IP 加两 TCP 端口,例如:
- 端点1(IP=192.168.1.1, PORT=5200) <<<------>>> 端点2(IP=1.2.3.4, PORT=80)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels