侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux tcpdump命令使用教程:如何捕获和分析网络流量(附实例和注意事项)

Linux tcpdump命令介绍

tcpdump是一个用于捕获和分析网络流量的命令行工具。它是网络管理员用于排除网络问题和安全测试的最常用的工具之一。使用tcpdump,你不仅可以捕获TCP协议的流量,还可以捕获非TCP协议的流量,如UDP,ARP或ICMP。捕获的数据包可以写入文件或标准输出。tcpdump命令的最强大的特性之一是它可以使用过滤器,只捕获你感兴趣的数据。¹²

Linux tcpdump命令适用的Linux版本

tcpdump在大多数Linux发行版和macOS上默认安装。要检查你的系统上是否有tcpdump命令,可以输入:

tcpdump --version

输出应该类似于这样:

tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1b 26 Feb 2019

如果你的系统上没有tcpdump,上面的命令会打印“tcpdump: command not found”。你可以使用你的系统的包管理器来轻松地安装tcpdump。

在Ubuntu,Debian和Linux Mint上安装tcpdump:

[linux@bashcommandnotfound.cn ~]$ sudo apt update && sudo apt install tcpdump

在CentOS,Fedora,AlmaLinux和Red Hat上安装tcpdump:

[linux@bashcommandnotfound.cn ~]$ sudo dnf install tcpdump

在Arch Linux和Manjaro上安装tcpdump:

[linux@bashcommandnotfound.cn ~]$ sudo pacman -S tcpdump

Linux tcpdump命令的基本语法
tcpdump命令的一般语法如下:

tcpdump [options] [expression]

命令选项可以控制命令的行为。过滤表达式定义了哪些数据包会被捕获。只有root用户或具有sudo权限的用户才能运行tcpdump。如果你以非特权用户运行命令,你会得到一个错误,说:“You don’t have permission to capture on that device”。

Linux tcpdump命令的常用选项说明

tcpdump命令有很多选项,这里只列出一些最常用的选项:

选项描述
-D列出tcpdump可以使用的网络接口
-i指定要捕获流量的网络接口
-c指定要捕获的数据包的数量
-n不解析主机名和端口号,只显示IP地址和数字
-v显示更详细的输出,可以使用-vv或-vvv来增加详细程度
-w将捕获的数据包写入文件
-r从文件中读取数据包
-q以简洁的格式显示输出
-A以ASCII码格式显示数据包的内容
-X以ASCII码和十六进制格式显示数据包的内容
-s指定要捕获的每个数据包的大小,单位是字节
-t不显示时间戳
-tt显示绝对时间戳
-ttt显示相对时间戳
-e显示以太网头部信息
-E指定加密算法和密钥来解密IPsec流量

Linux tcpdump命令的实例

下面是一些使用tcpdump命令的实例:

  • 捕获ens3接口上的所有数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3
  • 捕获ens3接口上的前10个数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 -c 10
  • 捕获ens3接口上的所有TCP数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 tcp
  • 捕获ens3接口上目标或源IP地址为192.168.1.10的数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 host 192.168.1.10
  • 捕获ens3接口上目标IP地址为192.168.1.10,源IP地址为192.168.1.20的数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 src 192.168.1.20 and dst 192.168.1.10
  • 捕获ens3接口上目标或源端口为80的数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 port 80
  • 捕获ens3接口上目标端口为80,源端口为22的数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 src port 22 and dst port 80
  • 捕获ens3接口上目标或源端口在1到1024之间的数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 portrange 1-1024
  • 捕获ens3接口上的所有ICMP数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 icmp
  • 捕获ens3接口上的所有ARP数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 arp
  • 捕获ens3接口上的所有广播数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 broadcast
  • 捕获ens3接口上的所有多播数据包:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 multicast
  • 捕获ens3接口上的所有数据包,并将它们写入文件:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 -w capture.pcap
  • 从文件中读取数据包,并显示它们的内容:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -r capture.pcap -X
  • 捕获ens3接口上的所有数据包,并以简洁的格式显示输出:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 -q
  • 捕获ens3接口上的所有数据包,并以ASCII码格式显示数据包的内容:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 -A

Linux tcpdump命令的注意事项

  • 在使用tcpdump命令时,要注意你的终端的缓冲区大小,如果捕获的数据包太多,可能会导致终端无法显示完整的输出。你可以使用-w选项将数据包写入文件,然后用-r选项从文件中读取数据包,或者使用其他工具来分析数据包,如Wireshark。
  • 在使用tcpdump命令时,要注意你的网络接口的模式,如果你的网络接口是混杂模式,那么你可以捕获所有经过该接口的数据包,包括不是发给你的数据包。如果你的网络接口是非混杂模式,那么你只能捕获发给你的数据包。你可以使用ifconfig命令来查看或设置你的网络接口的模式。
  • 在使用tcpdump命令时,要注意你的过滤表达式的逻辑,如果你的过滤表达式有多个条件,你需要使用括号来分组,否则可能会得到意想不到的结果。例如,如果你想捕获目标端口为80或443,且源端口为22的数据包,你需要使用括号来分组,否则可能会得到意想不到的结果。例如,如果你想捕获目标端口为80或443,且源端口为22的数据包,你应该使用这样的表达式:
[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 '(dst port 80 or dst port 443) and src port 22'

而不是这样的表达式:

[linux@bashcommandnotfound.cn ~]$ sudo tcpdump -i ens3 dst port 80 or dst port 443 and src port 22

因为后者的逻辑是捕获目标端口为80,或者目标端口为443且源端口为22的数据包,这可能不是你想要的结果。

  • 在使用tcpdump命令时,要注意你的网络流量的安全性,如果你捕获的数据包包含敏感信息,如密码,信用卡号等,你应该使用加密算法和密钥来保护你的数据包,或者使用-E选项来解密IPsec流量。你也应该避免将你的数据包文件分享给不可信的人或机构,以防止数据泄露。

如果你在使用tcpdump命令时遇到了“bash: tcpdump: command not found”的错误,说明你的系统上没有安装tcpdump命令,你可以根据你的系统的包管理器来安装tcpdump命令,如上文所述。

0

评论区