Linux tcpdump 命令:网络抓包与故障排查利器
tcpdump 是 Linux 中非常常用的网络抓包工具,可以直接捕获网卡上的数据包,用来排查网络连接、端口访问、DNS、HTTP、TCP 握手等问题。
最基础的用法:
tcpdump
默认会监听一个网络接口并输出抓到的数据包。
实际使用中,通常先指定网卡:
tcpdump -i eth0
如果不知道网卡名称,可以先执行:
ip addr
或者查看 tcpdump 可用接口:
tcpdump -D
只抓指定主机的数据:
tcpdump host 192.168.1.100
只抓访问目标主机的数据:
tcpdump dst host 192.168.1.100
只抓来自某个主机的数据:
tcpdump src host 192.168.1.100
按端口抓包:
tcpdump port 80
例如抓 SSH 流量:
tcpdump port 22
只抓 TCP 数据包:
tcpdump tcp
只抓 UDP:
tcpdump udp
抓 ICMP,也就是常见的 ping 数据:
tcpdump icmp
多个条件可以组合:
tcpdump -i eth0 host 192.168.1.100 and port 443
表示只监听 eth0 网卡上与 192.168.1.100:443 有关的流量。
排除某些流量可以使用 not:
tcpdump not port 22
这样可以避免 SSH 连接产生大量干扰数据。
限制抓包数量:
tcpdump -c 100
抓到 100 个数据包后自动退出。
如果希望直接显示 IP 和端口,而不进行域名解析:
tcpdump -nn
这是实际排查问题时非常常用的参数。
-n 不解析主机名
-nn 不解析主机名和端口服务名称
查看更详细的数据包信息:
tcpdump -vv
甚至可以使用:
tcpdump -vvv
显示更详细的协议字段。
如果想查看数据包正文,可以使用:
tcpdump -A
以 ASCII 形式显示内容。
或者:
tcpdump -X
同时显示十六进制和 ASCII 内容。
将抓包结果保存到文件:
tcpdump -i eth0 -w capture.pcap
之后可以使用 tcpdump 读取:
tcpdump -r capture.pcap
也可以将 .pcap 文件放到 Wireshark 中进一步分析。
日常排查网络问题时,一个非常实用的组合是:
tcpdump -i eth0 -nn host 192.168.1.100
例如检查服务器是否收到 443 端口请求:
tcpdump -i eth0 -nn tcp port 443
排查 TCP 三次握手时,可以观察:
SYN
SYN, ACK
ACK
如果只能看到客户端不断发送 SYN,却没有收到 SYN, ACK,通常说明服务端没有正常响应,可能涉及:
防火墙
安全组
服务未监听
网络路由
端口被拦截
常见参数可以简单记住:
-i 指定网卡
-D 查看可监听的接口
-nn 不进行域名和端口解析
-c 限制抓包数量
-w 保存为 pcap 文件
-r 读取 pcap 文件
-A ASCII 显示数据内容
-X 十六进制 + ASCII
-v 显示详细信息
如果服务器出现“端口明明开放但访问不了”“请求有没有到服务器”“DNS 到底发到哪里去了”等网络问题,tcpdump 往往是最直接有效的排查工具之一。
- 点赞
- 收藏
- 关注作者
评论(0)