网络通信 频道

TCPDUMP中文手册

名称(NAME)
tcpdump-转储网络上的数据流
总览(SYNOPSIS)
tcpdump[-adeflnNOpqStvx][-ccount][-Ffile]

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

[-Ttype][-wfile][expression]

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

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

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

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

对于Ultrix和DigitalUNIX:一旦超级用户使用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''''or``tcpdump-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(如果是SunOS的NIT,最小值是96).68个字节适用于IP,ICMP,TCP和UDP,但是有可能截掉名字服务器和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,就转储网络的全部报文.否则,只转储相对expression为`true''的数据报.
expression一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:

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

dir
方向修饰子指出相对于标识的传输方向(数据是传入还是传出标识).可以使用的方向有src,dst,srcordst和srcanddst.例如,`srcfoo'',`dstnet128.3'',`srcordstportftp-data''.如果不指定方向修饰子,就使用缺省的srcordst.对于`null''链路层(就是说象slip之类的点到点协议),用inbound和outbound修饰子指定所需的传输方向.
proto
协议修饰子要求匹配指定的协议.可以使用的协议有:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcp和udp.例如,`ethersrcfoo'',`arpnet128.3'',`tcpport21''.如果不指定协议修饰子,就使用所有符合类型的协议.例如,`srcfoo''指`(ip或arp或rarp)srcfoo''(注意后者不符合语法),`netbar''指`(ip或arp或rarp)netbar'',`port53''指`(tcp或udp)port53''.
[`fddi''实际上是`ether''的别名;分析器把它们视为``用在指定网络接口上的数据链路层.''''FDDI报头包含类似于以太协议的源目地址,而且通常包含类似于以太协议的报文类型,因此你可以过滤FDDI域,就象分析以太协议一样.FDDI报头也包含其他域,但是你不能在过滤器表达式里显式描述.]


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

更复杂的过滤器表达式可以通过and,or和not连接原语来组建.例如,`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,则逻辑为真.本原语可以用src或dst修饰.
netnet/len
如果IP地址匹配指定网络掩码的net,则逻辑为真,掩码的有效位宽为len.本原语可以用src或dst修饰.
dstportport
如果报文是ip/tcp或ip/udp,并且目的端口是port,则逻辑为真.port是一个数字,也可以是/etc/services中说明过的名字(参看tcp(4P)和udp(4P)).如果使用名字,则检查端口号和协议.如果使用数字,或者有二义的名字,则只检查端口号(例如,dstport513将显示tcp/login的数据和udp/who的数据,而portdomain将显示tcp/domain和udp/domain的数据).
srcportport
如果报文的源端口号是port,则逻辑为真.
portport
如果报文的源端口或目的端口是port,则逻辑为真.上述的任意一个端口表达式都可以用关键字tcp或udp做前缀,就象:
tcpsrcportport

它只匹配源端口是port的TCP报文.
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主机名.[只有配置成运行DECNET的Ultrix系统支持DECNET主机名.]
decnetdsthost
如果DECNET的目的地址是host,则逻辑为真.
decnethosthost
如果DECNET的源地址或目的地址是host,则逻辑为真.
ip,arp,rarp,decnet
是:
etherprotop

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

前两行给出了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.1的209节点的NBP(DDP端口2)向网络icsd的112节点的220端口发送数据.第二行和上面一样,只是知道了源节点的全称(`office'').第三行是从网络jssmag的149节点的235端口向icsd-net的NBP端口广播(注意广播地址(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


第一行是网络icsd的112主机在网络jssmag上的广播,对名字laserwriter做名字查询请求.名字查询请求的nbp标识号是190.第二行显示的是对这个请求的回答(注意它们有同样的标识号),主机jssmag.209表示在它的250端口注册了一个laserwriter的资源,名字是"RM1140".第三行是这个请求的其他回答,主机techpit的186端口有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''域的值.

文章转载地址:http://www.cnpaf.net/Class/OtherAnalysis/055212333266717495.htm

0
相关文章