Linux下抓包命令tcpdump详解

tcpdump是一个命令行实用程序,可用于捕获和检查进出系统的网络流量。 它是网络管理员中用于排除网络问题和安全测试的最常用工具。

尽管名称如此,使用tcpdump,您也可以捕获非TCP流量,例如UDP,ARP或ICMP。 捕获的数据包可以写入文件或标准输出。 tcpdump命令最强大的功能之一是它能够使用过滤器并仅捕获要分析的数据。

在本文中,我们将介绍如何在Linux中使用tcpdump命令的基础知识。

Linux下抓包命令tcpdump详解

安装tcpdump

在大多数Linux发行版和macOS上默认安装了tcpdump。 要检查tcpdump命令在您的系统上是否可用:

[linuxidc@linux:~/www.linuxidc.com]$ tcpdump --version

输出应如下所示:

tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018

Linux下抓包命令tcpdump详解

如果您的系统上没有tcpdump,则上面的命令将显示“ 没有那个文件或目录”。 您可以使用发行版的软件包管理器轻松安装tcpdump。

[linuxidc@linux:~/www.linuxidc.com]$ tcpdump --version
bash: /usr/sbin/tcpdump: 没有那个文件或目录

Linux下抓包命令tcpdump详解

Ubuntu和Debian上安装tcpdump

$sudo apt update && sudo apt install tcpdump

CentOSFedora上安装tcpdump

$sudo yum install tcpdump

在Arch Linux上安装tcpdump

$sudo pacman -S tcpdump

使用tcpdump捕获数据包

tcpdump命令的常规语法如下:

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

命令选项使您可以控制命令的行为。

过滤器表达式定义将捕获哪些数据包。

只有root或具有sudo特权的用户才能运行tcpdump。 如果您尝试以非特权用户身份运行该命令,则会收到一条错误消息:“您无权在该设备上进行捕获”。

tcpdump: ens33: You don't have permission to capture on that device
(socket: Operation not permitted)

Linux下抓包命令tcpdump详解

最简单的用例是不带任何选项和过滤器的情况下调用tcpdump:

[linuxidc@linux:~/www.linuxidc.com]$ sudo tcpdump

输出如下:

[sudo] linuxidc 的密码:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

Linux下抓包命令tcpdump详解

tcpdump将继续捕获数据包并写入标准输出,直到接收到中断信号为止。 使用Ctrl + C组合键发送中断信号并停止命令。

要获得更详细的输出,请传递-v选项,或传递-vv以获得更详细的输出:

[linuxidc@linux:~/www.linuxidc.com]$ sudo tcpdump -vv

您可以使用-c选项指定要捕获的数据包数量。 例如,要仅捕获5个数据包,请输入:

[linuxidc@linux:~/www.linuxidc.com]$ sudo tcpdump -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:08:14.575216 IP linux.42082 > 180.101.49.12.https: Flags [.], ack 470550152, win 30016, length 0
21:08:14.577139 IP 180.101.49.12.https > linux.42082: Flags [.], ack 1, win 64240, length 0
21:08:14.578127 IP linux.37565 > _gateway.domain: 52885+ [1au] PTR? 12.49.101.180.in-addr.arpa. (55)
21:08:14.583548 IP _gateway.domain > linux.37565: 52885 NXDomain 0/1/1 (114)
21:08:14.585411 IP linux.37565 > _gateway.domain: 52885+ PTR? 12.49.101.180.in-addr.arpa. (44)
5 packets captured
14 packets received by filter
5 packets dropped by kernel

Linux下抓包命令tcpdump详解

捕获数据包后,tcpdump将停止。

如果未指定任何接口,则tcpdump使用它找到的第一个接口并转储通过该接口的所有数据包。

使用-D选项可以打印tcpdump可以从中收集数据包的所有可用网络接口的列表:

[linuxidc@linux:~/www.linuxidc.com]$ sudo tcpdump -D

对于每个接口,该命令将打印接口名称,简短描述以及关联的索引(数字):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11571.html