1. 首页
  2. 综合百科
  3. 抢包(进)是什么意思

抢包(进)是什么意思

简介:关于抢包(进)是什么意思的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

编译自:https://opensource.com/article/18/10/introduction-tcpdump

作者:RicardoGerardi

译者:jrg

Tcpdump是一个灵活而强大的包捕获工具,可以有效地帮助排除网络故障。

在我作为管理员的经验中,我经常遇到非常困难的网络连接故障排除问题。对于这种情况,tcpdump可以派上用场。

Tcpdump是一个命令行实用程序,允许您捕获和分析通过系统的流量包。通常用作网络故障分析工具和安全工具。

Tcpdump是一个强大的工具,它支持多种选项和过滤规则,适用于多种场景。因为它是一个命令行工具,所以它适用于在没有图形界面的远程服务器或设备中收集数据包,以便稍后进行分析。它可以在后台启动,也可以通过使用计时工具(如cron)创建计时任务来启用。

在本文中,我们将讨论tcpdump的一些最常用的函数。

1、在Linux中安装tcpdump

tcpdump支持多种Linux发行版,因此很可能已经安装在您的系统中。使用以下命令检查tcpdump是否已安装:

$whichtcpdump

/usr/sbin/tcpdump

如果还没有安装tcpdump,可以用包管理器安装。例如,在CentOS或RedHatEnterprise系统中,使用以下命令安装tcpdump:

$sudoyuminstall-ytcpdump

Tcpdump依赖于libpcap,这是一个用于捕获网络数据包的库文件。如果没有安装库文件,系统会根据依赖关系自动安装。

现在你可以开始抓包了。

2、用tcpdump抓包

使用tcpdump抓取包,需要管理员权限,所以下面例子中的命令大部分以sudo开头。

首先,使用tcpdump-D命令列出可以抓取数据包的网络接口:

$sudotcpdump-D

1.eth0

2.virbr0

3.eth1

4.any(捕获所有接口的伪设备)

5 . lo[回送]

如上图,可以看到我的机器里所有可以抓取包的网络接口。其中,专用接口any可以用来抓取所有活动网络接口的数据包。

我们将首先使用以下命令来抓取任何接口的包:

$sudotcpdump-iany

tcpdump : verboseoutputsuppressed,请使用-vor-vvforfullprotocoldecode

listeningonany,链接类型LINUX_SLL(Linuxcooked),捕获大小262144字节

09:563:18.293641 IPR hel 75 . local domain . ssh 192 . 168 . 64 . 1 . 56322: flags[p .],seq3770820720:3770820916,ack3503648727,win309,options[nop,nop,tsval 76577898 ECR 5 . 20018

09:56:18.293794 IP 192 . 168 . 64 . 1 . 56322 rhel 75 . local domain . ssh : flags[。],ack196,win391,选项[nop,nop,TSval510771017ecr76577898],长度0

0933605633581地址中的arpa(43)

09:56333618.310225 IP gateway . domain hel 75.53:2486 NX domain * 0/1/0(102)

09336056332 pr hel . gateway . domain PTR . 59638676728.64.168.192

09:56333618.322425 IP gateway . domain hel 72 NX domain * 0/1/0(103)

093360563334 IP rhel 75 . gateway . domain PTR . 5963867地址中的arpa(44)

09:563:18.323342 IPR hel 75 . local domain . ssh 192 . 168 . 64 . 1 . 56322: flags[p .],seq196:584,ack1,win309,选项

s[nop,nop,TSval76577928ecr510771017],length388

09:56:18.323563IP192.168.64.1.56322>rhel75.localdomain.ssh:Flags[.],ack584,win411,options[nop,nop,TSval510771047ecr76577928],length0

09:56:18.335569IPgateway.domain>rhel75.56631:29904NXDomain*0/1/0(103)

09:56:18.336429IPrhel75.44007>gateway.domain:61677+PTR?98.122.168.192.in-addr.arpa.(45)

09:56:18.336655IPgateway.domain>rhel75.44007:61677*1/0/0PTRrhel75.(65)

09:56:18.337177IPrhel75.localdomain.ssh>192.168.64.1.56322:Flags[P.],seq584:1644,ack1,win309,options[nop,nop,TSval76577942ecr510771047],length1060

----SKIPPINGLONGOUTPUT-----

09:56:19.342939IP192.168.64.1.56322>rhel75.localdomain.ssh:Flags[.],ack1752016,win1444,options[nop,nop,TSval510772067ecr76578948],length0

^C

9003packetscaptured

9010packetsreceivedbyfilter

7packetsdroppedbykernel

$

tcpdump会持续抓包直到收到中断信号。你可以按Ctrl+C来停止抓包。正如上面示例所示,tcpdump抓取了超过9000个数据包。在这个示例中,由于我是通过ssh连接到服务器,所以tcpdump也捕获了所有这类数据包。-c选项可以用于限制tcpdump抓包的数量:

$sudotcpdump-iany-c5

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

11:21:30.242740IPrhel75.localdomain.ssh>192.168.64.1.56322:Flags[P.],seq3772575680:3772575876,ack3503651743,win309,options[nop,nop,TSval81689848ecr515883153],length196

11:21:30.242906IP192.168.64.1.56322>rhel75.localdomain.ssh:Flags[.],ack196,win1443,options[nop,nop,TSval515883235ecr81689848],length0

11:21:30.244442IPrhel75.43634>gateway.domain:57680+PTR?1.64.168.192.in-addr.arpa.(43)

11:21:30.244829IPgateway.domain>rhel75.43634:57680NXDomain0/0/0(43)

11:21:30.247048IPrhel75.33696>gateway.domain:37429+PTR?28.64.168.192.in-addr.arpa.(44)

5packetscaptured

12packetsreceivedbyfilter

0packetsdroppedbykernel

$

如上所示,tcpdump在抓取5个数据包后自动停止了抓包。这在有些场景中十分有用——比如你只需要抓取少量的数据包用于分析。当我们需要使用过滤规则抓取特定的数据包(如下所示)时,-c的作用就十分突出了。

在上面示例中,tcpdump默认是将IP地址和端口号解析为对应的接口名以及服务协议名称。而通常在网络故障排查中,使用IP地址和端口号更便于分析问题;用-n选项显示IP地址,-nn选项显示端口号:

$sudotcpdump-iany-c5-nn

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

23:56:24.292206IP192.168.64.28.22>192.168.64.1.35110:Flags[P.],seq166198580:166198776,ack2414541257,win309,options[nop,nop,TSval615664ecr540031155],length196

23:56:24.292357IP192.168.64.1.35110>192.168.64.28.22:Flags[.],ack196,win1377,options[nop,nop,TSval540031229ecr615664],length0

23:56:24.292570IP192.168.64.28.22>192.168.64.1.35110:Flags[P.],seq196:568,ack1,win309,options[nop,nop,TSval615664ecr540031229],length372

23:56:24.292655IP192.168.64.1.35110>192.168.64.28.22:Flags[.],ack568,win1400,options[nop,nop,TSval540031229ecr615664],length0

23:56:24.292752IP192.168.64.28.22>192.168.64.1.35110:Flags[P.],seq568:908,ack1,win309,options[nop,nop,TSval615664ecr540031229],length340

5packetscaptured

6packetsreceivedbyfilter

0packetsdroppedbykernel

如上所示,抓取的数据包中显示IP地址和端口号。这样还可以阻止tcpdump发出DNS查找,有助于在网络故障排查中减少数据流量。

现在你已经会抓包了,让我们来分析一下这些抓包输出的含义吧。

3、理解抓取的报文

tcpdump能够抓取并解码多种协议类型的数据报文,如TCP、UDP、ICMP等等。虽然这里我们不可能介绍所有的数据报文类型,但可以分析下TCP类型的数据报文,来帮助你入门。更多有关tcpdump的详细介绍可以参考其帮助手册。tcpdump抓取的TCP报文看起来如下:

08:41:13.729687IP192.168.64.28.22>192.168.64.1.41916:Flags[P.],seq196:568,ack1,win309,options[nop,nop,TSval117964079ecr816509256],length372

具体的字段根据不同的报文类型会有不同,但上面这个例子是一般的格式形式。

第一个字段08:41:13.729687是该数据报文被抓取的系统本地时间戳。

然后,IP是网络层协议类型,这里是IPv4,如果是IPv6协议,该字段值是IP6。

192.168.64.28.22是源ip地址和端口号,紧跟其后的是目的ip地址和其端口号,这里是192.168.64.1.41916。

在源IP和目的IP之后,可以看到是TCP报文标记段Flags[P.]。该字段通常取值如下:

值标志类型描述SSYNConnectionStartFFINConnectionFinishPPUSHDatapushRRSTConnectionreset.ACKAcknowledgment

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

接下来是该数据包中数据的序列号。对于抓取的第一个数据包,该字段值是一个绝对数字,后续包使用相对数值,以便更容易查询跟踪。例如此处seq196:568代表该数据包包含该数据流的第196到568字节。

接下来是ack值:ack1。该数据包是数据发送方,ack值为1。在数据接收方,该字段代表数据流上的下一个预期字节数据,例如,该数据流中下一个数据包的ack值应该是568。

接下来字段是接收窗口大小win309,它表示接收缓冲区中可用的字节数,后跟TCP选项如MSS(最大段大小)或者窗口比例值。更详尽的TCP协议内容请参考TransmissionControlProtocol(TCP)Parameters。

最后,length372代表数据包有效载荷字节长度。这个长度和seq序列号中字节数值长度是不一样的。

现在让我们学习如何过滤数据报文以便更容易的分析定位问题。

4、过滤数据包

正如上面所提,tcpdump可以抓取很多种类型的数据报文,其中很多可能和我们需要查找的问题并没有关系。举个例子,假设你正在定位一个与web服务器连接的网络问题,就不必关系SSH数据报文,因此在抓包结果中过滤掉SSH报文可能更便于你分析问题。

tcpdump有很多参数选项可以设置数据包过滤规则,例如根据源IP以及目的IP地址,端口号,协议等等规则来过滤数据包。下面就介绍一些最常用的过滤方法。

协议

在命令中指定协议便可以按照协议类型来筛选数据包。比方说用如下命令只要抓取ICMP报文:

$sudotcpdump-iany-c5icmp

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

然后再打开一个终端,去ping另一台机器:

$pingopensource.com

PINGopensource.com(54.204.39.132)56(84)bytesofdata.

64bytesfromec2-54-204-39-132.compute-1.amazonaws.com(54.204.39.132):icmp_seq=1ttl=47time=39.6ms

回到运行tcpdump命令的终端中,可以看到它筛选出了ICMP报文。这里tcpdump并没有显示有关opensource.com的域名解析数据包:

09:34:20.136766IPrhel75>ec2-54-204-39-132.compute-1.amazonaws.com:ICMPechorequest,id20361,seq1,length64

09:34:20.176402IPec2-54-204-39-132.compute-1.amazonaws.com>rhel75:ICMPechoreply,id20361,seq1,length64

09:34:21.140230IPrhel75>ec2-54-204-39-132.compute-1.amazonaws.com:ICMPechorequest,id20361,seq2,length64

09:34:21.180020IPec2-54-204-39-132.compute-1.amazonaws.com>rhel75:ICMPechoreply,id20361,seq2,length64

09:34:22.141777IPrhel75>ec2-54-204-39-132.compute-1.amazonaws.com:ICMPechorequest,id20361,seq3,length64

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

主机

用host参数只抓取和特定主机相关的数据包:

$sudotcpdump-iany-c5-nnhost54.204.39.132

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

09:54:20.042023IP192.168.122.98.39326>54.204.39.132.80:Flags[S],seq1375157070,win29200,options[mss1460,sackOK,TSval122350391ecr0,nop,wscale7],length0

09:54:20.088127IP54.204.39.132.80>192.168.122.98.39326:Flags[S.],seq1935542841,ack1375157071,win28960,options[mss1460,sackOK,TSval522713542ecr122350391,nop,wscale9],length0

09:54:20.088204IP192.168.122.98.39326>54.204.39.132.80:Flags[.],ack1,win229,options[nop,nop,TSval122350437ecr522713542],length0

09:54:20.088734IP192.168.122.98.39326>54.204.39.132.80:Flags[P.],seq1:113,ack1,win229,options[nop,nop,TSval122350438ecr522713542],length112:HTTP:GET/HTTP/1.1

09:54:20.129733IP54.204.39.132.80>192.168.122.98.39326:Flags[.],ack113,win57,options[nop,nop,TSval522713552ecr122350438],length0

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

如上所示,只抓取和显示与54.204.39.132有关的数据包。

端口号

tcpdump可以根据服务类型或者端口号来筛选数据包。例如,抓取和HTTP服务相关的数据包:

$sudotcpdump-iany-c5-nnport80

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

09:58:28.790548IP192.168.122.98.39330>54.204.39.132.80:Flags[S],seq1745665159,win29200,options[mss1460,sackOK,TSval122599140ecr0,nop,wscale7],length0

09:58:28.834026IP54.204.39.132.80>192.168.122.98.39330:Flags[S.],seq4063583040,ack1745665160,win28960,options[mss1460,sackOK,TSval522775728ecr122599140,nop,wscale9],length0

09:58:28.834093IP192.168.122.98.39330>54.204.39.132.80:Flags[.],ack1,win229,options[nop,nop,TSval122599183ecr522775728],length0

09:58:28.834588IP192.168.122.98.39330>54.204.39.132.80:Flags[P.],seq1:113,ack1,win229,options[nop,nop,TSval122599184ecr522775728],length112:HTTP:GET/HTTP/1.1

09:58:28.878445IP54.204.39.132.80>192.168.122.98.39330:Flags[.],ack113,win57,options[nop,nop,TSval522775739ecr122599184],length0

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

IP地址/主机名

同样,你也可以根据源IP地址或者目的IP地址或者主机名来筛选数据包。例如抓取源IP地址为192.168.122.98的数据包:

$sudotcpdump-iany-c5-nnsrc192.168.122.98

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

10:02:15.220824IP192.168.122.98.39436>192.168.122.1.53:59332+A?opensource.com.(32)

10:02:15.220862IP192.168.122.98.39436>192.168.122.1.53:20749+AAAA?opensource.com.(32)

10:02:15.364062IP192.168.122.98.39334>54.204.39.132.80:Flags[S],seq1108640533,win29200,options[mss1460,sackOK,TSval122825713ecr0,nop,wscale7],length0

10:02:15.409229IP192.168.122.98.39334>54.204.39.132.80:Flags[.],ack669337581,win229,options[nop,nop,TSval122825758ecr522832372],length0

10:02:15.409667IP192.168.122.98.39334>54.204.39.132.80:Flags[P.],seq0:112,ack1,win229,options[nop,nop,TSval122825759ecr522832372],length112:HTTP:GET/HTTP/1.1

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

注意此处示例中抓取了来自源IP地址192.168.122.98的53端口以及80端口的数据包,它们的应答包没有显示出来因为那些包的源IP地址已经变了。

相对的,使用dst就是按目的IP/主机名来筛选数据包。

$sudotcpdump-iany-c5-nndst192.168.122.98

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

10:05:03.572931IP192.168.122.1.53>192.168.122.98.47049:22481/0/0A54.204.39.132(48)

10:05:03.572944IP192.168.122.1.53>192.168.122.98.47049:337700/0/0(32)

10:05:03.621833IP54.204.39.132.80>192.168.122.98.39338:Flags[S.],seq3474204576,ack3256851264,win28960,options[mss1460,sackOK,TSval522874425ecr122993922,nop,wscale9],length0

10:05:03.667767IP54.204.39.132.80>192.168.122.98.39338:Flags[.],ack113,win57,options[nop,nop,TSval522874436ecr122993972],length0

10:05:03.672221IP54.204.39.132.80>192.168.122.98.39338:Flags[P.],seq1:643,ack113,win57,options[nop,nop,TSval522874437ecr122993972],length642:HTTP:HTTP/1.1302Found

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

多条件筛选

当然,可以使用多条件组合来筛选数据包,使用and以及or逻辑操作符来创建过滤规则。例如,筛选来自源IP地址192.168.122.98的HTTP数据包:

$sudotcpdump-iany-c5-nnsrc192.168.122.98andport80

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

10:08:00.472696IP192.168.122.98.39342>54.204.39.132.80:Flags[S],seq2712685325,win29200,options[mss1460,sackOK,TSval123170822ecr0,nop,wscale7],length0

10:08:00.516118IP192.168.122.98.39342>54.204.39.132.80:Flags[.],ack268723504,win229,options[nop,nop,TSval123170865ecr522918648],length0

10:08:00.516583IP192.168.122.98.39342>54.204.39.132.80:Flags[P.],seq0:112,ack1,win229,options[nop,nop,TSval123170866ecr522918648],length112:HTTP:GET/HTTP/1.1

10:08:00.567044IP192.168.122.98.39342>54.204.39.132.80:Flags[.],ack643,win239,options[nop,nop,TSval123170916ecr522918661],length0

10:08:00.788153IP192.168.122.98.39342>54.204.39.132.80:Flags[F.],seq112,ack643,win239,options[nop,nop,TSval123171137ecr522918661],length0

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

你也可以使用括号来创建更为复杂的过滤规则,但在shell中请用引号包含你的过滤规则以防止被识别为shell表达式:

$sudotcpdump-iany-c5-nn"port80and(src192.168.122.98orsrc54.204.39.132)"

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

10:10:37.602214IP192.168.122.98.39346>54.204.39.132.80:Flags[S],seq871108679,win29200,options[mss1460,sackOK,TSval123327951ecr0,nop,wscale7],length0

10:10:37.650651IP54.204.39.132.80>192.168.122.98.39346:Flags[S.],seq854753193,ack871108680,win28960,options[mss1460,sackOK,TSval522957932ecr123327951,nop,wscale9],length0

10:10:37.650708IP192.168.122.98.39346>54.204.39.132.80:Flags[.],ack1,win229,options[nop,nop,TSval123328000ecr522957932],length0

10:10:37.651097IP192.168.122.98.39346>54.204.39.132.80:Flags[P.],seq1:113,ack1,win229,options[nop,nop,TSval123328000ecr522957932],length112:HTTP:GET/HTTP/1.1

10:10:37.692900IP54.204.39.132.80>192.168.122.98.39346:Flags[.],ack113,win57,options[nop,nop,TSval522957942ecr123328000],length0

5packetscaptured

5packetsreceivedbyfilter

0packetsdroppedbykernel

该例子中我们只抓取了来自源IP为192.168.122.98或者54.204.39.132的HTTP(端口号80)的数据包。使用该方法就很容易抓取到数据流中交互双方的数据包了。

5、检查数据包内容

在以上的示例中,我们只按数据包头部的信息来建立规则筛选数据包,例如源地址、目的地址、端口号等等。有时我们需要分析网络连接问题,可能需要分析数据包中的内容来判断什么内容需要被发送、什么内容需要被接收等。tcpdump提供了两个选项可以查看数据包内容,-X以十六进制打印出数据报文内容,-A打印数据报文的ASCII值。

例如,HTTP请求报文内容如下:

$sudotcpdump-iany-c10-nn-Aport80

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

13:02:14.871803IP192.168.122.98.39366>54.204.39.132.80:Flags[S],seq2546602048,win29200,options[mss1460,sackOK,TSval133625221ecr0,nop,wscale7],length0

E..<..@.@.....zb6.'....P...@......r............

............................

13:02:14.910734IP54.204.39.132.80>192.168.122.98.39366:Flags[S.],seq1877348646,ack2546602049,win28960,options[mss1460,sackOK,TSval525532247ecr133625221,nop,wscale9],length0

E..<..@./..a6.'...zb.P..o..&...A..qa..........

.R.W.......................

13:02:14.910832IP192.168.122.98.39366>54.204.39.132.80:Flags[.],ack1,win229,options[nop,nop,TSval133625260ecr525532247],length0

E..4..@.@.....zb6.'....P...Ao..'...........

.....R.W................

13:02:14.911808IP192.168.122.98.39366>54.204.39.132.80:Flags[P.],seq1:113,ack1,win229,options[nop,nop,TSval133625261ecr525532247],length112:HTTP:GET/HTTP/1.1

E.....@.@..1..zb6.'....P...Ao..'...........

.....R.WGET/HTTP/1.1

User-Agent:Wget/1.14(linux-gnu)

Accept:*/*

Host:opensource.com

Connection:Keep-Alive

................

13:02:14.951199IP54.204.39.132.80>192.168.122.98.39366:Flags[.],ack113,win57,options[nop,nop,TSval525532257ecr133625261],length0

E..4.F@./.."6.'...zb.P..o..'.......9.2.....

.R.a....................

13:02:14.955030IP54.204.39.132.80>192.168.122.98.39366:Flags[P.],seq1:643,ack113,win57,options[nop,nop,TSval525532258ecr133625261],length642:HTTP:HTTP/1.1302Found

E....G@./...6.'...zb.P..o..'.......9.......

.R.b....HTTP/1.1302Found

Server:nginx

Date:Sun,23Sep201817:02:14GMT

Content-Type:text/html;charset=iso-8859-1

Content-Length:207

X-Content-Type-Options:nosniff

Location:https://opensource.com/

Cache-Control:max-age=1209600

Expires:Sun,07Oct201817:02:14GMT

X-Request-ID:v-6baa3acc-bf52-11e8-9195-22000ab8cf2d

X-Varnish:632951979

Age:0

Via:1.1varnish(Varnish/5.2)

X-Cache:MISS

Connection:keep-alive

<!DOCTYPEHTMLPUBLIC"-//IETF//DTDHTML2.0//EN">

<html><head>

<title>302Found</title>

</head><body>

<h1>Found</h1>

<p>Thedocumenthasmoved<ahref="https://opensource.com/">here</a>.</p>

</body></html>

................

13:02:14.955083IP192.168.122.98.39366>54.204.39.132.80:Flags[.],ack643,win239,options[nop,nop,TSval133625304ecr525532258],length0

E..4..@.@.....zb6.'....P....o..............

.....R.b................

13:02:15.195524IP192.168.122.98.39366>54.204.39.132.80:Flags[F.],seq113,ack643,win239,options[nop,nop,TSval133625545ecr525532258],length0

E..4..@.@.....zb6.'....P....o..............

.....R.b................

13:02:15.236592IP54.204.39.132.80>192.168.122.98.39366:Flags[F.],seq643,ack114,win57,options[nop,nop,TSval525532329ecr133625545],length0

E..4.H@./..6.'...zb.P..o..........9.I.....

.R......................

13:02:15.236656IP192.168.122.98.39366>54.204.39.132.80:Flags[.],ack644,win239,options[nop,nop,TSval133625586ecr525532329],length0

E..4..@.@.....zb6.'....P....o..............

.....R..................

10packetscaptured

10packetsreceivedbyfilter

0packetsdroppedbykernel

这对定位一些普通HTTP调用API接口的问题很有用。当然如果是加密报文,这个输出也就没多大用了。

6、保存抓包数据

tcpdump提供了保存抓包数据的功能以便后续分析数据包。例如,你可以夜里让它在那里抓包,然后早上起来再去分析它。同样当有很多数据包时,显示过快也不利于分析,将数据包保存下来,更有利于分析问题。

使用-w选项来保存数据包而不是在屏幕上显示出抓取的数据包:

$sudotcpdump-iany-c10-nn-wwebserver.pcapport80

[sudo]passwordforricardo:

tcpdump:listeningonany,link-typeLINUX_SLL(Linuxcooked),capturesize262144bytes

10packetscaptured

10packetsreceivedbyfilter

0packetsdroppedbykernel

该命令将抓取的数据包保存到文件webserver.pcap。后缀名pcap表示文件是抓取的数据包格式。

正如示例中所示,保存数据包到文件中时屏幕上就没有任何有关数据报文的输出,其中-c10表示抓取到10个数据包后就停止抓包。如果想有一些反馈来提示确实抓取到了数据包,可以使用-v选项。

tcpdump将数据包保存在二进制文件中,所以不能简单的用文本编辑器去打开它。使用-r选项参数来阅读该文件中的报文内容:

$tcpdump-nn-rwebserver.pcap

readingfromfilewebserver.pcap,link-typeLINUX_SLL(Linuxcooked)

13:36:57.679494IP192.168.122.98.39378>54.204.39.132.80:Flags[S],seq3709732619,win29200,options[mss1460,sackOK,TSval135708029ecr0,nop,wscale7],length0

13:36:57.718932IP54.204.39.132.80>192.168.122.98.39378:Flags[S.],seq1999298316,ack3709732620,win28960,options[mss1460,sackOK,TSval526052949ecr135708029,nop,wscale9],length0

13:36:57.719005IP192.168.122.98.39378>54.204.39.132.80:Flags[.],ack1,win229,options[nop,nop,TSval135708068ecr526052949],length0

13:36:57.719186IP192.168.122.98.39378>54.204.39.132.80:Flags[P.],seq1:113,ack1,win229,options[nop,nop,TSval135708068ecr526052949],length112:HTTP:GET/HTTP/1.1

13:36:57.756979IP54.204.39.132.80>192.168.122.98.39378:Flags[.],ack113,win57,options[nop,nop,TSval526052959ecr135708068],length0

13:36:57.760122IP54.204.39.132.80>192.168.122.98.39378:Flags[P.],seq1:643,ack113,win57,options[nop,nop,TSval526052959ecr135708068],length642:HTTP:HTTP/1.1302Found

13:36:57.760182IP192.168.122.98.39378>54.204.39.132.80:Flags[.],ack643,win239,options[nop,nop,TSval135708109ecr526052959],length0

13:36:57.977602IP192.168.122.98.39378>54.204.39.132.80:Flags[F.],seq113,ack643,win239,options[nop,nop,TSval135708327ecr526052959],length0

13:36:58.022089IP54.204.39.132.80>192.168.122.98.39378:Flags[F.],seq643,ack114,win57,options[nop,nop,TSval526053025ecr135708327],length0

13:36:58.022132IP192.168.122.98.39378>54.204.39.132.80:Flags[.],ack644,win239,options[nop,nop,TSval135708371ecr526053025],length0

$

这里不需要管理员权限sudo了,因为此刻并不是在网络接口处抓包。

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

$tcpdump-nn-rwebserver.pcapsrc54.204.39.132

readingfromfilewebserver.pcap,link-typeLINUX_SLL(Linuxcooked)

13:36:57.718932IP54.204.39.132.80>192.168.122.98.39378:Flags[S.],seq1999298316,ack3709732620,win28960,options[mss1460,sackOK,TSval526052949ecr135708029,nop,wscale9],length0

13:36:57.756979IP54.204.39.132.80>192.168.122.98.39378:Flags[.],ack113,win57,options[nop,nop,TSval526052959ecr135708068],length0

13:36:57.760122IP54.204.39.132.80>192.168.122.98.39378:Flags[P.],seq1:643,ack113,win57,options[nop,nop,TSval526052959ecr135708068],length642:HTTP:HTTP/1.1302Found

13:36:58.022089IP54.204.39.132.80>192.168.122.98.39378:Flags[F.],seq643,ack114,win57,options[nop,nop,TSval526053025ecr135708327],length0

下一步做什么?

以上的基本功能已经可以帮助你使用强大的tcpdump抓包工具了。更多的内容请参考tcpdump网站以及它的帮助文件。

tcpdump命令行工具为分析网络流量数据包提供了强大的灵活性。如果需要使用图形工具来抓包请参考Wireshark。

Wireshark还可以用来读取tcpdump保存的pcap文件。你可以使用tcpdump命令行在没有GUI界面的远程机器上抓包然后在Wireshark中分析数据包。


via:https://opensource.com/article/18/10/introduction-tcpdump

作者:RicardoGerardi选题:lujun9972译者:jrg校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

点击“了解更多”可访问文内链接

本文主要介绍了关于抢包(进)是什么意思的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/85577.html