- 我们都知道windows系统下抓包有强大的wireShark工具,Linux下则可以使用tcpdump进行抓包。
tcpdump命令格式
tcpdump option proto dir type
-
-w 写数据到文件
-
-r 从文件读数据
-
-A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
- tcp
- udp
- ether
- wlan
- ip
- ip6
- host 主机
- net 网络
- port 端口
- portrange 端口范围
举例
-
tcpdump host 192.168.10.100 抓取该ip地址上的所有数据包
-
tcpdump src port 8088 抓取源端口号8088上的所有数据包
-
tcpdump portrange 8000-8080 抓取这个端口范围的所有数据包
-
tcpdump tcp 抓取所有tcp数据包
-
tcpdump -i lo 抓取本地回环包
tcpdump输出内容介绍
19:50:51.802675 IP ubuntu.53284 > 182.92.205.179.10088: Flags [P.], seq 1:7, ack 23, win 64218, length 6
-
19:50:51.802675 时间
-
IP 网络协议
-
ubuntu.53284 发送方地址以及端口号
-
182.92.205.179.10088 接收方地址以及端口号
-
Flags [P.] flags标识符。有以下几种
- [S] SYN(开始连接)
- [P] PSH(推送数据)
- [F] FIN (结束连接)
- [R] RST(重置连接)
- [.] 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)
-
seq 序列号
-
ack 确认号
-
length 数据长度
抓包分析
- 命令:tcpdump host 182.92.205.179
- 先抓取这个地址上的所有数据包
三次握手
20:28:44.659214 IP ubuntu.53310 > 182.92.205.179.10088: Flags [S], seq 3892635409, win 64240, options [mss 1460,sackOK,TS val 3092868458 ecr 0,nop,wscale 7], length 0
20:28:44.686879 IP 182.92.205.179.10088 > ubuntu.53310: Flags [S.], seq 1283407174, ack 3892635410, win 64240, options [mss 1460], length 0
20:28:44.686916 IP ubuntu.53310 > 182.92.205.179.10088: Flags [.], ack 1, win 64240, length 0
- 可以看到客户端先发送了一个SYN请求,服务端回应了一个ACK + SYN,客户端回应了一个ACK,三次握手建立连接。(这里flags里面的点就是ACK)
数据传输
20:29:09.856194 IP ubuntu.53310 > 182.92.205.179.10088: Flags [P.], seq 1:7, ack 1, win 64240, length 6
20:29:09.856332 IP 182.92.205.179.10088 > ubuntu.53310: Flags [.], ack 7, win 64240, length 0
四次挥手
20:24:52.536351 IP ubuntu.53304 > 182.92.205.179.10088: Flags [F.], seq 1, ack 1, win 64240, length 0
20:24:52.536547 IP 182.92.205.179.10088 > ubuntu.53304: Flags [.], ack 2, win 64239, length 0
20:24:52.561859 IP 182.92.205.179.10088 > ubuntu.53304: Flags [FP.], seq 1, ack 2, win 64239, length 0
20:24:52.561889 IP ubuntu.53304 > 182.92.205.179.10088: Flags [.], ack 2, win 64240, length 0
- 客户端发起断开请求FIN,服务端回应ACK,服务端发起断开请求FIN,客户端回应ACK。完成四次挥手断开连接。
备注
- 具体三次握手和四次挥手,以及数据的推送过程在这里就不详细分析了,其实和wireShark差不多,可以参考我在另一篇文章中的详细分析。
- wireShark抓包分析tcp
输出
- 如果你觉得在linux下分析数据不方便,我们可以把抓取到的数据包保存到文件中
tcpdump -w host 182.92.205.179
- 然后把文件传到windows系统下,可以直接使用wireShark打开进行分析。
参考