安装TCPDump
在Ubuntu,Debian和Linux Mint上安装TCPDump:
$sudo apt install tcpdump
在CentOS,Fedora,Almalinux和Red Hat中安装TCPDump:
$sudo dnf install tcpdump
在Arch Linux和Manjaro上安装TCPDump:
$sudo pacman -S tcpdump
TCPDUMP命令输出解释
每个数据包tcpdump
捕获被写为单独的行。
格式看起来这样:
14:21:46.134249 IP 10.0.2.15.54000 > 104.16.168.35.443: Flags [.], ack 2915, win 63000, length 0
解释:
14:21:46.134249
- 捕获数据包时的时间戳。IP 10.0.2.15.54000
- IP和源主机的端口号。104.16.168.35.443
- 目的主机的IP和端口号。flags [。]
- TCP标志(SYN,ACK,PSH等)。[。]
意味着ACK。ACK 2915
- 确认号码。win 63000
- 窗口号(接收缓冲区中的字节)。length 0
- 有效载荷数据的长度。
tcpdump
命令可用于捕获Linux系统上的网络流量。
它是一个多功能的命令行实用程序,网络管理员经常依赖它进行故障排除。
过滤TCPDUMP流量
“tcpdump”最有用的功能之一是我们可以准确地过滤掉我们想要看到的流量。
例如,使用以下语法过滤出使用UDP的流量。
# tcpdump -n udp
或者以下示例过滤icmp:
# tcpdump -n icmp
我们还可以使用相应的协议号码过滤掉特定协议。
例如,ICMP是协议编号1,因此以下语法等同于前一个示例。
# tcpdump -n proto 1
要使用特定目的地或者源IP地址过滤流量,我们可以使用“-N”选项,后面跟着主机。
例如,过滤与IP地址为10.10.150.20
的主机的相关流量:
# tcpdump -n host 10.10.150.20
过滤某个子网相关的流量。
# tcpdump -n net 192.168.1
过滤和端口相关的流量:
# tcpdump -n port 80
过滤端口范围相关的流量:
# tcpdump -n portrange 20-30
根据数据包的源和/或者目标地址或者端口过滤:
# tcpdump -n src host 10.10.150.20
可以使用dst
, src
, src and dst
, 以及 src or dst
等限定词。
例如过滤发往SSH端口的数据包:
# tcpdump -n dst port 22
组合过滤器
可以使用and
( &&
), or
( ||
), 以及 not
( !
)来组合上面的各种过滤器。
例如,以下命令将捕获到“10.10.150.20”的端口80(HTTP)上的流量。
# tcpdump -n dst host 10.10.150.20 and tcp port 80
同时捕获https流量:
# tcpdump -n 'dst host 10.10.150.20 and (tcp port 80 or tcp port 443)'
tcpdump命令示例
所有
tcpdump
命令需要管理员权限,必须使用root用户帐户或者使用sudo
执行。
最简单的命令形式是不带参数,如下所示:
# tcpdump
如果您没有指定要从哪个网络接口捕获流量(如上面的命令),则“tcpdump”将为您选择一个接口。
它将继续将捕获的流量“转储”到您的终端,直到您中断该命令。最简单的方法是使用“Ctrl+c”。
如果您有多个网络接口,那么最好指定您试图捕获流量的接口,因为默认情况下,tcpdump
可能不会选择您想要的接口。
使用“-D”选项打印“tcpdump”可以使用的网络接口列表。
# tcpdump -D 1.enp0s3 [Up, Running] 2.lo [Up, Running, Loopback] 3.any (Pseudo-device that captures on all interfaces) [Up, Running] 4.bluetooth-monitor (Bluetooth Linux Monitor) [none] 5.nflog (Linux netfilter log (NFLOG) interface) [none] 6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
捕获指定端口上的网络流量:
# tcpdump -i enp0s3
使用第三个“any”选项,可以让我们同时捕获所有网络接口上的流量。
我们可以使用“-V”选项来增加输出的详细程度,或者“-VV”和“-VVV”以进一步增加详细程度。
# tcpdump -i enp0s3 -vv
如果我们不希望“TCPDump”(TCPDump)一直输出数据,则可以使用“-C”选项来指定我们希望捕获该实用程序的数据包数。
例如,只捕获前15个数据包。
# tcpdump -c 15
如果不想执行DNS解析,则可以使用命令中的“-n”选项。
这将在网络地址列显示IP地址,而不是将它们解析为域名。
# tcpdump -n
将捕获输出结果保存到文件中:
# tcpdump > traffic.txt
另一个选项是将网络捕获写入文件。这些文件通常具有“.pcap”文件扩展名,普通文本编辑器无法读取。
# tcpdump -n -w traffic.pcap
要打开文件以供以后分析,使用“-r”选项。
# tcpdump -r traffic.pcap