9月 212018
 

名称(NAME)

tcpdump-转储网络上的数据流

总览(SYNOPSIS)

tcpdump[-adeflnNOpqStvx][-ccount][-Ffile]

[-iinterface][-rfile][-ssnaplen]

[-Ttype][-wfile][expression]

描述(DESCRIPTION)

Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头.

对于SunOSnitbpf界面:要运行tcpdump,你必须有/dev/nit/dev/bpf*的读访问权限.

对于Solarisdlpi:你必须有网络仿真设备(networkpseudodevice),/dev/le的读访问权限.

对于HP-UXdlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIXsnoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序.

对于UltrixDigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump.

对于BSD:你必须有/dev/bpf*的读访问权限.

选项(OPTIONS)

-a

试着把网络和广播地址转换成名称.

-c

当收到count报文后退出.

-d

把编译好的报文匹配模板(packet-matchingcode)翻译成可读形式,传往标准输出,然后退出.

-dd

把报文匹配模板(packet-matchingcode)C程序片断的形式输出.

-ddd

把报文匹配模板(packet-matchingcode)以十进制数形式输出(前面加上总数).

-e

每行都显示链路层报头.

-f

用数字形式显示外部的互联网地址,而不是字符形式(这个选项用来绕开脑壳坏光的SUN黄页服务器的问题一般说来它翻译外部网络数字地址的时候会长期挂起).

-F

file的内容用作过滤表达式.忽略命令行上的表达式.

-i

监听interface.如果不指定接口,tcpdump在系统的接口清单中,寻找号码最小,已经配置好的接口(loopback除外).选中的时候会中断连接.

-l

行缓冲标准输出.可用于捕捉数据的同时查看数据.例如,

tcpdump-l|teedat”ortcpdump-l>dat&tail-fdat”.

-n

别把地址转换成名字(就是说,主机地址,端口号等)

-N

不显示主机名字中的域名部分.例如,如果使用这个选项,tcpdump只显示nic”,而不是nic.ddn.mil”.

-O

禁止运行报文匹配模板的优化器.只有当你怀疑优化器有bug时才有用.

-p

禁止把接口置成promiscuous模式.注意,接口有可能因其他原因而处于promiscuous模式;因此,’-p’不能作为etherhost{local-hw-addr}etherbroadcast'的简写.

-q

快速输出.显示较少的协议信息,输出行会短一点点.

-r

file中读入数据报(文件是用-w选项创建的).如果file-'',就读标准输入.

-s

从每个报文中截取snaplen字节的数据,而不是缺省的68(如果是SunOSNIT,最小值是96).68个字节适用于IP,ICMP,TCPUDP,但是有可能截掉名字服务器和NFS报文的协议信息(见下面).输出时如果指定[|proto]'',tcpdump可以指出那些捕捉量过小的数据报,这里的proto是截断发生处的协议层名称.注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失.你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了.

-T

把通过"expression"挑选出来的报文解释成指定的type.目前已知的类型有:rpc(远程过程调用RemoteProcedureCall),rtp(实时应用协议Real-TimeApplicationsprotocol),rtcp(实时应用控制协议Real-TimeApplicationscontrolprotocol),vat(可视音频工具VisualAudioTool),wb(分布式白板distributedWhiteBoard).

-S

显示绝对的,而不是相对的TCP序列号.

-t

禁止显示时戳标志.

-tt

显示未格式化的时戳标志.

-v

(稍微多一点)繁琐的输出.例如,显示IP数据报中的生存周期和服务类型.

-vv

更繁琐的输出.例如,显示NFS应答报文的附加域.

-w

把原始报文存进file,而不是分析和显示.它们可以以后用-r选项显示.如果file-'',就写往标准输出.

-x

16进制数形式显示每一个报文(去掉链路层报头后).可以显示较小的完整报文,否则只显示snaplen个字节.

expression

用来选择要转储的数据报.如果没有指定expression,就转储网络的全部报文.否则,只转储相对expressiontrue’的数据报.

expression一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:

type

类型修饰子指出标识名称或标识数字代表什么类型的东西.可以使用的类型有host,netport.例如,hostfoo',net128.3′,port20'.如果不指定类型修饰子,就使用缺省的host.

dir

方向修饰子指出相对于标识的传输方向(数据是传入还是传出标识).可以使用的方向有src,dst,srcordstsrcanddst.例如,srcfoo’,dstnet128.3',srcordstportftp-data’.如果不指定方向修饰子,就使用缺省的srcordst.对于null'链路层(就是说象slip之类的点到点协议),inboundoutbound修饰子指定所需的传输方向.

proto

协议修饰子要求匹配指定的协议.可以使用的协议有:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcpudp.例如,ethersrcfoo’,arpnet128.3',tcpport21′.如果不指定协议修饰子,就使用所有符合类型的协议.例如,srcfoo'(ip或arprarp)srcfoo'(注意后者不符合语法),netbar'(ip或arprarp)netbar’,port53'(tcp或udp)port53′.

[fddi'实际上是ether’的别名;分析器把它们视为用在指定网络接口上的数据链路层.”FDDI报头包含类似于以太协议的源目地址,而且通常包含类似于以太协议的报文类型,因此你可以过滤FDDI,就象分析以太协议一样.FDDI报头也包含其他域,但是你不能在过滤器表达式里显式描述.]

作为上述的补充,有一些特殊的原语'关键字,它们不同于上面的模式:gateway,broadcast,less,greater和数学表达式.这些在后面有叙述.

更复杂的过滤器表达式可以通过and,ornot连接原语来组建.

例如,hostfooandnotportftpandnotportftp-data’.为了少敲点键,可以忽略相同的修饰子.

例如,tcpdstportftporftp-dataordomain'

实际上就是tcpdstportftportcpdstportftp-dataortcpdstportdomain’.

允许的原语有:

dsthosthost

如果报文中IP的目的地址域是host,则逻辑为真.host既可以是地址,也可以是主机名.

srchosthost

如果报文中IP的源地址域是host,则逻辑为真.

hosthost

如果报文中IP的源地址域或者目的地址域是host,则逻辑为真.上面所有的host表达式都可以加上ip,arp,rarp关键字做前缀,就象:

iphosthost

它等价于:

etherproto\ipandhosthost

如果host是拥有多个IP地址的主机名,它的每个地址都会被查验.

etherdstehost

如果报文的以太目的地址是ehost,则逻辑为真.Ehost既可以是名字(/etc/ethers里有),也可以是数字(有关数字格式另见ethers(3N)).

ethersrcehost

如果报文的以太源地址是ehost,则逻辑为真.

etherhostehost

如果报文的以太源地址或以太目的地址是ehost,则逻辑为真.

gatewayhost

如果报文把host当做网关,则逻辑为真.也就是说,报文的以太源或目的地址是host,但是IP的源目地址都不是host.host必须是个主机名,而且必须存在/etc/hosts/etc/ethers.(一个等价的表达式是

etherhostehostandnothosthost

对于host/ehost,它既可以是名字,也可以是数字.)

dstnetnet

如果报文的IP目的地址属于网络号net,则逻辑为真.net既可以是名字(存在/etc/networks),也可以是网络号.(详见networks(4)).

srcnetnet

如果报文的IP源地址属于网络号net,则逻辑为真.

netnet

如果报文的IP源地址或目的地址属于网络号net,则逻辑为真.

netnetmaskmask

如果IP地址匹配指定网络掩码(netmask)net,则逻辑为真.本原语可以用srcdst修饰.

netnet/len

如果IP地址匹配指定网络掩码的net,则逻辑为真,掩码的有效位宽为len.本原语可以用srcdst修饰.

dstportport

如果报文是ip/tcpip/udp,并且目的端口是port,则逻辑为真.port是一个数字,也可以是/etc/services中说明过的名字(参看tcp(4P)udp(4P)).如果使用名字,则检查端口号和协议.如果使用数字,或者有二义的名字,则只检查端口号(例如,dstport513将显示tcp/login的数据和udp/who的数据,portdomain将显示tcp/domainudp/domain的数据).

srcportport

如果报文的源端口号是port,则逻辑为真.

portport

如果报文的源端口或目的端口是port,则逻辑为真.上述的任意一个端口表达式都可以用关键字tcpudp做前缀,就象:

tcpsrcportport

它只匹配源端口是portTCP报文.

lesslength

如果报文的长度小于等于length,则逻辑为真.它等同于:

len<=length.

greaterlength

如果报文的长度大于等于length,则逻辑为真.它等同于:

len>=length.

ipprotoprotocol

如果报文是IP数据报(参见ip(4P)),其内容的协议类型是protocol,则逻辑为真.Protocol可以是数字,也可以是下列名称中的一个:icmp,igrp,udp,nd,tcp.注意这些标识符tcp,udp,icmp也同样是关键字,所以必须用反斜杠(\)转义,C-shell中应该是\\.

etherbroadcast

如果报文是以太广播报文,则逻辑为真.关键字ether是可选的.

ipbroadcast

如果报文是IP广播报文,则逻辑为真.Tcpdump检查全0和全1广播约定,并且检查本地的子网掩码.

ethermulticast

如果报文是以太多目传送报文(multicast),则逻辑为真.关键字ether是可选的.这实际上是ether[0]&1!=0'的简写.

ipmulticast

如果报文是IP多目传送报文,则逻辑为真.

etherprotoprotocol

如果报文协议属于以太类型的protocol,则逻辑为真.Protocol可以是数字,也可以是名字,ip,arp,rarp.注意这些标识符也是关键字,所以必须用反斜杠(\)转义.[如果是FDDI(例如,fddiprotocolarp’),协议标识来自802.2逻辑链路控制(LLC)报头,它通常位于FDDI报头的顶层.当根据协议标识过滤报文时,Tcpdump假设所有的FDDI报文含有LLC报头,而且LLC报头用的是SNAP格式.]

decnetsrchost

如果DECNET的源地址是host,则逻辑为真,该主机地址的形式可能是10.123”,或者是DECNET主机名.[只有配置成运行DECNETUltrix系统支持DECNET主机名.]

decnetdsthost

如果DECNET的目的地址是host,则逻辑为真.

decnethosthost

如果DECNET的源地址或目的地址是host,则逻辑为真.

ip,arp,rarp,decnet

:etherprotop

的简写形式,其中p为上述协议的一种.

lat,moprc,mopdl

:etherprotop

的简写形式,其中p为上述协议的一种.注意tcpdump目前不知道如何分析这些协议.

tcp,udp,icmp

:ipprotop

的简写形式,其中p为上述协议的一种.

exprrelopexpr

如果这个关系成立,则逻辑为真,其中relop>,<,>=,<=,=,!=之一,expr是数学表达式,由常整数(标准C语法形式),普通的二进制运算符[+,-,*,/,&,|],一个长度运算符,和指定的报文数据访问算符组成.要访问报文内的数据,使用下面的语法:

proto[expr:size]

Protoether,fddi,ip,arp,rarp,tcp,udp,oricmp之一,同时也指出了下标操作的协议层.expr给出字节单位的偏移量,该偏移量相对于指定的协议层.Size是可选项,指出感兴趣的字节数;它可以是1,2,4,缺省为1字节.由关键字len给出的长度运算符指明报文的长度.

例如,ether[0]&1!=0'捕捉所有的多目传送报文.表达式ip[0]&0xf!=5′捕捉所有带可选域的IP报文.表达式ip[6:2]&0x1fff=0'只捕捉未分片和片偏移为0的数据报.这种检查隐含在tcpudp下标操作中.例如,tcp[0]一定是TCP报头的第一个字节,而不是其中某个IP片的第一个字节.

原语可以用下述方法结合使用:

园括弧括起来的原语和操作符(园括弧在Shell中有专用,所以必须转义).

取反操作(!’ornot').

连结操作(&&’orand').

或操作(||’oror').

取反操作有最高优先级.或操作和连结操作有相同的优先级,运算时从左到右结合.注意连结操作需要显式的and算符,而不是并列放置.

如果给出标识符,但没给关键字,那么暗指最近使用的关键字.例如,

nothostvsandace

作为

nothostvsandhostace

的简写形式,不应该和

not(hostvsorace)

混淆.

表达式参数可以作为单个参数传给tcpdump,也可以作为复合参数,后者更方便一些.一般说来,如果表达式包含Shell元字符(metacharacter),传递单个括起来的参数要容易一些.复合参数在被解析前用空格联接一起.

示例(EXAMPLES)

显示所有进出sundown的报文:

tcpdumphostsundown

显示helios和主机hot,ace之间的报文传送:

tcpdumphostheliosand\(hotorace\)

显示ace和除了helios以外的所有主机的IP报文:

tcpdumpiphostaceandnothelios

显示本地的主机和Berkeley的主机之间的网络数据:

tcpdumpnetucb-ether

显示所有通过网关snupftp报文(注意这个表达式被单引号括起,防止shell解释园括弧):

tcpdump'gatewaysnupand(portftporftp-data)'

显示既不是来自本地主机,也不是传往本地主机的网络数据(如果你把网关通往某个其他网络,这个做法将不会把数据发往你的本地网络).

tcpdumpipandnotnetlocalnet

显示每个TCP会话的起始和结束报文(SYNFIN报文),而且会话方中有一个远程主机.

tcpdump'tcp[13]&3!=0andnotsrcanddstnetlocalnet'

显示经过网关snup中大于576字节的IP数据报:

tcpdump'gatewaysnupandip[2:2]>576'

显示IP广播或多目传送的数据报,这些报文不是通过以太网的广播或多目传送形式传送的:

tcpdump'ether[0]&1=0andip[16]>=224'

显示所有不是回响请求/应答的ICMP报文(也就是说,不是ping报文):

tcpdump'icmp[0]!=8andicmp[0]!=0"

输出格式(OUTPUTformAT)

tcpdump的输出格式取决于协议.下面的描述给出大多数格式的简要说明和范例.

链路层报头(LinkLevelHeaders)

如果给出'-e'选项就显示链路层报头.在以太网上,显示报文的源目地址,协议和报文长度.

FDDI网络上,'-e'选项导致tcpdump显示出帧控制(framecontrol)’,源目地址和报文长度.(帧控制'域负责解释其余的报文.普通报文(比如说载有IP数据报)异步报文,优先级介于07;例如,async4'.这些被认为载有802.2逻辑链路控制(LLC)报文;如果它们不是ISO数据报或者所谓的SNAP报文,就显示出LLC报头.

(注意:以下描述中假设你熟悉RFC-1144中说明的SLIP压缩算法.)

SLIP链路上,tcpdump显示出方向指示(I''指inbound,O''指outbound),报文类型和压缩信息.首先显示的是报文类型.有三种类型ip,utcpctcp.对于ip报文不再显示更多的链路信息.对于TCP报文,在类型后面显示连接标识.如果报文是压缩过的,就显示出编码的报头.特殊情形以*S+n*SA+n的形式显示,这里的n是顺序号(或顺序号及其确认)发生的改变总和.如果不是特殊情形,就显示0或多少个改变.改变由U(urgentpointer),W(window),A(ack),S(sequencenumber)I(packetID)指明,后跟一个变化量(+nor-n),或另一个值(=n).最后显示报文中的数据总和,以及压缩报头的长度.

例如,下面一行显示了一个传出的压缩的TCP报文,有一个隐含的连接标识;确认(ack)的变化量是6,顺序号是49,报文ID6;有三个字节的数据和六个字节的压缩报头:

Octcp*A+6S+49I+63(6)

ARP/RARP报文

Arp/rarp报文的输出显示请求类型及其参数.输出格式倾向于能够自我解释.这里是一个简单的例子,来自主机rtsg到主机csam'rlogin'开始部分:

arpwho-hascsamtellrtsg

arpreplycsamis-atCSAM

第一行说明rtsg发出一个arp报文询问internet主机csam的以太网地址.Csam用它的以太地址作应答(这个例子中,以太地址是大写的,internet地址为小写).

如果用tcpdump-n看上去要清楚一些:

arpwho-has128.3.254.6tell128.3.254.68

arpreply128.3.254.6is-at02:07:01:00:01:c4

如果用tcpdump-e,可以看到实际上第一个报文是广播,第二个报文是点到点的:

RTSGBroadcast080664:arpwho-hascsamtellrtsg

CSAMRTSG080664:arpreplycsamis-atCSAM

这里第一个报文指出以太网源地址是RTSG,目的地址是以太网广播地址,类型域为16进制数0806(类型ETHER_ARP),报文全长64字节.

TCP报文

(注意:以下的描述中假设你熟悉RFC-793中说明的TCP协议,如果你不了解这个协议,无论是本文还是tcpdump都对你用处不大)

一般说来tcp协议的输出格式是:

src>dst:flagsdata-seqnoackwindowurgentoptions

Srcdst是源目IP地址和端口.FlagsS(SYN),F(FIN),P(PUSH)R(RST)或单独的.'(无标志),或者是它们的组合.Data-seqno说明了本报文中的数据在流序号中的位置(见下例).Ack是在这条连接上信源机希望下一个接收的字节的流序号(sequencenumber).Window是在这条连接上信源机接收缓冲区的字节大小.Urg表明报文内是紧急(urgent)'数据.Optionstcp可选报头,用尖括号括起(例如,).

Src,dstflags肯定存在.其他域依据报文的tcp报头内容,只输出有必要的部分.

下面是从主机rtsgrlogin到主机csam的开始部分.

rtsg.1023>csam.login:S768512:768512(0)win4096

csam.login>rtsg.1023:S947648:947648(0)ack768513win4096

rtsg.1023>csam.login:.ack1win4096

rtsg.1023>csam.login:P1:2(1)ack1win4096

csam.login>rtsg.1023:.ack2win4096

rtsg.1023>csam.login:P2:21(19)ack1win4096

csam.login>rtsg.1023:P1:2(1)ack21win4077

csam.login>rtsg.1023:P2:3(1)ack21win4077urg1

csam.login>rtsg.1023:P3:4(1)ack21win4077urg1

第一行是说从rtsgtcp端口1023csamlogin端口发送报文.S标志表明设置了SYN标志.报文的流序号是768512,没有数据.(这个写成first:last(nbytes)’,意思是从流序号firstlast,不包括last,nbytes字节的用户数据'.)此时没有捎带确认(piggy-backedack),有效的接收窗口是4096字节,有一个最大段大小(max-segment-size)的选项,请求设置mss1024字节.

Csam用类似的形式应答,只是增加了一个对rtsgSYN的捎带确认.然后Rtsg确认csamSYN..’意味着没有设置标志.这个报文不包含数据,因此也就没有数据的流序号.注意这个确认流序号是一个小整数(1).tcpdump第一次发现一个tcp会话时,它显示报文携带的流序号.在随后收到的报文里,它显示当前报文和最初那个报文的流序号之差.这意味着从第一个报文开始,以后的流序号可以理解成数据流中的相对位移asrelativebytepositionsintheconversation’sdatastream(withthefirstdatabyteeachdirectionbeing1').-S’选项能够改变这个特性,直接显示原始的流序号.

在第六行,rtsg传给csam19个字节的数据(字节220).报文中设置了PUSH标志.第七行csam表明它收到了rtsg的数据,字节序号是21,但不包括第21个字节.显然大多数数据在socket的缓冲区内,因为csam的接收窗口收到的数据小于19个字节.同时csamrtsg发送了一个字节的数据.第八和第九行显示csam发送了两个字节的紧急数据到rtsg.

如果捕捉区设置的过小,以至于tcpdump不能捕捉到完整的TCP报头,tcpdump会尽可能的翻译已捕获的部分,然后显示[|tcp]”,表明无法翻译其余部分.如果报头包含一个伪造的选项(onewithalengththat’seithertoosmallorbeyondtheendoftheheader),tcpdump显示[badopt]”并且不再翻译其他选项部分(因为它不可能判断出从哪儿开始).如果报头长度表明存在选项,但是IP数据报长度不够,不可能真的保存选项,tcpdump就显示[badhdrlength]”.

UDP报文

UDP格式就象这个rwho报文显示的:

actinide.who>broadcast.who:udp84

就是说把一个udp数据报从主机actinidewho端口发送到broadcast,Internet广播地址的who端口.报文包含84字节的用户数据.

某些UDP服务能够识别出来(从源目端口号上),因而显示出更高层的协议信息.特别是域名服务请求(RFC-1034/1035)NFSRPC调用(RFC-1050).

UDP域名服务请求(NameServerRequests)

(注意:以下的描述中假设你熟悉RFC-1035说明的域名服务协议.如果你不熟悉这个协议,下面的内容就象是天书.)

域名服务请求的格式是

src>dst:idop?flagsqtypeqclassname(len)

h2opolo.1538>helios.domain:3+A?ucbvax.berkeley.edu.(37)

主机h2opolo访问helios上的域名服务,询问和ucbvax.berkeley.edu.关联的地址记录(qtype=A).查询号是3'.+’表明设置了递归请求标志.查询长度是37字节,不包括UDPIP.查询操作是普通的Query操作,因此op域可以忽略.如果op设置成其他什么东西,它应该显示在3'+’之间.类似的,qclass是普通的C_IN类型,也被忽略了.其他类型的qclass应该在A'后面显示.

Tcpdump会检查一些不规则情况,相应的结果作为补充域放在方括号内:如果某个查询包含回答,名字服务或管理机构部分,就把ancount,nscount,arcount显示成[na]’,[nn]'或[nau]’,这里的n代表相应的数量.如果在第二和第三字节中,任何一个回答位(AA,RArcode)或任何一个必须为零'的位被置位,就显示[b2&3=x]’,这里的x是报头第二和第三字节的16进制数.

UDP名字服务回答

名字服务回答的格式是

src>dst:idoprcodeflagsa/n/autypeclassdata(len)

helios.domain>h2opolo.1538:33/3/7A128.32.137.3(273)

helios.domain>h2opolo.1537:2NXDomain*0/1/0(97)

第一个例子里,helios回答了h2opolo发出的标识为3的询问,一共是3个回答记录,3个名字服务记录和7个管理结构记录.第一个回答纪录的类型是A(地址),数据是internet地址128.32.137.3.回答的全长为273字节,不包括UDPIP报头.作为A记录的class(C_IN)可以忽略op(询问)rcode(NoError).

在第二个例子里,helios对标识为2的询问作出域名不存在(NXDomain)的回答,没有回答记录,一个名字服务记录,而且没有管理结构.

*'表明设置了权威回答(authoritativeanswer).由于没有回答记录,这里就不显示type,classdata.

其他标志字符可以显示为-‘(没有设置递归有效(RA))|'(设置消息截短(TC)).如果问题部分没有有效的内容,就显示[nq]'.

注意名字服务的询问和回答一般说来比较大,68字节的snaplen可能无法捕捉到足够的报文内容.如果你的确在研究名字服务的情况,可以使用-s选项增大捕捉缓冲区.-s128′应该效果不错了.

NFS请求和响应

SunNFS(网络文件系统)的请求和响应显示格式是:

src.xid>dst.nfs:lenopargs

src.nfs>dst.xid:replystatlenopresults

sushi.6709>wrl.nfs:112readlinkfh21,24/10.73165

wrl.nfs>sushi.6709:replyok40readlink”../var”

sushi.201b>wrl.nfs:

144lookupfh9,74/4096.6878″xcolors”

wrl.nfs>sushi.201b:

replyok128lookupfh9,74/4134.3150

在第一行,主机sushiwrl发送号码为6709的交易会话(注意源主机后面的数字是交易号,不是端口).这项请求长112字节,不包括UDPIP报头.在文件句柄(fh)21,24/10.731657119上执行readlink(读取符号连接)操作.(如果运气不错,就象这种情况,文件句柄可以依次翻译成主次设备号,i节点号,和事件号(generationnumber).)Wrl回答ok'和连接的内容.

在第三行,sushi请求wrl在目录文件9,74/4096.6878中查找xcolors’.注意数据的打印格式取决于操作类型.格式应该是可以自我说明的.

给出-v(verbose)选项可以显示附加信息.例如:

sushi.1372a>wrl.nfs:

148readfh21,11/12.1958192bytes@24576

wrl.nfs>sushi.1372a:

replyok1472readREG100664ids417/0sz29388

(-v同时使它显示IP报头的TTL,ID,和分片域,在这个例子里把它们省略了.)在第一行,sushi请求wrl从文件21,11/12.195的偏移位置24576开始,读取8192字节.Wrl回答ok';第二行显示的报文是应答的第一个分片,因此只有1472字节(其余数据在后续的分片中传过来,但由于这些分片里没有NFS甚至UDP报头,因此根据所使用的过滤器表达式,有可能不显示).-v选项还会显示一些文件属性(它们作为文件数据的附带部分传回来):文件类型(普通文件REG''),存取模式(八进制数),uidgid,以及文件大小.

如果再给一个-v选项(-vv),还能显示更多的细节.

注意NFS请求的数据量非常大,除非增加snaplen,否则很多细节无法显示.试一试-s192′选项.

NFS应答报文没有明确标明RPC操作.因此tcpdump保留有近来的请求记录,根据交易号匹配应答报文.如果应答报文没有相应的请求报文,它就无法分析.

KIPAppletalk(UDP上的DDP)

AppletalkDDP报文封装在UDP数据报中,解包后按DDP报文转储(也就是说,忽略所有的UDP报头信息).文件/etc/atalk.names用来把appletalk网络和节点号翻译成名字.这个文件的行格式是

numbername

1.254ether

16.1icsd-net

1.254.110ace

前两行给出了appletalk的网络名称.第三行给出某个主机的名字(主机和网络依据第三组数字区分网络号一定是两组数字,主机号一定是三组数字.)号码和名字用空白符(空格或tab)隔开./etc/atalk.names文件可以包含空行或注释行(#'开始的行).

Appletalk地址按这个格式显示

net.host.port

144.1.209.2>icsd-net.112.220

office.2>icsd-net.112.220

jssmag.149.235>icsd-net.2

(如果不存在/etc/atalk.names,或者里面缺少有效项目,就以数字形式显示地址.)第一个例子里,网络144.1209节点的NBP(DDP端口2)向网络icsd112节点的220端口发送数据.第二行和上面一样,只是知道了源节点的全称(office’).第三行是从网络jssmag149节点的235端口向icsd-netNBP端口广播(注意广播地址(255)隐含在无主机号的网络名字中所以在/etc/atalk.names中区分节点名和网络名是个好主意).

Tcpdump可以翻译NBP(名字联结协议)ATP(Appletalk交互协议)的报文内容.其他协议只转储协议名称(或号码,如果还没给这个协议注册名称)和报文大小.

NBP报文的输出格式就象下面的例子:

icsd-net.112.220>jssmag.2:nbp-lkup190:”=:LaserWriter@*”

jssmag.209.2>icsd-net.112.220:nbp-reply190:”RM1140:LaserWriter@*”250

techpit.2>icsd-net.112.220:nbp-reply190:”techpit:LaserWriter@*”186

第一行是网络icsd112主机在网络jssmag上的广播,对名字laserwriter做名字查询请求.名字查询请求的nbp标识号是190.第二行显示的是对这个请求的回答(注意它们有同样的标识号),主机jssmag.209表示在它的250端口注册了一个laserwriter的资源,名字是“RM1140”.第三行是这个请求的其他回答,主机techpit186端口有laserwriter注册的“techpit”.

ATP报文格式如下例所示:

jssmag.209.165>helios.132:atp-req12266<0-7>0xae030001

helios.132>jssmag.209.165:atp-resp12266:0(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:1(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:2(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:3(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:4(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:5(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:6(512)0xae040000

helios.132>jssmag.209.165:atp-resp*12266:7(512)0xae040000

jssmag.209.165>helios.132:atp-req12266<3,5>0xae030001

helios.132>jssmag.209.165:atp-resp12266:3(512)0xae040000

helios.132>jssmag.209.165:atp-resp12266:5(512)0xae040000

jssmag.209.165>helios.132:atp-rel12266<0-7>0xae030001

jssmag.209.133>helios.132:atp-req*12267<0-7>0xae030002

Jssmag.209向主机helios发起12266号交易,请求8个报文(<0-7>').行尾的十六进制数是请求中userdata’域的值.

打赏
 Posted by on 2018-09-21