蚊章汇 - tcpdump
type: channel
link: https://linuxcn.bwsl.wang/tag/tcpdump/
items: 如何在 Ubuntu 22.04 中安装和使用 Wireshark
items: 在 Linux 命令行中使用 tcpdump 抓包
items: 如何在 Linux 上使用 tcpdump 命令捕获和分析数据包
items: 通过实例学习 tcpdump 命令
items: 系统之锹sysdig：Linux服务器监控和排障利器
items: Linux 命令行下嗅探 HTTP 流量的工具：httpry
items: Linux有问必答：如何使用tcpdump来捕获TCP SYN，ACK和FIN包

如何在 Ubuntu 22.04 中安装和使用 Wireshark
type: item
date: 2023-07-05T23:48:00+08:00
description: 技术兄弟们，大家好，在这篇文章中我们将介绍如何在 Ubuntu 22.04 中安装和使用 Wireshark。Wireshark 是自由开源的、跨平台的、基于 GUI 的网络数据包分析器，可用于 Linux、Windows、MacOS、Solaris 等。它实时捕获网络数据包并以人类可读的格式呈现它们。它使我们能够监控微观层面的网络数据包。它还有一个名为 tshark 的命令行程序，它执行与 Wireshark 相同的功能，但通过终端而不是通过 GUI。Wireshark 可用于网络故障排除、分析、软件和通信协议开发，也可用于教育目的。Wireshark 使用名为 pcap 的库来捕获网络数据包。Wireshark 的功能支持检查数百种协议能够实时捕获数据包并保存它们以供以后离线分析一些用于分析数据的过滤器捕获的数据可以动态压缩和解压缩支持多种数据分析文件格式，输出也可以保存为 XML、CSV、纯文本格式可以从以太网、WiFi、蓝牙、USB、帧中继、令牌环等多种接口捕获数据先决条件预装 Ubuntu 22.04具有 sudo 权限的本地用户互联网连接Wireshark 安装步骤从 Ubuntu 仓库安装Wireshark 包可在默认的 Ubuntu 仓库中找到，并且可以使用以下命令简单地安装。但你可能无法获得最新版本的 wireshark。$ sudo apt update $ sudo apt install wireshark 选择 “Yes” 允许非超级用户使用 Wireshark 捕获数据包：安装成功后，访问 Wireshare UI。从“ 活动 Activities ”中搜索 “wireshark”，然后单击其图标。以上确认你的 Wireshark 安装已成功完成。安装最新的版本如果要安装最新版本的 Wireshark，我们必须使用以下 apt 命令启用官方 Wireshark 仓库：$ sudo add-apt-repository ppa:wireshark-dev/stable $ sudo apt update 现在，安装最新版本的 Wireshark，运行：$ sudo apt install wireshark -y 安装 Wireshark 后，验证其版本：$ wireshark --version 要允许普通用户使用 Wireshark 使用和捕获数据包，请运行以下命令：$ sudo dpkg-reconfigure wireshark-common 选择 “Yes” 并按回车键。使用 usermod 命令将本地用户添加到 wireshark 组:$ sudo usermod -aG wireshark $USER $ newgrp wireshark 要使上述更改生效，请重新启动系统。$ sudo reboot 使用 Wireshark 捕获数据包启动 Wireshark，从“活动”->搜索 “wireshark”。单击 Wireshark 图标，所有这些都是我们可以捕获网络数据包的接口。根据你系统上的界面，此页面可能会有所不同。我们选择 “enp0s3” 来捕获该接口的网络流量。选择接口后，我们网络上所有设备的网络数据包开始填充（请参阅下面的截图）：第一次看到此页面时，我们可能会被此屏幕中显示的数据淹没，并且可能会想到如何整理这些数据，但不用担心，Wireshark 的最佳功能之一就是它的过滤器。我们可以根据 IP 地址、端口号对数据进行排序/过滤，还可以使用源和目标过滤器、数据包大小等，还可以将 2 个或更多过滤器组合在一起以创建更全面的搜索。我们可以在“ 应用显示过滤器 Apply a Display Filter ”选项卡中编写过滤器，也可以选择已创建的规则之一。要选择预建过滤器，请单击“旗帜”图标，然后点击“应用显示过滤器”选项卡。我们还可以根据颜色代码来过滤数据，默认情况下，浅紫色是 TCP 流量，浅蓝色是 UDP 流量，黑色标识有错误的数据包，要查看这些代码的含义，请单击“ 查看 View ”->“ 颜色规则 Coloring Rules ”，我们也可以更改这些代码。获得所需的结果后，我们可以单击任何捕获的数据包以获取有关该数据包的更多详细信息，这将显示有关该网络数据包的所有数据。要停止捕获数据包，请单击红色停止按钮，然后将捕获的数据包保存到文件中。总结Wireshark 是一款非常强大的工具，需要一些时间来适应和掌握它，这篇文章将帮助你开始使用。请随时在下面的评论栏中提出你的疑问或建议。（题图：MJ/63c09e75-a3e7-4dbf-ac6f-0233bdd34ad8）via: https://www.linuxtechi.com/install-use-wireshark-ub…

在 Linux 命令行中使用 tcpdump 抓包
type: item
date: 2018-11-04T08:20:35+08:00
description: tcpdump 是一款灵活、功能强大的抓包工具，能有效地帮助排查网络故障问题。以我作为管理员的经验，在网络连接中经常遇到十分难以排查的故障问题。对于这类情况，tcpdump 便能派上用场。tcpdump 是一个命令行实用工具，允许你抓取和分析经过系统的流量数据包。它通常被用作于网络故障分析工具以及安全工具。tcpdump 是一款强大的工具，支持多种选项和过滤规则，适用场景十分广泛。由于它是命令行工具，因此适用于在远程服务器或者没有图形界面的设备中收集数据包以便于事后分析。它可以在后台启动，也可以用 cron 等定时工具创建定时任务启用它。本文中，我们将讨论 tcpdump 最常用的一些功能。1、在 Linux 中安装 tcpdumptcpdump 支持多种 Linux 发行版，所以你的系统中很有可能已经安装了它。用下面的命令检查一下是否已经安装了 tcpdump：$ which tcpdump /usr/sbin/tcpdump如果还没有安装 tcpdump，你可以用软件包管理器安装它。 例如，在 CentOS 或者 Red Hat Enterprise 系统中，用如下命令安装 tcpdump：$ sudo yum install -y tcpdumptcpdump 依赖于 libpcap，该库文件用于捕获网络数据包。如果该库文件也没有安装，系统会根据依赖关系自动安装它。现在你可以开始抓包了。2、用 tcpdump 抓包使用 tcpdump 抓包，需要管理员权限，因此下面的示例中绝大多数命令都是以 sudo 开头。首先，先用 tcpdump -D 命令列出可以抓包的网络接口：$ sudo tcpdump -D 1.eth0 2.virbr0 3.eth1 4.any (Pseudo-device that captures on all interfaces) 5.lo [Loopback]如上所示，可以看到我的机器中所有可以抓包的网络接口。其中特殊接口 any 可用于抓取所有活动的网络接口的数据包。我们就用如下命令先对 any 接口进行抓包：$ sudo tcpdump -i any tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196 09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0 09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43) 09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102) 09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44) 09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103) 09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44) 09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], lengt…

如何在 Linux 上使用 tcpdump 命令捕获和分析数据包
type: item
date: 2018-09-26T17:54:19+08:00
description: tcpdump 是一个有名的命令行数据包分析工具。我们可以使用 tcpdump 命令捕获实时 TCP/IP 数据包，这些数据包也可以保存到文件中。之后这些捕获的数据包可以通过 tcpdump 命令进行分析。tcpdump 命令在网络层面进行故障排除时变得非常方便。tcpdump 在大多数 Linux 发行版中都能用，对于基于 Debian 的Linux，可以使用 apt 命令安装它。# apt install tcpdump -y在基于 RPM 的 Linux 操作系统上，可以使用下面的 yum 命令安装 tcpdump。# yum install tcpdump -y当我们在没用任何选项的情况下运行 tcpdump 命令时，它将捕获所有接口的数据包。因此，要停止或取消 tcpdump 命令，请键入 ctrl+c。在本教程中，我们将使用不同的实例来讨论如何捕获和分析数据包。示例：1）从特定接口捕获数据包当我们在没用任何选项的情况下运行 tcpdump 命令时，它将捕获所有接口上的数据包，因此，要从特定接口捕获数据包，请使用选项 -i，后跟接口名称。语法：# tcpdump -i {接口名}假设我想从接口 enp0s3 捕获数据包。输出将如下所示，tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes 06:43:22.905890 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952160:21952540, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 380 06:43:22.906045 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952540:21952760, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220 06:43:22.906150 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952760:21952980, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220 06:43:22.906291 IP 169.144.0.1.39374 > compute-0-1.example.com.ssh: Flags [.], ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 0 06:43:22.906303 IP 169.144.0.1.39374 > compute-0-1.example.com.ssh: Flags [P.], seq 13537:13609, ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 72 06:43:22.906322 IP compute-0-1.example.com.ssh > 169.144.0.1.39374: Flags [P.], seq 21952980:21953200, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220 ^C 109930 packets captured 110065 packets received by filter 133 packets dropped by kernel [[email protected] ~]# 示例：2）从特定接口捕获特定数量数据包假设我们想从特定接口（如 enp0s3）捕获 12 个数据包，这可以使用选项 -c {数量} -I {接口名称} 轻松实现。root@compute-0-1 ~]# tcpdump -c 12 -i enp0s3上面的命令将生成如下所示的输出，…

通过实例学习 tcpdump 命令
type: item
date: 2018-01-07T17:28:34+08:00
description: tcpdump 是一个很常用的网络包分析工具，可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报，这个库在几乎在所有的 Linux/Unix 中都有。tcpdump 可以从网卡或之前创建的数据包文件中读取内容，也可以将包写入文件中以供后续使用。必须是 root 用户或者使用 sudo 特权来运行 tcpdump。在本文中，我们将会通过一些实例来演示如何使用 tcpdump 命令，但首先让我们来看看在各种 Linux 操作系统中是如何安装 tcpdump 的。推荐阅读：使用 iftop 命令监控网络带宽安装tcpdump 默认在几乎所有的 Linux 发行版中都可用，但若你的 Linux 上没有的话，使用下面方法进行安装。CentOS/RHEL使用下面命令在 CentOS 和 RHEL 上安装 tcpdump，$ sudo yum install tcpdump* Fedora使用下面命令在 Fedora 上安装 tcpdump：$ dnf install tcpdump Ubuntu/Debian/Linux Mint在 Ubuntu/Debain/Linux Mint 上使用下面命令安装 tcpdump：$ apt-get install tcpdump 安装好 tcpdump 后，现在来看一些例子。案例演示从所有网卡中捕获数据包运行下面命令来从所有网卡中捕获数据包：$ tcpdump -i any 从指定网卡中捕获数据包要从指定网卡中捕获数据包，运行：$ tcpdump -i eth0 将捕获的包写入文件使用 -w 选项将所有捕获的包写入文件：$ tcpdump -i eth1 -w packets_file 读取之前产生的 tcpdump 文件使用下面命令从之前创建的 tcpdump 文件中读取内容：$ tcpdump -r packets_file 获取更多的包信息，并且以可读的形式显示时间戳要获取更多的包信息同时以可读的形式显示时间戳，使用：$ tcpdump -ttttnnvvS 查看整个网络的数据包要获取整个网络的数据包，在终端执行下面命令：$ tcpdump net 192.168.1.0/24 根据 IP 地址查看报文要获取指定 IP 的数据包，不管是作为源地址还是目的地址，使用下面命令：$ tcpdump host 192.168.1.100 要指定 IP 地址是源地址或是目的地址则使用：$ tcpdump src 192.168.1.100 $ tcpdump dst 192.168.1.100 查看某个协议或端口号的数据包要查看某个协议的数据包，运行下面命令：$ tcpdump ssh 要捕获某个端口或一个范围的数据包，使用：$ tcpdump port 22 $ tcpdump portrange 22-125 我们也可以与 src 和 dst 选项连用来捕获指定源端口或指定目的端口的报文。我们还可以使用“与” （and，&&）、“或” （or，|| ) 和“非”（not，!） 来将两个条件组合起来。当我们需要基于某些条件来分析网络报文是非常有用。使用“与”可以使用 and 或者符号 && 来将两个或多个条件组合起来。比如：$ tcpdump src 192.168.1.100 && port 22 -w ssh_packets 使用“或”“或”会检查是否匹配命令所列条件中的其中一条，像这样：$ tcpdump src 192.168.1.100 or dst 192.168.1.50 && port 22 -w ssh_packets $ tcpdump port 443 or 80 -w http_packets 使用“非”当我们想表达不匹配某项条件时可以使用“非”，像这样：$ tcpdump -i eth0 src port not 22 这会捕获 eth0 上除了 22 号端口的所有通讯。我们的教程至此就结束了，在本教程中我们讲解了如何安装并使用 tcpdump 来捕获网络数据包。如有任何疑问或建议，欢迎留言。via: http://linuxtechlab.com/learn-use-tcpdump-command-examples/作者：Shusain 译者：lujun9972 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

系统之锹sysdig：Linux服务器监控和排障利器
type: item
date: 2014-12-01T05:31:09+08:00
description: 当你需要追踪某个进程产生和接收的系统调用时，首先浮现在你脑海中的是什么？你可能会想到strace，那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢？如果你想到了tcpdump，你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件（在Unix意义上：一切皆文件）的需求，可能你会使用lsof。strace、tcpdump以及lsof，确实是些伟大的工具，它们应该成为每个系统管理员工具集之中的一部分，而这也正是你为什么应该爱上sysdig的原因。它是一个强大的开源工具，用于系统级别的勘察和排障，它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”。抛开幽默不说，sysdig的最棒特性之一在于，它不仅能分析Linux系统的“现场”状态，也能将该状态保存为转储文件以供离线检查。更重要的是，你可以自定义sysdig的行为，或者甚至通过内建的（你也可以自己编写）名为凿子（chisel）的小脚本增强其功能。单独的凿子可以以脚本指定的各种风格分析sysdig捕获的事件流。在本教程中，我们将探索sysdig的安装及其基本用法，在Linux上实施系统监控和排障。安装Sysdig对于本教程，由于为了简便、缩短安装流程以及版本的不可知，我们将选择使用官方网站提供的自动化安装过程。在自动化过程中，安装脚本会自动检测操作系统并安装必需的依赖包。以root身份运行以下命令来从官方apt/yum仓库安装sysdig：# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash 安装完成后，我们可以通过以下方法调用sysdig来感受一下它：# sysdig 我们的屏幕将马上被系统上发生的所有事件填满，对于这些信息，不便于我们做更多操作。要进一步处理，我们可以运行：# sysdig -cl | less 来查看可用的凿子列表。默认有以下类目可用，各个类目中分布有多个内建的凿子。CPU Usage：CPU使用量Errors：错误I/OLogs：日志Misc：混杂Net：网络Performance：性能Security：安全System State：系统状态要显示指定凿子上的信息（包括详细的命令行用法），运行以下命令：# sysdig -cl [凿子名称] 例如，我们可以检查“网络”类目下关于spy\_port凿子的信息：# sysdig -i spy_port 凿子可以通过过滤器（可同时应用于实时数据和记录文件）组合，以获取更多有用的输出。过滤器遵从“类.字段”结构。例如：fd.cip：客户端IP地址。evt.dir：事件方向，可以是‘>’用于进入事件，或‘<’用于退出事件。完整的过滤器列表可以通过以下命令显示：# sysdig -l 在本教程剩余部分，我将演示几个sysdig的使用案例。Sysdig实例： 服务器性能排障假定你的服务器发生了性能问题（如，没有回应，或者重大的回应延迟）。你可以使用瓶颈凿子来显示当前10个最慢系统调用的列表。使用以下命令在存活服务器上进行实时检查。“-c”标识，后跟凿子名称告诉sysdig运行指定的凿子。# sysdig -c bottlenecks 或者，你可以离线对服务器实施性能分析。在此种情况下，你可以保存完整的sysdig记录到文件，然后像下面这样针对记录运行瓶颈凿子。首先，保存sysdige记录（使用Ctrl+c来停止收集）：# sysdig -w trace.scap 收集完记录后，你可以运行以下命令来检查捕获间隔中最慢的系统调用：# sysdig -r trace.scap -c bottlenecks 你需要关注栏#2，#3和#4，这些分别表示执行时间、进程名和PID。Sysdig实例： 监控交互用户活动假定你作为系统管理员想要监控系统中交互的用户活动（如，用户在命令行输入了什么命令，以及用户去了什么目录），这时spy\_user凿子就派上用场了。让我们首先通过一些额外选项来收集一个sysdig记录。# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz “-s 4096”告诉sysdig每个事件捕获4096字节。“-z” （与“-w”一起使用）为记录文件启用压缩。“-w ”保存sysdig记录到指定的文件。在上面的例子中，我们自定义了基于每个主机的压缩的记录文件的名称。记住，你可以在任何时候按下Ctrl+c来打断sysdig的执行。在我们收集到了合理数量的数据后，我们可以通过运行以下命令来查看每个用户的交互活动：# sysdig -r /mnt/sysdig/debian.scap.gz -c s…

Linux 命令行下嗅探 HTTP 流量的工具：httpry
type: item
date: 2014-11-03T02:04:00+08:00
description: 假设由于某种原因，你需要嗅探HTTP站点的流量（如HTTP请求与响应）。举个例子，你可能在测试一个web服务器的实验性功能，或者你在为某个web应用或RESTful服务排错，又或者你正在为PAC(proxy auto config)排错或寻找某个站点下载的恶意软件。不论什么原因，在这些情况下，进行HTTP流量嗅探对于系统管理、开发者、甚至最终用户来说都是很有帮助的。数据包嗅工具tcpdump被广泛用于实时数据包的导出，但是你需要设置过滤规则来捕获HTTP流量，甚至它的原始输出通常不能方便的停在HTTP协议层。实时web服务器日志解析器如ngxtop可以提供可读的实时web流量跟踪痕迹，但这仅适用于可完全访问live web服务器日志的情况。要是有一个仅用于抓取HTTP流量的类似tcpdump的数据包嗅探工具就非常好了。事实上，httpry就是:HTTP包嗅探工具。httpry捕获HTTP数据包，并且将HTTP协议层的数据内容以可读形式列举出来。通过这篇指文章，让我们了解如何使用httpry工具嗅探HTTP流量。在Linux上安装httpry基于Debian系统（Ubuntu 或 LinuxMint），基础仓库中没有httpry安装包(译者注：本人ubuntu14.04,仓库中已有包，可直接安装)。所以我们需要通过源码安装:$ sudo apt-get install gcc make git libpcap0.8-dev $ git clone https://github.com/jbittel/httpry.git $ cd httpry $ make $ sudo make install 在Fedora，CentOS 或 RHEL系统，可以使用如下yum命令安装httpry。在CentOS/RHEL系统上，运行yum之前使其能够访问EPEL repo。$ sudo yum install httpry 如果你仍想通过基于RPM系统的源码来安装httpry的话，你可以通过这几个步骤实现：$ sudo yum install gcc make git libpcap-devel $ git clone https://github.com/jbittel/httpry.git $ cd httpry $ make $ sudo make install httpry的基本用法以下是httpry的基本用法$ sudo httpry -i <network-interface> httpry就会监听指定的网络接口，并且实时的显示捕获到的HTTP请求/相应。在大多数情况下，由于发送与接到的数据包过多导致刷屏很快，难以分析。这时候你肯定想将捕获到的数据包保存下来以便离线分析。可以使用'b'或'-o'选项保存数据包。'-b'选项将数据包以二进制文件的形式保存下来，这样可以使用httpry软件打开文件以浏览。另一方面，'-o'选项将数据以可读的字符文件形式保存下来。以二进制形式保存文件：$ sudo httpry -i eth0 -b output.dump 浏览所保存的HTTP数据包文件：$ httpry -r output.dump 注意，不需要根用户权限就可以使用'-r'选项读取数据文件。将httpry数据以字符文件保存：$ sudo httpry -i eth0 -o output.txt httpry 的高级应用如果你想监视指定的HTTP方法（如：GET，POST，PUT，HEAD，CONNECT等），使用'-m'选项：$ sudo httpry -i eth0 -m get,head 如果你下载了httpry的源码，你会发现源码下有一些Perl脚本，这些脚本用于分析httpry输出。脚本位于目录httpry/scripts/plugins。如果你想写一个定制的httpry输出分析器，则这些脚可以作为很好的例子。其中一些有如下的功能：hostnames: 显示唯一主机名列表。find\_proxies: 探测web代理。search\_terms: 查找及统计在搜索服务里面的搜索词。content\_analysis: 查找含有指定关键的URL。xml\_output: 将输出转换为XML形式。log\_summary: 生成日志汇总。db\_dump: 将日志文件数据保存数据库。在使用这些脚本之前，首先使用'-o'选项运行httpry。当获取到输出文件后，立即使用如下命令执行脚本：$ cd httpry/scripts $ perl parse_log.pl -d ./plugins <httpry-output-file> 你可能在使用插件的时候遇到警告。比如，如果你没有安装带有DBI接口的MySQL数据库，那么使用db…

Linux有问必答：如何使用tcpdump来捕获TCP SYN，ACK和FIN包
type: item
date: 2014-10-08T15:26:00+08:00
description: 问题：我想要监控TCP连接活动（如，建立连接的三次握手，以及断开连接的四次握手）。要完成此事，我只需要捕获TCP控制包，如SYN，ACK或FIN标记相关的包。我怎样使用tcpdump来仅仅捕获TCP SYN，ACK和/或FYN包？作为业界标准的捕获工具，tcpdump提供了强大而又灵活的包过滤功能。作为tcpdump基础的libpcap包捕获引擎支持标准的包过滤规则，如基于5重包头的过滤（如基于源/目的IP地址/端口和IP协议类型）。tcpdump/libpcap的包过滤规则也支持更多通用分组表达式，在这些表达式中，包中的任意字节范围都可以使用关系或二进制操作符进行检查。对于字节范围表达，你可以使用以下格式：proto [ expr : size ] “proto”可以是熟知的协议之一（如ip，arp，tcp，udp，icmp，ipv6），“expr”表示与指定的协议头开头相关的字节偏移量。有我们熟知的直接偏移量如tcpflags，也有取值常量如tcp-syn，tcp-ack或者tcp-fin。“size”是可选的，表示从字节偏移量开始检查的字节数量。使用这种格式，你可以像下面这样过滤TCP SYN，ACK或FIN包。只捕获TCP SYN包： # tcpdump -i <interface> "tcp[tcpflags] & (tcp-syn) != 0" 只捕获TCP ACK包：# tcpdump -i <interface> "tcp[tcpflags] & (tcp-ack) != 0" 只捕获TCP FIN包：# tcpdump -i <interface> "tcp[tcpflags] & (tcp-fin) != 0" 之捕获TCP SYN或ACK包： # tcpdump -r <interface> "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" via: http://ask.xmodulo.com/capture-tcp-syn-ack-fin-packets-tcpdump.html译者：GOLinux 校对：wxy本文由 LCTT 原创翻译，Linux中国 荣誉推出