网络抓包分析:tcpdump实战

周算法

· 阅读 319

分享
tcpdump抓包

网络抓包分析:tcpdump实战

当网络问题难以通过常规手段定位时,抓包分析是最直接有效的方法。tcpdump是Linux下最强大的网络抓包工具,可以捕获和分析网络数据包。本文通过实战案例介绍tcpdump的使用方法。

基础用法

tcpdump -i eth0:在eth0网卡上抓包(默认输出到终端)。tcpdump -i eth0 -c 100:只抓100个包。tcpdump -i eth0 -w capture.pcap:将抓包结果保存到文件(用Wireshark打开分析)。

过滤表达式

按主机tcpdump -i eth0 host 192.168.1.100(只抓和该IP相关的包)。

按端口tcpdump -i eth0 port 80(只抓80端口的包)。

按协议tcpdump -i eth0 tcp(只抓TCP包)、udpicmparp

组合过滤tcpdump -i eth0 'tcp port 80 and host 10.0.0.1'(抓和10.0.0.1通信的80端口TCP包)。

按方向tcpdump -i eth0 'src host 10.0.0.1'(源地址为10.0.0.1的包)。

实战场景

排查连接超时:客户端连接服务端超时。在服务端抓包 tcpdump -i eth0 'tcp port 8080 and host client_ip'。如果看不到SYN包,说明包被中间防火墙拦截了。如果看到SYN但没有SYN-ACK,说明服务端没有响应(可能端口没监听或防火墙规则问题)。

排查丢包:应用偶尔超时。抓包统计重传率:tcpdump -i eth0 'tcp port 80' -w cap.pcap,用Wireshark打开查看Statistics → I/O Graphs,观察重传和乱序情况。

分析HTTP请求tcpdump -i eth0 -A -s0 'tcp port 80 and host client_ip'。-A以ASCII输出包内容,-s0不截断。可以看到完整的HTTP请求和响应内容。

注意事项

抓包会产生大量数据,务必使用过滤表达式限制范围。生产环境抓包时间不宜过长(影响性能)。大流量场景使用 -C 100 限制每个文件大小为100MB,-W 5 限制最多5个文件。