tcpdump
是一个功能强大的命令行网络分析工具,它可以捕获经过网络接口的数据包,并提供详细的信息。
tcpdump抓取数据包不会中断数据的传输。它的作用类似于一个网络嗅探器,它监听网络接口上的数据包,但不会对这些数据包进行修改或干扰。
安装
yum install tcpdump
tcpdump --version
常见的 tcpdump
抓包实例:
捕获所有经过接口的数据包:
tcpdump
只捕获到达指定接口的数据包:
tcpdump -i eth0
根据协议过滤,例如只捕获TCP协议的数据包:
tcpdump -i eth0 tcp
根据源地址或目的地址过滤:
tcpdump -i eth0 src 192.168.1.1
tcpdump -i eth0 dst 192.168.1.2
根据端口号过滤,例如只捕获端口80(HTTP)的数据包:
tcpdump -i eth0 port 80
使用复杂的过滤器:
tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x0a0b0c0d'
这个例子中,过滤器检查TCP数据包的序列号字段。
限制捕获的数据包数量:
tcpdump -i eth0 -c 100
这个命令将只捕获100个数据包。
将捕获的数据包写入文件:
tcpdump -i eth0 -w capture.pcap
tcpdump -i eth0 -w /path/to/your/capture.pcap
捕获的数据包将被保存到
capture.pcap
文件中。从文件中读取数据包:
tcpdump -r capture.pcap
实时显示数据包的ASCII码表示:
tcpdump -i eth0 -x
设置数据包捕获的缓冲区大小:
tcpdump -i eth0 -B 100000
这个命令设置了100000字节的缓冲区大小。
使用
tcpdump
进行网络故障排除:tcpdump -i eth0 -n -vvv -s 0
这个命令使用不解析主机名、详细模式和不截断TCP数据包的选项来捕获数据包。
捕获特定类型的数据包,例如ICMP:
tcpdump -i eth0 icmp
使用
tcpdump
捕获广播或多播数据包:tcpdump -i eth0 broadcast
tcpdump -i eth0 multicast
结合
grep
过滤输出:tcpdump -i eth0 and port 80 | grep 'HTTP'
这个命令捕获所有到达端口80的数据包,并使用
grep
过滤出包含 ‘HTTP’ 字符串的数据包。
这些只是 tcpdump
的一些基本用法。由于 tcpdump
支持强大的过滤表达式和选项,你可以根据自己的需求进行各种复杂的数据包捕获和分析。
tcpdump抓取指定主机的数据包
抓取主机192.168.1.1相关的数据包
要使用 tcpdump
抓取与特定主机(例如 IP 地址为 192.168.1.1
)相关的数据包,你可以使用 src
(源地址)和 dst
(目的地址)过滤器。以下是一些示例命令:
捕获从主机
192.168.1.1
发出的所有数据包:tcpdump -i any src 192.168.1.1
这里
-i any
表示在所有网络接口上捕获数据包。捕获发送到主机
192.168.1.1
的所有数据包:tcpdump -i any dst 192.168.1.1
同时捕获从和发送到
192.168.1.1
的数据包:tcpdump -i any src 192.168.1.1 or dst 192.168.1.1
捕获
192.168.1.1
主机通过指定接口发出或接收的TCP数据包:tcpdump -i eth0 tcp src 192.168.1.1 or tcp dst 192.168.1.1
捕获
192.168.1.1
主机在特定端口上的TCP数据包(例如端口80):tcpdump -i eth0 tcp port 80 and (src 192.168.1.1 or dst 192.168.1.1)
限制捕获的数据包数量(例如只捕获前10个数据包):
tcpdump -i any src 192.168.1.1 -c 10
将捕获的数据包写入文件:
tcpdump -i any src 192.168.1.1 -w capture.pcap
实时显示数据包的详细信息(不解析域名):
tcpdump -i any src 192.168.1.1 -n
捕获但不立即打印数据包,而是在用户输入 Ctrl+C 后打印:
tcpdump -i any src 192.168.1.1 -q
捕获并实时显示数据包的十六进制和 ASCII 表示:
tcpdump -i any src 192.168.1.1 -x
请注意,使用 tcpdump
时,你可能需要管理员权限,因此在某些情况下,你可能需要在命令前加上 sudo
。
此外,any
关键字表示在所有网络接口上捕获数据包,如果你知道流量通过特定的接口,使用该接口名称(如 eth0
)替换 any
可以提高性能并减少无关数据包的捕获。