linux抓包工具tcpdump


tcpdump 是一个功能强大的命令行网络分析工具,它可以捕获经过网络接口的数据包,并提供详细的信息。
tcpdump抓取数据包不会中断数据的传输。它的作用类似于一个网络嗅探器,它监听网络接口上的数据包,但不会对这些数据包进行修改或干扰。

安装

  1. yum install tcpdump
  2. tcpdump --version

常见的 tcpdump 抓包实例:

  1. 捕获所有经过接口的数据包

    1. tcpdump
  2. 只捕获到达指定接口的数据包

    1. tcpdump -i eth0
  3. 根据协议过滤,例如只捕获TCP协议的数据包

    1. tcpdump -i eth0 tcp
  4. 根据源地址或目的地址过滤

    1. tcpdump -i eth0 src 192.168.1.1
    2. tcpdump -i eth0 dst 192.168.1.2
  5. 根据端口号过滤,例如只捕获端口80(HTTP)的数据包

    1. tcpdump -i eth0 port 80
  6. 使用复杂的过滤器

    1. tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x0a0b0c0d'

    这个例子中,过滤器检查TCP数据包的序列号字段。

  7. 限制捕获的数据包数量

    1. tcpdump -i eth0 -c 100

    这个命令将只捕获100个数据包。

  8. 将捕获的数据包写入文件

    1. tcpdump -i eth0 -w capture.pcap
    2. tcpdump -i eth0 -w /path/to/your/capture.pcap

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

  9. 从文件中读取数据包

    1. tcpdump -r capture.pcap
  10. 实时显示数据包的ASCII码表示

    1. tcpdump -i eth0 -x
  11. 设置数据包捕获的缓冲区大小

    1. tcpdump -i eth0 -B 100000

    这个命令设置了100000字节的缓冲区大小。

  12. 使用 tcpdump 进行网络故障排除

    1. tcpdump -i eth0 -n -vvv -s 0

    这个命令使用不解析主机名、详细模式和不截断TCP数据包的选项来捕获数据包。

  13. 捕获特定类型的数据包,例如ICMP

    1. tcpdump -i eth0 icmp
  14. 使用 tcpdump 捕获广播或多播数据包

    1. tcpdump -i eth0 broadcast
    2. tcpdump -i eth0 multicast
  15. 结合 grep 过滤输出

    1. 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(目的地址)过滤器。以下是一些示例命令:

  1. 捕获从主机 192.168.1.1 发出的所有数据包

    1. tcpdump -i any src 192.168.1.1

    这里 -i any 表示在所有网络接口上捕获数据包。

  2. 捕获发送到主机 192.168.1.1 的所有数据包

    1. tcpdump -i any dst 192.168.1.1
  3. 同时捕获从和发送到 192.168.1.1 的数据包

    1. tcpdump -i any src 192.168.1.1 or dst 192.168.1.1
  4. 捕获 192.168.1.1 主机通过指定接口发出或接收的TCP数据包

    1. tcpdump -i eth0 tcp src 192.168.1.1 or tcp dst 192.168.1.1
  5. 捕获 192.168.1.1 主机在特定端口上的TCP数据包(例如端口80):

    1. tcpdump -i eth0 tcp port 80 and (src 192.168.1.1 or dst 192.168.1.1)
  6. 限制捕获的数据包数量(例如只捕获前10个数据包):

    1. tcpdump -i any src 192.168.1.1 -c 10
  7. 将捕获的数据包写入文件

    1. tcpdump -i any src 192.168.1.1 -w capture.pcap
  8. 实时显示数据包的详细信息(不解析域名):

    1. tcpdump -i any src 192.168.1.1 -n
  9. 捕获但不立即打印数据包,而是在用户输入 Ctrl+C 后打印

    1. tcpdump -i any src 192.168.1.1 -q
  10. 捕获并实时显示数据包的十六进制和 ASCII 表示

    1. tcpdump -i any src 192.168.1.1 -x

请注意,使用 tcpdump 时,你可能需要管理员权限,因此在某些情况下,你可能需要在命令前加上 sudo

此外,any 关键字表示在所有网络接口上捕获数据包,如果你知道流量通过特定的接口,使用该接口名称(如 eth0)替换 any 可以提高性能并减少无关数据包的捕获。


local 2024年7月23日 18:06 收藏文档