命令简介

tcpdump 是一个命令行工具,用于捕获和分析网络中传输的数据包。它允许用户截获网络传输的 TCP/IP 和其他数据包,是一个非常有用的网络故障排查和分析工具。tcpdump 可以直接从网络接口或已保存的文件中读取数据包,并提供过滤和转储机制。它是一个强大而灵活的数据包捕获和协议分析工具。

命令格式

1
tcpdump [选项] [过滤表达式]

参数说明

参数 描述 备注
-i 网络接口 指定要捕获数据包的网络接口 默认是第一个网络接口
-n 不解析主机名,直接显示 IP 地址
-nn 禁止解析主机名和端口名称 只显示 IP 和端口号
-X 以十六进制和 ASCII 格式显示数据包内容
-XX 以十六进制和 ASCII 格式同时显示数据包头和数据
-v, -vv, -vvv 显示更多详细信息 级别越高,显示的信息越详细
-c 数量 捕获指定数量的数据包后退出
-s 长度 指定要捕获的数据包大小 默认只捕获 68 字节数据包头部
-w 文件 将捕获的数据包保存到指定文件
-r 文件 从指定文件读取数据包 用于离线分析

命令实例

基本用法

1.监视所有网络接口上的所有数据包

1
tcpdump

2.监视指定网络接口上的所有数据包

1
tcpdump -i eth0

只捕获 eth0 网络接口的数据包。

3.监视特定 IP 地址的数据包捕获特定主机的数据包

1
tcpdump host 192.168.1.100

只捕获与 IP 地址 192.168.1.100 相关的数据包。

4.查看 TCP 连接

1
tcpdump -nn tcp

显示所有的 TCP 数据包,不解析主机名和端口名。

5.查看 udp 连接

1
tcpdump -nn udp

6.查看 icmp 连接

1
tcpdump -nn icmp

7.监视特定端口的数据包

1
tcpdump port 80

8.保存捕获的数据包

1
tcpdump -w capture.pcap

将捕获的数据包保存到 capture.pcap 文件中。

9.从文件中读取数据包

1
tcpdump -r capture.pcap

高级用法

1.网络流量统计

结合 tcpdumpawk 命令,可以进行简单的网络流量统计分析。

1
2
3
4
5
# 统计每个主机的流量大小 (KB)
tcpdump -n -r capture.pcap | awk '{sum[$5]+=$16} END {for(ip in sum) {print sum[ip]/1024, ip}}'

# 统计每个端口的数据包数量
tcpdump -n -r capture.pcap | awk '{print $5, $9}' | awk -F'[.:]*' '{arr[$2">"$4]++} END {for(k in arr) {print arr[k], k}}'

2.实时网络监控

使用 tcpdump 配合其他工具,可以实现实时的网络数据包监控。

1
2
# 监控 80 端口流量,实时输出到网页
tcpdump -ln -i eth0 port 80 | ./tcpdump-websocker.py

tcpdump-websocket.py 是一个 Python 脚本,会接收 tcpdump 的数据包输出,并实时显示在网页上。

3.输出为 HTTP 请求响应格式

通过一些技巧,可以将 tcpdump 获取的 HTTP 数据包转换成标准的请求响应格式,以便于分析。

1
tcpdump -nn -A -r capture.pcap 'tcp port 80' | sed -e 's/IP/\n\IP/' -e 's/[    ]*$/\n/' | sed '/\.$/N;/IP/d'

以上命令会提取 capture.pcap 文件中的 HTTP 请求和响应数据,并格式化输出,方便分析。

总的来说,tcpdump 作为一款功能强大的数据包捕获和分析工具,在网络排错和分析中扮演着非常重要的角色,是 Linux 运维人员必须要掌握的命令之一。如果还有任何疑问,欢迎继续提问。