Tcpdump - 命令行网络抓包分析工具

开源网络分析利器,支持TCP/UDP/ICMP协议捕获、BPF灵活过滤、离线数据包分析,网络工程师必备工具

Tcpdump核心功能

为网络分析与故障排查打造的命令行抓包解决方案

🌐

多协议捕获

支持TCP/UDP/ICMP/ARP等协议,捕获网络层到应用层数据包

🔍

BPF过滤语法

类C语法的Berkeley包过滤器,精准筛选目标流量(如端口、IP)

💾

离线分析

支持将抓包数据保存为.pcap文件,用Wireshark等工具离线分析

📊

流量统计

实时统计连接数、数据包大小分布、协议占比等网络指标

⏱️

定时抓包

结合cron或timeout实现定时抓包,满足周期性监控需求

🔧

低资源占用

纯命令行工具,资源消耗极低,适合服务器长期运行

下载Tcpdump

国内高速网盘下载,提供百度网盘与夸克网盘镜像

Tcpdump 4.99.4 稳定版

开源免费 | Linux/Unix-like系统专用 | 命令行抓包工具

📋 版本信息

  • 版本号:v4.99.4 (稳定版)
  • 发布日期:2023-08-10
  • 系统要求:Linux/Unix-like (glibc 2.17+)
  • 文件大小:约2.5 MB
  • 授权协议:BSD开源协议

Tcpdump 使用教程

从基础抓包到高级过滤,掌握网络分析技巧

1

基础抓包命令

最简命令格式:tcpdump [选项] [过滤表达式]

# 捕获所有网卡流量(需root) sudo tcpdump # 指定网卡(如eth0) sudo tcpdump -i eth0 # 捕获10个数据包后退出 sudo tcpdump -c 10
2

BPF过滤语法

精准筛选目标流量,语法:[协议] [方向] [地址] [端口]

# 捕获TCP 80端口流量 sudo tcpdump tcp port 80 # 捕获源IP为192.168.1.100的流量 sudo tcpdump src host 192.168.1.100 # 捕获目的端口53(DNS)的UDP流量 sudo tcpdump udp dst port 53
3

保存与分析数据包

将抓包数据保存为.pcap文件,供后续分析

# 保存数据包到文件(-w) sudo tcpdump -w capture.pcap # 读取.pcap文件分析(-r) tcpdump -r capture.pcap # 保存时限制文件大小(循环覆盖) sudo tcpdump -C 10 -w capture.pcap # 每10MB新建文件
4

高级用法示例

结合统计、定时、复杂过滤实现深度分析

# 统计各协议数据包数量 sudo tcpdump - -nn -q | awk '{print $3}' | sort | uniq -c # 定时抓包(抓5分钟流量) timeout 300 sudo tcpdump -i eth0 -w timed_capture.pcap # 复杂过滤:捕获SSH登录尝试(端口22+关键字) sudo tcpdump 'tcp port 22 and (host 192.168.1.0/24)'

常见问题解答

Tcpdump使用过程中的疑难问题解决方案

Tcpdump与Wireshark有什么区别?

Tcpdump是命令行工具,轻量高效,适合服务器环境;Wireshark是图形化工具,功能更丰富(协议解码、流重组),适合深度分析。两者常配合使用:Tcpdump抓包,Wireshark分析。

为什么需要root权限运行?

抓包需要访问网络接口底层数据,普通用户无权限。解决方法:1. 用sudo运行;2. 赋予tcpdump二进制文件CAP_NET_RAW能力:sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

如何过滤特定域名的流量?

需先解析域名获取IP,再过滤IP。例如抓example.com流量:
1. 解析IP:nslookup example.com
2. 过滤IP:sudo tcpdump host 93.184.216.34(IP可能变化,建议用脚本动态解析)

抓包文件太大怎么办?

优化方法:1. 用BPF过滤减少无关包;2. 限制文件大小:-C 10(每10MB新建文件);3. 压缩保存:tcpdump -w - | gzip > capture.pcap.gz;4. 只抓包头:-s 96(截取前96字节)

如何分析TCP三次握手失败?

抓SYN/SYN-ACK/ACK包分析:
1. 捕获TCP SYN包:tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
2. 过滤目标端口:and dst port 80
3. 保存后用Wireshark查看Flags字段,确认是否有SYN-ACK响应