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打开进行分析。

参考

经验分享 程序员 微信小程序 职场和发展