灵活而强大的命令行工具可以帮助减轻排除网络问题的痛苦。
根据我作为系统管理员的经验,我经常发现很难解决网络连接问题。Tcpdump是这些情况下的好朋友。
Tcpdump是一个命令行实用程序,允许捕获和分析通过系统的网络流量。它通常用于帮助解决网络问题,以及安全工具。
Tcpdump是一个功能强大、用途广泛的工具,有许多选项和过滤器,可以在各种情况下使用。由于它是一个命令行工具,所以最好在远程服务器或图形用户界面不可用的设备上运行,以收集稍后可以分析的数据。它也可以在后台启动,或者使用cron等工具作为计划作业启动。
在本文中,我们将介绍tcpdump的一些最常见的功能。
1.在Linux上安装
Tcpdump包含在几个Linux发行版中,所以很可能已经安装好了。使用以下命令检查系统上是否安装了tcpdump:
$ whichtcpdump
/usr/sbin/tcpdump
如果没有安装tcpdump,您可以使用分发包管理器安装它。例如,在CentOS或红帽企业版Linux上,如下所示:
$ sudoyum install-ytcpdump
Tcpdump需要libpcap,这是一个用于网络数据包捕获的库。如果没有安装,它将作为依赖项自动添加。
现在你准备好开始抓包了。
2.使用tcpdump抓取数据包
为了获取用于故障排除或分析的数据包,tcpdump需要提升其权限,因此在下面的示例中,大多数命令都以sudo作为前缀。
首先,使用命令tcpdump -D查看哪些接口可用于捕获:
$ sudotcpdump -D
1.eth0
2.virbr0
3.etp
4 .任意(在所有接口上捕获的伪设备)
5 . lo[环回]
在上面的例子中,您可以看到计算机中所有可用的接口。特殊界面允许在任何活动界面中捕捉。
让我们开始捕获一些数据包。通过运行以下命令捕获任何接口上的所有数据包:
$ sudotcpdump -iany
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
09:56:18 . 293641 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq3770820720:3770820916,ack 3503648727,win 309,options [nop,nop,TS val 76577898ecr 510770929],length 196
09:56:18 . 293794 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 196,win 391,选项[nop,nop,TS val 510771017ecr 76577898],长度0
09:56:18.295058IP rhel75.59883 >gateway.domain: 2486+ PTR?1 . 64 . 168 . 192 . in-addr . arpa(43)
09:56:18.310225 IP gateway . domain >rhel 75.59883:2486 Nxdomain * 0/1/0(102)
09:56:18 . 312482 IP rhel 75 . 49685 & gt;gateway.domain: 34242+ PTR?28 . 64 . 168 . 192 . in-addr . arpa(44)
09:56:18.322425 IP gateway . domain >rhel 75.49685:34242 Nxdomain * 0/1/0(103)
09:56:18 . 323164 IP rhel 75 . 56631 & gt;gateway.domain: 29904+ PTR?1 . 122 . 168 . 192 . in-addr . arpa(44)
09:56:18.323342 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq196:584,ack 1,win 309,options [nop,nop,TS val 76577928ecr 510771017],length 388
09:56:18 . 323563 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 584,win 411,选项[nop,nop,TS val 510771047ecr 76577928],长度0
09:56:18.335569 IP gateway . domain >rhel 75.56631:29904 Nxdomain * 0/1/0(103)
09:56:18 . 336429 IP rhel 75 . 44007 & gt;gateway.domain: 61677+ PTR?98 . 122 . 168 . 192 . in-addr . arpa(45)
09:56:18 . 336655 IP gateway . domain >rhel 75.44007:61677 * 1/0/0PTR rhel 75。(65)
09:56:18 . 337177 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322:标志[P.],seq584:1644,ack 1,win 309,选项[nop,nop,TS val 76577942ecr 510771047],长度1060
-跳过长输出-
09:56:19 . 342939 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 1752016,win 1444,选项[nop,nop,TS val 510772067ecr 76578948],长度0
C
9003捕获的数据包
过滤器接收到9010数据包
7内核丢弃的数据包
$
Tcpdump继续捕获数据包,直到收到中断信号。可以按Ctrl+C中断捕捉。如您在本例中所见,tcpdump捕获了9000多个数据包。在这种情况下,由于我使用ssh连接到这个服务器,tcpdump捕获了所有这些包。要限制捕获的数据包数量并停止tcpdump,请使用-c选项:
$ sudotcpdump -iany -c5
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
11:21:30.242740 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq3772575680:3772575876,ack 3503651743,win 309,options [nop,nop,TS val 81689848ecr 515883153],length 196
11:21:30 . 242906 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 196,win 1443,选项[nop,nop,TS val 515883235ecr 81689848],长度0
11:21:30.244442IP rhel75.43634 >gateway.domain: 57680+ PTR?1 . 64 . 168 . 192 . in-addr . arpa(43)
11:21:30.244829 IP gateway . domain >rhel 75.43634:57680 nxdomain 0/0/0(43)
11:21:30.247048IP rhel75.33696 >gateway.domain: 37429+ PTR?28 . 64 . 168 . 192 . in-addr . arpa(44)
5捕获的数据包
过滤器收到12个数据包
0内核丢弃的数据包
$
在这种情况下,tcpdump会在捕获五个数据包后自动停止捕获。这在不同的场景中很有用,例如,如果您排除连接并捕获一些初始包。当我们应用过滤器来捕获特定的数据包时,这就更有用了(如下所示)。
默认情况下,tcpdump将IP地址和端口解析为名称,如上例所示。排除网络故障时,通常更容易使用IP地址和端口号。使用选项-n和端口解析以及-nn禁用名称解析:
$ sudotcpdump -iany -c5-nn
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
23:56:24 . 292206 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110: Flags [P.],seq166198580:166198776,ack 2414541257,win 309,options [nop,nop,TS val 615664ecr 540031155],length 196
23:56:24 . 292357 IP 192 . 168 . 64 . 1 . 35110 >192.168.64.28.22:标志[。],ack 196,win 1377,选项[nop,nop,TS val 540031229ecr 615664],长度0
23:56:24 . 292570 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110: Flags [P.],seq196:568,ack 1,win 309,options [nop,nop,TS val 615664ecr 540031229],length 372
23:56:24 . 292655 IP 192 . 168 . 64 . 1 . 35110 >192.168.64.28.22:标志[。],ack 568,win 1400,选项[nop,nop,TS val 540031229ecr 615664],长度0
23:56:24 . 292752 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110:标志[P.],seq568:908,ack 1,win 309,选项[nop,nop,TS val 615664ecr 540031229],长度340
5捕获的数据包
6过滤器接收的数据包
0内核丢弃的数据包
如上所示,捕获输出现在显示了IP地址和端口号。它还防止tcpdump发布DNS查找,这有助于在排除网络问题时减少网络流量。
现在我们可以捕获网络数据包了,让我们探索一下这些输出意味着什么。
3.理解输出格式
Tcpdump可以捕获和解码很多不同的协议,比如TCP、UDP、ICMP等等。虽然这里不能一一介绍,但是为了帮助入门,我们来探索一下TCP包。您可以在tcpdump的手册页中找到关于不同协议格式的更多详细信息。tcpdump捕获的典型TCP数据包如下:
08:41:13 . 729687 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.41916: Flags [P.],seq 196:568,ack 1,win 309,options [nop,nop,TS val 117964079 ecr 816509256],length 372
这些字段可能因发送的数据包类型而异,但这是一种通用格式。
第一个字段08: 41: 13.729687表示根据本地时钟接收的数据包的时间戳。
接下来,IP代表网络层协议——在本例中是IPv4。对于IPv6数据包,该值为IP6。
下一个字段192.168.64.28.22是源IP地址和端口。接下来是目的IP地址和端口,用192.168.64.1.41916表示。
TCP标签[P.]可以在源和目的之后找到。该字段的典型值包括:
值标记类型描述SSYN连接开始FFIN连接结束PPUSH数据 pushRRST连接重置.ACK确认该字段也可以是这些值的组合,例如同步确认包的[s]。
接下来是数据包中包含的数据的序列号。对于捕获的第一个数据包,这是一个绝对数字。随后的数据包使用相对编号,以便于遵从。在这个例子中,序列是seq 196:568,这意味着包包含流的字节196到568。
接下来是Ack号:ack 1。这种情况下是1,因为这是发送数据的一方。对于接收数据的一方,该字段指示流上的下一个预期字节(数据)。例如,这个过程中下一个数据包的Ack号是568。
下一个字段是窗口大小win 309,它指示接收缓冲区中可用的字节数,后跟TCP选项,如MSS(最大段大小)或窗口比率。有关传输控制协议选项的更多信息,请参见传输控制协议参数。
最后,我们有包长度,长度372,它表示有效载荷数据的长度(以字节为单位)。长度是序列号中最后一个字节和第一个字节之间的差值。
现在让我们学习如何过滤包来缩小结果,更容易地解决具体问题。
4.过滤数据包
如上所述,tcpdump可以捕获太多的软件包,其中一些甚至与正在排除故障的问题无关。例如,如果您正在解决一个与网络服务器的连接问题,您对SSH流量不感兴趣,因此从输出中删除SSH数据包可以更容易地处理真正的问题。
tcpdump最强大的功能之一,就是可以用各种参数过滤捕获的数据包,比如源和目的IP地址、端口、协议等等。让我们来看看一些最常见的参数。
协议
要根据协议过滤数据包,请在命令行中指定协议。例如,仅使用以下命令捕获互联网控制消息协议:
$ sudotcpdump -iany -c5icmp
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
在另一台终端上,尝试ping另一台机器:
$ pingopensource.com
PING opensource.com(54 . 204 . 39 . 132)56(84)字节的数据。
来自ec2-54-204-39-132.compute-1.amazonaws.com的64字节(54 . 204 . 39 . 132):icmp _ seq = 1ttl = 47 time = 39.6毫秒
回到tcpdump捕获,注意tcpdump只捕获和显示与ICMP相关的数据包。在这种情况下,tcpdump不显示解析opensource.com名称时生成的名称解析包:
09:34:20.136766IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq1,length 64
09:34:20.176402 ec2-54-204-39-132.compute-1.amazonaws.com;rhel75: ICMP echoreply,id20361,seq1,长度64
09:34:21.140230IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq2,length 64
ec2-54-204-39-132.compute-1.amazonaws.com时间09:34:21.180020;rhel75: ICMP echoreply,id20361,seq2,长度64
09:34:22.141777IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq3,length 64
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
主机
使用主机过滤器将捕获限制为与特定主机相关的数据包:
$ sudotcpdump-iany-C5-nnhost 54.204.39.132
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
09:54:20 . 042023 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80:标志[S],seq1375157070,win 29200,选项[mss 1460,sackOK,TS val 122350391ecr 0,nop,wscale 7],长度0
09:54:20 . 088127 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39326: Flags [S.],seq1935542841,ack 1375157071,win 28960,options [mss 1460,sackOK,TS val 522713542ecr 122350391,nop,wscale 9],length 0
09:54:20 . 088204 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80:标志[。],ack 1,win 229,选项[nop,nop,TS val 122350437ecr 522713542],长度0
09:54:20 . 088734 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 122350438ecr 522713542],length 112: HTTP: GET /HTTP/1.1
09:54:20 . 129733 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39326:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 522713552ecr 122350438],长度0
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
在本例中,tcpdump仅捕获和显示进出主机54.204.39.132的数据包。
港市
要根据所需的服务或端口过滤数据包,请使用端口过滤器。例如,使用以下命令捕获与网络服务相关的数据包:
$ sudotcpdump -iany -c5-nnport 80
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
09:58:28 . 790548 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80:标志[S],seq1745665159,win 29200,选项[mss 1460,sackOK,TS val 122599140ecr 0,nop,wscale 7],长度0
09:58:28 . 834026 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39330: Flags [S.],seq4063583040,ack 1745665160,win 28960,options [mss 1460,sackOK,TS val 522775728ecr 122599140,nop,wscale 9],长度0
09:58:28 . 834093 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80:标志[。],ack 1,win 229,选项[nop,nop,TS val 122599183ecr 522775728],长度0
09:58:28 . 834588 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 122599184ecr 522775728],length 112: HTTP: GET /HTTP/1.1
09:58:28 . 878445 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39330:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 522775739ecr 122599184],长度0
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
跟踪IP/主机名
您还可以根据源或目标IP地址或主机名过滤数据包。例如,要从主机192.168.122.98捕获数据包:
$ sudotcpdump-iany-C5-nns RC 192 . 168 . 122 . 98
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
10:02:15 . 220824 IP 192 . 168 . 122 . 98 . 39436 & gt;192.168.122.1.53: 59332+ A?opensource.com。(32)
10:02:15 . 220862 IP 192 . 168 . 122 . 98 . 39436 >192.168.122.1.53: 20749+ AAAA?opensource.com。(32)
10:02:15 . 364062 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80:标志[S],seq1108640533,win 29200,选项[mss 1460,sackOK,TS val 122825713ecr 0,nop,wscale 7],长度0
10:02:15 . 409229 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80:标志[。],ack 669337581,win 229,选项[nop,nop,TS val 122825758ecr 522832372],长度0
10:02:15 . 409667 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80: Flags [P.],seq0:112,ack 1,win 229,options [nop,nop,TS val 122825759ecr 522832372],length 112: HTTP: GET /HTTP/1.1
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
请注意,tcpdumps捕获源IP地址为192.168.122.98的数据包,这些数据包用于各种服务,如名称解析(端口53)和HTTP(端口80)。由于源IP不同,因此不会显示响应数据包。
相反,您可以使用dst筛选器按目标IP/主机名进行筛选:
$ sudotcpdump-iany-C5-nndst 192 . 168 . 122 . 98
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
10:05:03 . 572931 IP 192 . 168 . 122 . 1 . 53 >192 . 168 . 122 . 98 . 47049:22481/0/0A 54.204.39.132(48)
10:05:03 . 572944 IP 192 . 168 . 122 . 1 . 53 >192.168.122.98.47049: 337700/0/0(32)
10:05:03 . 621833 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338: Flags [S.],seq3474204576,ack 3256851264,win 28960,options [mss 1460,sackOK,TS val 522874425ecr 122993922,nop,wscale 9],长度0
10:05:03 . 667767 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 522874436ecr 122993972],长度0
10:05:03 . 672221 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 522874437ecr 122993972],length 642:HTTP:HTTP/1.1302 found
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
复杂过滤
您也可以使用逻辑运算符来组合筛选器或创建更复杂的表达式。例如,要从源IP地址192.168.122.98和仅支持HTTP的服务中过滤数据包,请使用以下命令:
$ sudotcpdump-iany-C5-nns RC 192 . 168 . 122 . 98和端口80
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
10:08:00 . 472696 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:标志[S],seq2712685325,win 29200,选项[mss 1460,sackOK,TS val 123170822ecr 0,nop,wscale 7],长度0
10:08:00 . 516118 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:标志[。],ack 268723504,win 229,选项[nop,nop,TS val 123170865ecr 522918648],长度0
10:08:00 . 516583 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80: Flags [P.],seq0:112,ack 1,win 229,options [nop,nop,TS val 123170866ecr 522918648],length 112: HTTP: GET /HTTP/1.1
10:08:00 . 567044 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:标志[。],ack 643,win 239,选项[nop,nop,TS val 123170916ecr 522918661],长度0
10:08:00 . 788153 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:标志[F.],seq112,ack 643,win 239,选项[nop,nop,TS val 123171137ecr 522918661],长度0
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
您可以通过用括号将筛选器分组来创建更复杂的表达式。在这种情况下,请用引号将整个筛选器表达式括起来,以防shell将它们与shell表达式混淆:
$ sudotcdump-iany-C5-nn“端口80和(src 192.168.122.98或src 54.204.39.132)”
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
10:10:37 . 602214 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80:标志[S],seq871108679,win 29200,选项[mss 1460,sackOK,TS val 123327951ecr 0,nop,wscale 7],长度0
10:10:37 . 650651 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39346: Flags [S.],seq854753193,ack 871108680,win 28960,options [mss 1460,sackOK,TS val 522957932ecr 123327951,nop,wscale 9],长度0
10:10:37 . 650708 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80:标志[。],ack 1,win 229,选项[nop,nop,TS val 123328000ecr 522957932],长度0
10:10:37 . 651097 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 123328000ecr 522957932],length 112: HTTP: GET /HTTP/1.1
10:10:37 . 692900 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39346:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 522957942ecr 123328000],长度0
5捕获的数据包
5过滤器接收的数据包
0内核丢弃的数据包
在这个例子中,我们只过滤HTTP服务(端口80)和源IP地址192.168.122.98或54.204.39.132的数据包。这是一种快速检查同一流程两端的方法。
5.检查包装内容
在前面的例子中,我们只检查数据包的报头,以获取源、目的地和端口等信息。有时,这就是解决网络连接问题所需要的全部。然而,有时我们需要检查数据包的内容,以确保我们发送的消息包含我们需要的消息或我们收到的预期响应。为了查看数据包内容,tcpdump提供了两个附加标志:-X以十六进制格式打印内容,而ASCII或-A以ASCII格式打印内容。
例如,检查网页请求的HTTP内容,如下所示:
$ sudotcpdump-iany-C10-nn-Aport 80
tcpdump:抑制详细输出,使用-vor-vvffull协议解码
监听任何链接类型的LINUX_SLL (Linux熟),捕获大小262144字节
13:02:14 . 871803 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:标志[S],seq2546602048,win 29200,选项[mss 1460,sackOK,TS val 133625221ecr 0,nop,wscale 7],长度0
E..& lt..@.因特网网址中.....zb6。'....P...因特网网址中......r............
............................
13:02:14 . 910734 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366: Flags [S.],seq 1877348646,ack 2546602049,win 28960,options [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9],长度0
E..& lt..@./..a6。'...zb。P..o..& amp...A..q a..........
. R.W.......................
13:02:14 . 910832 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:标志[。],ack 1,win 229,选项[nop,nop,TS val 133625260ecr 525532247],长度0
E..四..@.因特网网址中.....zb6。'....P...嗷..”...........
.....R.W................
13:02:14 . 911808 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 133625261ecr 525532247],length 112: HTTP: GET /HTTP/1.1
E.....@.因特网网址中..一..zb6。'....P...嗷..”...........
.....WGET共和国
用户代理:Wget/1.14(linux-gnu)
接受:*/*
主持人:opensource.com
连接:保持活力
................
13:02:14 . 951199 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 525532257ecr 133625261],长度0
E..4.F@。/.."6.'...zb。P..“哦…”.......9.2 .....
. R.a....................
13:02:14 . 955030 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:标志[P.],seq 1:643,ack 113,win 57,选项[nop,nop,TS val 525532258 ecr 133625261],长度642: HTTP: HTTP/1.1 302 Found
E....G@。/...6.'...zb。P..“哦…”.......9 .......
. R.b....HTTP/1.1 302找到
服务器:nginx
日期:孙2018年9月23日格林尼治时间17:02:14
内容——类型:文本/html;charset=iso-8859-1
内容-长度:207
X-内容-类型-选项:否
地点:https://opensource.com/
缓存控制:最大年龄=1209600
到期日:孙,2018年10月7日17:02:14格林尼治时间
x-Request-ID:v-6 baa 3a cc-bf52-11e 8-9195-22000 ab 8 cf 2d
x-清漆:632951979
年龄:0
过孔:1.1清漆(清漆/5.2)
超高速缓存:缺失
连接:保持活动
& lt!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN " >;
& lthtml>。& lthead>。
& lttitle>。302找到& lt/title>。
& lt/head>。& ltbody>。
& ltp>。已找到<。/p>。
& ltp>。文档已移动& lta href = " https://open source . com/" gt。这里& lt/a>。。& lt/p>。
& lt/body>。& lt/html>。
................
13:02:14 . 955083 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:标志[。],ack 643,win 239,选项[nop,nop,TS val 133625304 ecr 525532258],长度0
E..四..@.因特网网址中.....zb6。'....P....o..............
.....R.b................
13:02:15 . 195524 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:标志[F .,seq 113,ack 643,win 239,选项[nop,nop,TS val 133625545 ecr 525532258],长度0
E..四..@.因特网网址中.....zb6。'....P....o..............
.....R.b................
13:02:15 . 236592 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:标志[F.],seq 643,ack 114,win 57,选项[nop,nop,TS val 525532329 ecr 133625545],长度0
E..4.H@。/..6.'...zb。P..o..........9.我.....
。稀有......................
13:02:15 . 236656 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:标志[。],ack 644,win 239,选项[nop,nop,TS val 133625586 ecr 525532329],长度0
E..四..@.因特网网址中.....zb6。'....P....o..............
.....稀有..................
捕获10个数据包
过滤器收到10个数据包
0个数据包被内核丢弃
这有助于解决API调用问题,假设调用使用普通的HTTP。该输出对于加密连接不是很有用。
6.将捕获保存到文件中
tcpdump提供的另一个有用的特性是能够将捕获保存到一个文件中,以便以后对结果进行分析。例如,这允许您以批处理模式捕获数据包,并在早上验证结果。当有太多数据包需要分析时,这也很有帮助,因为实时捕获可能发生得太快。
要将包保存到文件而不是显示在屏幕上,请使用选项-w:
$ sudotcpdump-iany-C10-nn-wweb server . pcap端口80
[sudo]recordo的密码:
侦听任何链接类型的LINUX_SLL (Linux烹饪),捕获大小262144字节
捕获了10个数据包
10过滤器收到的数据包
0内核丢弃的数据包
此命令将输出保存在名为webserver.pcap的文件中。pcap扩展名代表“数据包捕获”,这是这种文件格式的约定。
如本例所示,屏幕上不显示任何内容,根据选项-c10捕获10个数据包后完成捕获。如果您需要一些反馈来确保数据包被捕获,请使用-v选项。
Tcpdump以二进制格式创建一个文件,所以不能简单地用文本编辑器打开它。要读取文件的内容,请使用-r选项执行tcpdump:
$ tcpdump -nn-rwebserver.pcap
从filewebserver.pcap读取,链接类型LINUX_SLL (Linux熟)
13:36:57 . 679494 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:标志[S],seq3709732619,win 29200,选项[mss 1460,sackOK,TS val 135708029ecr 0,nop,wscale 7],长度0
13:36:57 . 718932 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [S.],seq1999298316,ack 3709732620,win 28960,options [mss 1460,sackOK,TS val 526052949ecr 135708029,nop,wscale 9],长度0
13:36:57 . 719005 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:标志[。],ack 1,win 229,选项[nop,nop,TS val 135708068ecr 526052949],长度0
13:36:57 . 719186 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 135708068ecr 526052949],length 112: HTTP: GET /HTTP/1.1
13:36:57 . 756979 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 526052959ecr 135708068],长度0
13:36:57 . 760122 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 526052959ecr 135708068],length 642:HTTP:HTTP/1.1302 found
13:36:57 . 760182 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:标志[。],ack 643,win 239,选项[nop,nop,TS val 135708109ecr 526052959],长度0
13:36:57 . 977602 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:标志[F.],seq113,ack 643,win 239,选项[nop,nop,TS val 135708327ecr 526052959],长度0
13:36:58 . 022089 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:标志[F.],seq643,ack 114,win 57,选项[nop,nop,TS val 526053025ecr 135708327],长度0
13:36:58 . 022132 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:标志[。],ack 644,win 239,选项[nop,nop,TS val 135708371ecr 526053025],长度0
$
因为不再直接从网络接口捕获数据包,所以不需要sudo来读取文件。
您也可以使用我们讨论过的任何过滤器来过滤文件的内容,就像使用实时数据一样。例如,通过执行以下命令,从源IP地址54.204.39.132检查捕获文件中的数据包:
$ tcpdump-nn-rwebserver . pcap src 54.204.39.132
从filewebserver.pcap读取,链接类型LINUX_SLL (Linux熟)
13:36:57 . 718932 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [S.],seq1999298316,ack 3709732620,win 28960,options [mss 1460,sackOK,TS val 526052949ecr 135708029,nop,wscale 9],length 0
13:36:57 . 756979 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:旗帜[。],ack 113,win 57,选项[nop,nop,TS val 526052959ecr 135708068],长度0
13:36:57 . 760122 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 526052959ecr 135708068],length 642:HTTP:HTTP/1.1302 found
13:36:58 . 022089 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:标志[F.],seq643,ack 114,win 57,选项[nop,nop,TS val 526053025ecr 135708327],长度0
下一步是什么?
tcpdump的这些基本技能会帮助你开始使用这个强大的多功能工具。有关更多信息,请参见tcpdump网站和手册页。
Tcpdump命令行界面为捕获和分析网络流量提供了极大的灵活性。如果您需要图形工具来理解更复杂的过程,请查看Wireshark。
Wireshark的一个优点是可以阅读。tcpdump捕获的pcap文件。可以用tcpdump在没有GUI的远程计算机上捕获数据包,用Wireshark分析结果文件,不过这是另外一个话题。
原始链接:
https://opensource.com/article/18/10/introduction-tcpdump
1.《tcpdump 在Linux命令行中使用tcpdump「超详细」》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《tcpdump 在Linux命令行中使用tcpdump「超详细」》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/987892.html