linux下使用tcpdump抓取数据包
-
我们都知道windows系统下抓包有强大的wireShark工具,Linux下则可以使用tcpdump进行抓包。
tcpdump命令格式
tcpdump option proto dir type
-
option : 可选参数
-w 写数据到文件 -r 从文件读数据 -A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
-
proto : 协议。
tcp udp ether wlan ip ip6
-
dir : 方向。
src 源地址 dst 目的地址
-
type : 类型。
host 主机 net 网络 port 端口 portrange 端口范围
举例
-
tcpdump host 192.168.10.100 抓取该ip地址上的所有数据包 tcpdump src port 8088 抓取源端口号8088上的所有数据包 tcpdump portrange 8000-8080 抓取这个端口范围的所有数据包 tcpdump tcp 抓取所有tcp数据包
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)
数据传输
-
客户端发送了一个"hello"字符串
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
-
flags标志位为P,表示进行数据推送。
四次挥手
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差不多,可以参考我在另一篇文章中的详细分析。
输出
-
如果你觉得在linux下分析数据不方便,我们可以把抓取到的数据包保存到文件中
tcpdump -w tcpdata.pcap host 182.92.205.179
-
然后把tcpdata.pacap文件传到windows系统下,可以直接使用wireShark打开进行分析。
参考
上一篇:
Java架构师技术进阶路线图
下一篇:
【计算机网络】 ARP协议和DNS协议