欢迎来到皮皮网网首页

【直播迷网站源码】【jpa注解源码解析】【boll指标源码版本】linux tcpdump源码

来源:开源娱乐源码 时间:2024-12-24 01:45:21

1.Linux服务器抓包工具tcpdump示例详解
2.tcpdump 安装和使用 Linux-Ubuntu
3.在linux下tcpdump的源码安装方式有哪些呢?
4.详细讲解Linux内核角度分析tcpdump原理(1)
5.运维必备——Linux 服务器抓包工具 tcpdump 示例详解
6.Linux系统 tcpdump 抓包命令使用教程

linux tcpdump源码

Linux服务器抓包工具tcpdump示例详解

       Linux服务器上的网络分析利器:tcpdump详解

       当您需要深入探究网络流量时,Linux服务器上的源码tcpdump工具是不可或缺的。本文将详细介绍如何在Linux系统上安装和使用tcpdump,源码以及它的源码基本功能和示例操作。

       tcpdump是源码一个强大的网络监控命令行工具,它能过滤并提供关于TCP/IP网络数据包的源码直播迷网站源码详细信息。作为服务器管理员,源码你可以利用它进行故障排查和安全监控,源码甚至将其与cron任务结合以自动化任务执行。源码

       安装tcpdump的源码方法相对简单。通常,源码它已预装在大多数Linux发行版中,源码如Ubuntu。源码在没有的源码情况下,可以通过包管理器轻松获取,源码如在Debian系的系统上使用apt-get,而在基于Arch的系统上则使用pacman。

       使用tcpdump的实际操作包括监控网络接口、限制捕获的数据包数量、根据特定条件过滤数据,如指定端口、主机名或IP地址。例如,你可以通过命令如`sudo tcpdump -i any -c 3`来捕获3个数据包,或者使用`sudo tcpdump 'src ... and port '`来过滤特定主机和端口的数据。

       获取到网络数据包后,tcpdump还支持查看包内容,以ASCII或十六进制格式,以及将捕获数据保存至文件进行后续分析。使用`-A`或`-x`标志可以查看数据包内容,而`-w`标志则用于保存数据包到.pcap文件。

       总之,tcpdump是Linux服务器监控网络流量的得力助手。掌握它的使用将大大提高网络问题的解决效率。若想深入学习,这里有一系列的云计算Linux教程供您参考,点击获取更多资源和帮助。

tcpdump 安装和使用 Linux-Ubuntu

       在Linux-Ubuntu中安装和使用TCPDump的指南

       首先,安装TCPDump:

       sudo apt install tcpdump

       然后,使用tcpdump -D命令查看可捕获的接口:

       特殊接口any允许在任何活动接口上捕获。

       接下来,使用以下命令开始捕获一些数据包:

       你将看到TCPDump捕获了超过7个数据包。

       为了限制捕获的数据包数量并停止TCPDump,使用-c(计数)选项:

       现在你知道了-i和-c的含义。

       默认情况下,TCPDump会将IP地址和端口解析为名称,如前例所示。在故障排除网络问题时,使用IP地址和端口号往往更简单;通过使用-n选项禁用名称解析,并使用-nn选项进行端口解析:

       如上所示,捕获输出现在显示了IP地址和端口号。这也有助于防止TCPDump执行DNS查找,从而在故障排除网络问题时降低网络流量。

       现在你已经能够捕获网络数据包了,让我们探索一下这些输出的含义。

       理解输出格式

       TCPDump能够捕获和解码许多不同协议,如TCP、jpa注解源码解析UDP、ICMP、ARP等。

       更多关于不同协议格式的细节可以在TCPDump的手册页面中找到。

       捕获的TCP数据包通常如下所示:

       第一个字段::.表示接收的包的本地时钟时间戳。

       接下来,IP代表网络层协议,在本例中为IPv4。

       下一个字段....表示源IP地址和端口。

       这是被表示为...1.的目的地IP地址和端口。

       在源和目的地之后,你可以找到数据包中的TCP标志。典型值包括:

       此字段也可以是这些值的组合,例如S.表示SYN-ACK数据包。

       接下来是数据包含在包中的序列号。对于捕获的第一个包,这是绝对数字。后续包使用相对数字,使跟踪更容易。在本例中,序列是seq :,这意味着此包包含此流中的至字节的数据。

       随后是确认号:ack 1。在这种情况下,它是1,因为这是发送数据的一方。对于接收数据的一方,此字段表示此流量中的下一个预期字(数据)。例如,此流量中的下个包的确认号将是。

       接下来是窗口大小win ,表示接收缓冲区中的可用字节数,后跟MSS(最大段大小)或Window Scale等TCP选项。

       最后,我们有包长度length ,表示Payload数据的字节数。长度是序列号中最后和第一个字节之间的差异。

       现在让我们学习如何过滤数据包以缩小结果范围并更轻松地解决特定问题。

       过滤数据包

       如上所述,TCPDump可能捕获太多包,其中一些与你正在故障排除的问题无关。例如,如果你正在故障排除与你未参与的web服务器相关的连接性问题,从输出中删除SSH流量使得更容易解决真正的问题。

       TCPDump的一个最强大的特性之一是能够使用多种参数过滤捕获的数据包,如源和目标IP地址、端口、协议等。让我们看看一些最常见的。

       根据协议过滤数据包,通过在命令行中指定协议。例如,只捕获ICMP数据包的命令如下:

       在另一个终端中尝试ping另一台机器:

       回到TCPDump捕获中,注意TCPDump只捕获和显示ICMP相关的数据包。在这种情况下,TCPDump不显示生成的boll指标源码版本名称解析数据包,例如zhihu.com:

       限制捕获仅包含特定主机的包,使用host过滤器:

       在本例中,TCPDump捕获和显示仅到和来自主机...的包。

       根据所需的服务或端口过滤包,使用port过滤器。例如,捕获与web(HTTP)服务相关的数据包,命令如下:

       你也可以根据源或目标IP地址或主机名过滤包。例如,捕获来自主机...的数据包:

       相反,你可以使用dst过滤器来根据目的IP/主机名过滤:

       你还可以通过使用逻辑运算符and和or将过滤器组合,创建更复杂的表达式。例如,仅捕获源IP地址...和HTTP服务的数据包,命令如下:

       通过分组过滤器并使用括号,可以创建更复杂的表达式。在这种情况下,用引号括起整个过滤表达式,以防止shell将它们误认为shell表达式:

       在本例中,我们仅过滤HTTP服务(端口)和源IP地址为...或...的数据包。这是一种快速检查同一流量两侧的方法。

       TCPDump的另一个有用功能是能够将捕获保存到文件,以便稍后分析结果。这允许你在夜间以批处理模式捕获包,然后在早上验证结果。这也有助于当你无法分析太多包时,因为实时捕获可能会太快。

       要将输出保存到文件而不是在屏幕上显示,使用-w(写入)选项:

       这个命令将输出保存在名为webserver.pcap的文件中。.pcap扩展表示“数据包捕获”,这是此文件格式的约定。

       如示例所示,屏幕上没有任何显示,捕获在捕获个包后结束,如-c选项所示。如果你想确保正在捕获包,使用选项-v。

       TCPDump将文件以二进制格式创建,因此你不能简单地用文本编辑器打开它。要读取文件的内容,执行TCPDump并使用-r(读取)选项:

       由于你不再直接从网络接口捕获包,sudo不再需要读取文件。

       你还可以使用我们讨论过的任何过滤器来过滤文件中的内容,就像你处理实时数据时一样。例如,通过执行以下命令检查源IP地址为...的包:

       Wireshark的一个优势是可以读取由TCPDump捕获的.pcap文件。你可以使用TCPDump在没有GUI的远程机器上捕获包,然后使用Wireshark分析结果文件,但这是一篇另一个话题。

在linux下tcpdump的安装方式有哪些呢?

         一种是以rpm包的形式来进行安装。另外一种是以源程序的形式安装。

       1。 rpm包的形式安装

       这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。求打字游戏源码以超级用户登录,使用命令如下:

       这样tcpdump就顺利地安装到你的linux系统中。

         怎么样,很简单吧。

       2。 源程序的安装

       既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。

         

         

       第一步 取得源程序 在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包,这种分发包有两种

       形式,一种是tar压缩包(tcpdump-3_4a5。tar。Z),另一种是rpm的分发包(tcpdump-3_4a5。src。rpm)。

详细讲解Linux内核角度分析tcpdump原理(1)

       tcpdump是Linux系统抓包工具,基于libpcap库,能根据定义对网络数据包进行截获。它支持过滤网络层、协议、主机、网络或端口,并使用逻辑语句去除无用信息。tcpdump能分析网络行为,如丢包重传、报文详细信息和TCP分组。通过保存捕获的数据包为pcap文件,使用wireshark打开,能更直观地分析问题。

       tcpdump使用libpcap进行包捕获,使用bpf机制进行完美过滤。libpcap是Unix/Linux平台下的数据包捕获函数库,独立于系统用户层,提供链路层旁路处理。libpcap安装步骤包括库安装、测试、编译和错误处理。

       在libpcap中,创建套接字使用AF_PACKET和SOCK_RAW,常用于抓包分析。socket函数调用__sock_create和packet_family_ops来创建socket,其中AF_PACKET模块对应创建函数packet_rcv,该函数用于接收链路层的包,然后根据应用层设置的过滤条件使用BPF进行过滤。

       当网络包接收时,tcpdump创建PF_PACKET套接字,通过注册prot_hook完成准备工作。网络接收数据包时,会调用netif_receive_skb和__netif_receive_skb_core,其中后者会遍历ptype_all并执行deliver_skb函数,该函数调用packet_rcv进行过滤并添加到接收缓存。

       当网络包发送时,源码商城小程序Linux协议栈提供的报文发送函数会调用dev_queue_xmit或dev_hard_start_xmit,遍历ptype_all并执行deliver_skb和packet_rcv,将数据包发送给driver。最终,接收队列中的数据会copy给应用层,完成数据包的抓取。

       文章总结了tcpdump从创建套接字到收发包的流程,以及使用libpcap和BPF进行过滤的过程。下篇文章将详细分析BPF过滤的实现。

运维必备——Linux 服务器抓包工具 tcpdump 示例详解

       在尝试分析网络流量时,tcpdump Linux 实用程序是您的得力助手。无论是服务器管理员遇到问题需要监控数据,还是其他任何需要捕获数据包的情况,tcpdump 都是您不可或缺的工具。

       本文将深入探讨 tcpdump 命令,并提供在 Linux 系统上安装和使用的详细指南。

       什么是 tcpdump 命令?

       Tcpdump 是一款功能强大的网络监控工具,允许用户高效地过滤网络上的数据包和流量。它能提供有关 TCP/IP 以及网络上传输的数据包的详细信息。作为一个命令行实用程序,tcpdump 能够在没有图形界面的 Linux 服务器上运行。系统管理员还可以将 tcpdump 与 cron 集成,实现自动任务执行,如日志记录。由于其功能丰富,tcpdump 既可以作为故障排除工具,也可以作为安全工具。

       如何在 Linux 上安装 tcpdump

       尽管大多数情况下 tcpdump 都会预装在您的系统上,但某些 Linux 发行版并未包含该软件包。因此,您可能需要在系统上手动安装该实用程序。

       您可以使用 which 命令检查系统上是否已安装 tcpdump。

       如果输出显示目录路径 (/usr/bin/tcpdump),则说明您的系统已安装该软件包。如果没有,您可以使用系统上的默认包管理器轻松安装。

       要在基于 Debian 的发行版(例如 Ubuntu)上安装 tcpdump:

       在基于 Arch 的系统上,运行:

       要在 Fedora、CentOS 和 RHEL 上安装 tcpdump 实用程序,请发出以下命令:

       请注意,tcpdump 包需要 libcap 作为依赖项,因此请确保您也将其安装在系统上。

       在 Linux 上捕获网络数据包的 Tcpdump 示例

       现在您已经在 Linux 机器上成功安装了 tcpdump,是时候监控一些数据包了。由于 tcpdump 需要超级用户权限执行大多数操作,因此您必须将 sudo 添加到您的命令中。

       1.列出所有网络接口

       要检查哪些网络接口可用于捕获,请在 tcpdump 命令中使用 -D 标志。

       将 --list-interfaces 标志作为参数传递将返回相同的输出。

       输出将是系统上存在的所有网络接口的列表。

       获得网络接口列表后,是时候通过捕获系统上的数据包来监控网络了。尽管您可以指定要使用的接口,但 any 参数命令 tcpdump 将使用任何活动接口捕获网络数据包。

       2. tcpdump 输出格式

       从第三行开始,输出的每一行表示 tcpdump 捕获的特定数据包。这是单个数据包输出的样子。

       请记住,并非所有数据包都以这种方式捕获,但这是大多数数据包遵循的一般格式。

       输出包含以下信息。

       第一个字段 (::.) 显示系统发送或接收数据包时的时间戳。记录的时间是从您系统的本地时间中提取的。

       第二个和第三个字段表示使用的接口和数据包的流向。在上面的代码片段中,eth0 是无线接口的名称,Out 是数据包流。

       第四个字段包括与网络协议名称有关的信息。通常,您会发现两种协议-IP 和 IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。

       下一个字段包含 IP 地址或源和目标系统的名称。IP 地址后跟端口号。

       输出中的第六个字段由 TCP 标志组成。tcpdump 输出中使用了各种标志。

       输出还可以包含多个 TCP 标志的组合。例如,FLAG [f.] 代表一个 FIN-ACK 包。

       在输出片段中进一步移动,下一个字段包含数据包中数据的序列号 (seq :)。第一个数据包总是有一个正整数值,随后的数据包使用相对序列号来改善数据流。

       下一个字段包含确认号(ack )或简单的确认号。在发送方机器中捕获的数据包有 作为确认号。在接收端,Ack 号是下一个数据包的值。

       输出中的第九个字段包含窗口大小(win ),即接收缓冲区中可用的字节数。窗口大小后面还有几个其他字段,包括最大段大小 (MSS)。

       最后一个字段(length )包含 tcpdump 捕获的整个数据包的长度。

       3.限制抓包数

       第一次运行 tcpdump 命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递中断信号。您可以通过使用 -c 标志预先指定要捕获的数据包计数来覆盖此默认行为。

       上述命令将从任何活动的网络接口捕获 3 个数据包。

       4.根据字段过滤数据包

       当您对问题进行故障排除时,在终端上获取大量文本输出并不会使其变得更容易。这就是 tcpdump 中的过滤功能发挥作用的地方。您可以根据主机、协议、端口号等各种字段过滤数据包。

       要仅捕获 TCP 数据包,请键入:

       同样,如果要使用端口号过滤输出:

       上述命令只会检索通过指定端口传输的数据包。

       要获取特定主机的数据包详细信息:

       如果要过滤特定主机发送或接收的数据包,请在命令中使用 src 或 dst 参数。

       您还可以使用逻辑运算符 and 和 or 将两个或多个表达式组合在一起。例如,要获取属于源 IP ... 的数据包并使用端口 :

       可以使用括号将复杂表达式组合在一起,如下所示:

       5.查看包的内容

       您可以在 tcpdump 命令中使用 -A 和 -x 标志来分析网络数据包的内容。-A 代表 ASCII 格式,-x 代表十六进制格式。

       查看系统捕获的下一个网络数据包的内容:

       6. 将捕获数据保存到文件

       如果您想保存捕获数据以供参考,tcpdump 可以帮助您。只需使用默认命令传递 -w 标志即可将输出写入文件而不是在屏幕上显示。

       .pcap 文件扩展名代表数据包捕获数据。您还可以使用 -v 标志以详细模式发出上述命令。

       要使用 tcpdump 读取 .pcap 文件,请使用 -r 标志,后跟文件路径。-r 代表读取。

       您还可以从文件中保存的数据包数据中过滤网络数据包。

       如果您被分配了管理 Linux 服务器的任务,那么 tcpdump 命令是一个很好的工具,可以包含在您的武器库中。您可以通过实时捕获网络上传输的数据包轻松解决与网络相关的问题。

       但在此之前,您的设备必须连接到互联网。对于 Linux 初学者来说,即使通过命令行连接 Wi-Fi 也可能有点挑战。但是,如果您使用正确的工具,那就轻而易举了。

Linux系统 tcpdump 抓包命令使用教程

       Linux系统中的tcpdump命令是一个强大的网络包捕获工具,它允许用户针对网络层、协议、特定主机或端口进行精准筛选,通过and、or、not等逻辑操作剔除无关信息。

       本文将引导您入门使用tcpdump,掌握如何在Linux系统中执行网络抓包和数据包分析。首先,理解tcpdump的基本命令格式至关重要,它适用于各种Linux发行版,如CentOS 6.。

       以下是一些tcpdump命令的实例:

       抓取所有网络包(十六进制格式):tcpdump -i eth0

       保存到文件:tcpdump -i eth0 -w result.cap

       过滤特定网卡和端口:tcpdump -i eth0 port

       源和目的地址过滤:tcpdump src ..1. dst ..1.

       复杂逻辑筛选:tcpdump (src ..1. and dst port ) or (src ..1. and dst port )

       高级应用包括记录特定数量的包后退出,以及解析特定协议的包,如tcpdump -r /tmp/result -t -n tcp。

       最后,本文提供的示例仅为基础操作,对于更复杂的抓包需求,请深入理解tcpdump命令格式并根据实际需求进行定制化操作。

linux抓包命令tcpdump

       tcpdump是一个功能强大的命令行数据包分析器,它通过监听服务器的网卡获取数据包,可用于分析所有网络访问的数据。此工具还具有过滤功能,可以获取特定网络、端口或协议的数据包。

       程序员在日常问题排查中,常利用过滤功能获取特定端口的数据包,以分析服务器是否收到请求,请求数据是否完整。

       tcpdump命令的参数丰富,本文仅介绍常用参数:

       参数 -c count 表示指定数量的数据包,达到count后结束命令;若不使用此参数,程序将持续抓取数据包,直到手动停止。

       参数 -C file_size 在抓取数据包保存到文件时,通过此命令设定文件大小。文件达到指定大小后,将创建以原文件名加序号的新文件,例如 dump.txt, dump.txt1。单位为字节(b)。

       参数 -D 列出服务器的所有网卡,tcpdump默认监听编号最小的网卡(一般为eth0)。在执行抓包时,可通过参数 -i interface 指定监听的网卡,any 表示监听所有网卡。

       参数 -n 输出结果时,不将IP转换为主机名(默认显示主机名)。

       参数 -q 快速输出,仅显示简要的数据包信息。

       参数 -r file 从文件读取数据包,不再从网络获取数据包。

       参数 -t 不输出时间戳。

       参数 -w file 将抓取的数据包保存到指定文件,与参数 -r 结合使用时,从文件中读取数据包。

       参数 -W filecount 指定文件数量,文件滚动到指定数量后,从第一个文件开始覆盖。

       除了上述参数,还存在用于条件过滤的关键字,如:

       参数 -host 过滤主机,例如 tcpdump host ..1. 只抓取经过此IP的数据包。

       参数 -src 用于过滤请求来源方,如 tcpdump src host ..1. 只抓取从此IP过来的数据包。

       参数 -dst 用于过滤请求接收方,例如 tcpdump dst host ..1. 只抓取发送到此IP的数据包。

       参数 -port 过滤端口,如 tcpdump port 只抓取经过端口的数据包。

       参数 -net 过滤网络,如 tcpdump net . 只抓取经过此网段的数据包。

       逻辑操作符如 -and、not、or 用于条件组合,例如 tcpdump net . and port 抓取特定网络和端口的数据包。

       数据包分析结果如下:

       时间戳:时:分:秒.微秒

       IP协议名称

       请求发送方IP和端口 > 请求接收方IP和端口。端口可能显示为协议名,如HTTP、SSH、MySQL等。

       Flags [R]

       标识和状态,可选状态包括 [S.] [.] [P.] [F.][R]

       seq、ack、fin

       表示TCP协议的握手和挥手过程。seq表示请求序列号,ack是回答序列号,fin表示完成。序列号显示为相对值,使用参数 -S 可显示绝对值。

       win

       当前窗口大小

       length

       报文体长度,此长度可用于简单分析是否正确接收请求。

       利用以上信息可进行基本分析,通过参数 -w 将数据包写入文件,文件中包含更详细信息,借助分析工具如Wireshark进行进一步分析。

       常用命令示例:

       抓取端口的数据包

       抓取从..1.发送到..1.的数据包

       抓取.网段除了..1.的请求数据包

       抓取端口的数据包并写入dump.log文件

       注意事项:

       1. 运行tcpdump需要管理员权限,可通过sudo命令或使用root用户。

       2. 通过length字段只能进行简单判断,欲进行详细分析,需借助数据包分析工具,如Wireshark。

linux下安装tcpdump并用其抓包

       在Linux环境中,为了深入探究网络协议,抓包分析数据是一种有效手段。尽管Windows用户可以轻松通过Wireshark进行抓包,但在Linux环境下,尤其在空间有限或不支持Wireshark的版本中,安装和使用tcpdump成为更好的选择。本文将简述如何在Linux下安装tcpdump并进行抓包操作。

       首先,有两种安装tcpdump的方法。一是从源代码编译安装,可通过参考csdn博客(blog.csdn.net/tic_yx/article/details/...)获取详细的步骤。另一种更为便捷,就是在Ubuntu等系统中,通过命令行输入`sudo apt-get install tcpdump`,如果遇到安装问题,可以尝试更换国内的软件源,如清华大学源。

       在使用tcpdump时,常用命令包括实时查看抓包信息,将捕获的数据保存为pcap文件以便后续分析,以及通过过滤指定端口号并保存至文件。这样,即使在Linux上完成抓包,也可以方便地将文件传输到Windows系统,利用Wireshark进行深入分析。

       总的来说,Wireshark提供了强大的抓包和分析功能,但在Linux环境中不便安装时,使用tcpdump进行抓包并导出至Windows进行后续处理,不失为一个实用且灵活的解决方案。

Linux系统中网络数据存储工具命令TcpDump的使用教程

       Linux中强大的网络数据采集分析工具TcpDump

       tcpdump采用命令行方式,它的命令格式为:

       tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]

       [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]

       [ -T 类型 ] [ -w 文件名 ] [表达式 ]

1. tcpdump的选项介绍

       -a  将网络地址和广播地址转变成名字;

       -d  将匹配信息包的代码以人们能够理解的汇编格式给出;

       -dd  将匹配信息包的代码以c语言程序段的格式给出;

       -ddd  将匹配信息包的代码以十进制的形式给出;

       -e  在输出行打印出数据链路层的头部信息;

       -f  将外部的Internet地址以数字的形式打印出来;

       -l  使标准输出变为缓冲行形式;

       -n  不把网络地址转换成名字;

       -t  在输出的每一行不打印时间戳;

       -v  输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

       -vv  输出详细的报文信息;

       -c  在收到指定的包的数目后,tcpdump就会停止;

       -F  从指定的文件中读取表达式,忽略其它的表达式;

       -i  指定监听的网络接口;

       -r  从指定的文件中读取包(这些包一般通过-w选项产生);

       -w  直接将包写入文件中,并不分析和打印出来;

       -T  将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程

       调用)和snmp(简单       网络管理协议;)

2. tcpdump的表达式介绍

       表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表

       达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会

       被截获。

       在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,

       net,port, 例如 host ...2,指明 ...2是一台主机,net .0.0.0 指明

       .0.0.0是一个网络地址,port 指明端口号是。如果没有指定类型,缺省的类型是

       host.

       第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,

       这些关键字指明了传输的方向。举例说明,src ...2 ,指明ip包中源地址是..

       .2 , dst net .0.0.0 指明目的网络地址是.0.0.0 。如果没有指明方向关键字,则

       缺省是src or dst关键字。

       第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在

       FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是ether的别名,fddi和e

       ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。

       其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会

       监听所有协议的信息包。

       除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,

       greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','';或运算 是'o

       r' ,'||';

       这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来

       说明。

       (1)想要截获所有...1 的主机收到的和发出的所有的数据包:

       复制代码

       代码如下:

#tcpdump host ...1

       (2) 想要截获主机...1 和主机...2 或...3的通信,使用命令

       :(在命令行中适用   括号时,一定要

       复制代码

       代码如下:

#tcpdump host ...1 and \ (...2 or ...3 \)

       (3) 如果想要获取主机...1除了和主机...2之外所有主机通信的ip包

       ,使用命令:

       复制代码

       代码如下:

#tcpdump ip host ...1 and ! ...2

       (4)如果想要获取主机...1接收或发出的telnet包,使用如下命令:

       复制代码

       代码如下:

#tcpdump tcp port host ...1

3. tcpdump 的输出结果介绍

       下面我们介绍几种典型的tcpdump命令的输出信息

       (1) 数据链路层头信息

       使用命令#tcpdump --e host ice

       ice 是一台装有linux的主机,她的MAC地址是0::::AF:1A

       H是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:::5B:;上一条

       命令的输出结果如下所示:

       ::. eth0 8:0:::5b: 0::::af:1a ip : h. ice.

       telne

       t 0:0(0) ack win (DF)

       分析:::是显示的时间, 是ID号,eth0 表示从网络接口eth0 接受该

       数据包,eth0 表示从网络接口设备发送数据包, 8:0:::5b:是主机H的MAC地址,它

       表明是从源地址H发来的数据包. 0::::af:1a是主机ICE的MAC地址,表示该数据包的

       目的地址是ICE . ip 是表明该数据包是IP数据包, 是数据包的长度, h. ice.

       telnet 表明该数据包是从主机H的端口发往主机ICE的TELNET()端口. ack

       表明对序列号是的包进行响应. win 表明发送窗口的大小是.

       (2) ARP包的TCPDUMP输出信息

       使用命令#tcpdump arp

       得到的输出结果是:

       ::. eth0 arp who-has route tell ice (0::::af:1a)

       ::. eth0 arp reply route is-at 0::::: (0::::af

       :1a)

       分析: ::是时间戳, 是ID号, eth0 表明从主机发出该数据包, arp表明是

       ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:::5

       8:af:1a是主机ICE的MAC地址。

       (3) TCP包的输出信息

       用TCPDUMP捕获的TCP包的一般输出信息是:

       src dst: flags data-seqno ack window urgent options

       src dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F

       IN), P (PUSH) , R (RST) . (没有标记); data-seqno是数据包中的数据的顺序号, ack是

       下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针.

       Options是选项.

       (4) UDP包的输出信息

       用TCPDUMP捕获的UDP包的一般输出信息是:

       route.port1 ice.port2: udp lenth

       UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机

       ICE的port2端口,类型是UDP, 包的长度是lenth

4.实例

       

       复制代码

       代码如下:

[root@www ~]# tcpdump -i eth1

        #监视指定网络接口的数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump host webserver

        #打印所有进入或离开webserver的数据包.

       复制代码

       代码如下:

[root@www ~]# tcpdump host ...1 #也可以指定ip,例如截获所有...1 的主机收到的和发出的所有的数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump host ...1 and \ (...2 or ...3 \) #截获主机...1 和主机...2 或...3的通信

       复制代码

       代码如下:

[root@www ~]# tcpdump ip host ...1 and ! ...2 #获取主机...1除了和主机...2之外所有主机通信的ip包

       复制代码

       代码如下:

[root@www ~]# tcpdump -i eth0 src host webserver #截获主机webserver发送的所有数据

       复制代码

       代码如下:

[root@www ~]# tcpdump -i eth0 dst host webserver #监视所有送到主机webserver的数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump tcp port host ...1 #获取主机...1接收或发出的telnet包

       复制代码

       代码如下:

[root@www ~]# tcpdump udp port

       #对本机的udp 端口进行监视 为ntp的服务端口

       复制代码

       代码如下:

[root@www ~]# tcpdump net ucb-ether #打印本地主机与Berkeley网络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包)

       复制代码

       代码如下:

[root@www ~]# tcpdump 'gateway snup and (port ftp or ftp-data)' #打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)

       复制代码

       代码如下:

[root@www ~]# tcpdump ip and not net localnet #打印所有源地址或目标地址是本地主机的IP数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump 'tcp[tcpflags] (tcp-syn|tcp-fin) != 0 and not src and dst net localnet' #打印TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机.(nt: localnet, 实际使用时要真正替换成本地网络的名字))

       复制代码

       代码如下:

[root@www ~]# tcpdump 'tcp port and (((ip[2:2] - ((ip[0]0xf)2 -="" tcp="" ="" 0xf0=""2)) != 0)' #打印所有源或目的端口是, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump 'gateway snup and ip[2:2] ' #打印长度超过字节, 并且网关地址是snup的IP数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump 'ether[0] 1 = 0 and ip[] = ' #打印所有IP层广播或多播的数据包, 但不是物理以太网层的广播或多播数据报

       复制代码

       代码如下:

[root@www ~]# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' #打印除'echo request'或者'echo reply'类型以外的ICMP数据包

       复制代码

       代码如下:

[root@www ~]# tcpdump tcp -i eth1 -t -s 0 -c and dst port ! and src net ..1.0/ -w ./target.cap

       #(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

       #(2)-i eth1 : 只抓经过接口eth1的包

       #(3)-t : 不显示时间戳

       #(4)-s 0 : 抓取数据包时默认抓取长度为字节。加上-S 0 后可以抓到完整的数据包

       #(5)-c : 只抓取个数据包

       #(6)dst port ! : 不抓取目标端口是的数据包

       #(7)src net ..1.0/ : 数据包的源网络地址为..1.0/

       #(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

       复制代码

       代码如下:

[root@www ~]# tcpdump -XvvennSs 0 -i eth0 tcp[:2]=0x or tcp[:2]=0x #使用tcpdump抓取HTTP包