IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  AIX and UNIX  >

跟踪 UNIX 应用程序的解决方案

developerWorks
前一页第 5 页,共 10 页后一页

文档选项

样例代码


对本教程的评价

帮助我们改进这些内容


跟踪网络数据包

跟踪应用程序代码可以揭示应用程序中正在发生的情况,能够查明系统正在执行的操作;但是,如果希望监视网络应用程序,希望了解正在通过网络传输哪些信息,那么该怎么办呢?有许多网络跟踪工具,Solaris 上的 snoop 工具、AIX 上的 iptrace 和适用于许多平台的 Ethereal 工具都可以查看网络上正在传输的数据包。

网络跟踪基础

跟踪网络数据包的几乎所有工具都采用相同的基本工作方式。一般情况下,计算机从网络读取数据包,但是只处理专门发送给这台计算机的网络数据包。在老式的以太网上,所有数据包发送给所有计算机。在使用网络交换机的情况下,如果希望查看发送给其他计算机的数据包,可能需要连接网络上的管理端口。

使用这些工具的方法和它们能够提供的信息有所差异,但是基本上是相同的。在 AIX 上,iptrace 是一个后台守护进程,所以必须通过显式地启动和停止工具来打开和关闭跟踪过程。启动它的命令是 # startsrc -s iptrace -a "-i tr0 /home/user/iptrace/log1"。停止它的命令是 # stopsrc -s iptrace

在 Solaris 上,snoop 工具是一个根据需要执行的应用程序:# snoop

但是,典型网络上的数据包数量非常大,可能很难动态地解码和显示它们。在这种情况下,可以通过设置端口名称或端口号、计算机名称或编号指定有限的扫描,也可以把原始数据输出到文件中,然后进一步处理这个文件。可以通过设置输出文件记录信息:$ snoop -o networkdump.log

输入 $ snoop -i networkdump.log 读取保存的数据。

在使用 snoop 跟踪应用程序时,可能希望进行更有针对性的搜索。





回页首


用 snoop 扫描特定的主机

在跟踪期间,使用 snoop 的典型目的是了解应用程序是否正在通过网络进行通信,或者了解正在交换的具体信息。

例如,如果要诊断在 NFS 服务器和 NFS 客户机之间发生的问题,可能希望确认这两台计算机确实正在交换信息。一种方法是使用 snoop 监视交换的数据。在客户机上,可以使用 snoop 记录与服务器交换的数据。

例如,清单 17 查看主机 bear 的通信流。


清单 17. 查看主机 bear 的通信流

$ snoop host bear    
Using device rge0 (promiscuous mode)
tweedledee.mcslp.pri -> bear.mcslp.pri TCP D=2049 S=1014 Syn Seq=1160567073 
    Len=0 Win=49640 Options=<mss 1460,nop,wscale 0,nop,nop,sackOK>
bear.mcslp.pri -> tweedledee.mcslp.pri TCP D=1014 S=2049 Syn Ack=1160567074 
    Seq=498630824 Len=0 Win=5840 Options=<mss 1460,nop,nop,sackOK,nop,wscale 7>
tweedledee.mcslp.pri -> bear.mcslp.pri TCP D=2049 S=1014 Ack=498630825 
    Seq=1160567074 Len=0 Win=49640
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C ACCESS3 FH=EC09 (read,lookup,
    modify,extend,delete)
bear.mcslp.pri -> tweedledee.mcslp.pri TCP D=1014 S=2049 Ack=1160567230 
    Seq=498630825 Len=0 Win=54
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R ACCESS3 OK (read,lookup,modify,
    extend,delete)
tweedledee.mcslp.pri -> bear.mcslp.pri TCP D=2049 S=1014 Ack=498630949 
    Seq=1160567230 Len=0 Win=49640
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=EC09
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri TCP D=2049 S=1014 Ack=498631065 
    Seq=1160567382 Len=0 Win=49640
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=02E4
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=8F7F
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=2764
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=FD7F
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=FF7F
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=8F7F
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=725E
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=8D7F
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=0C64
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=6CEC
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri NFS C GETATTR3 FH=5997
bear.mcslp.pri -> tweedledee.mcslp.pri NFS R GETATTR3 OK
tweedledee.mcslp.pri -> bear.mcslp.pri TCP D=2049 S=1014 Ack=498632341 
    Seq=1160569142 Len=0 Win=49640

可以看到正在交换数据。snoop 能够解码原始数据包的内容,从而判断实际交换的数据。在这里,NFS 使用 GETATTR3 网络数据包,它们提供文件的属性数据(比如名称、大小和所有者信息)。

这里显示了许多额外信息,所以还可以更明确地指定只选择 NFS 数据包。可以通过组合使用表达式指定要选择的数据,比如:$ snoop host bear and protocol nfs

要想获得更详细的信息,可以用详细模式输出交换的实际数据。如果启用详细模式,snoop 会显示数据包的所有成分,包括原始以太网头数据以及 TCP 和协议信息。清单 18 给出在通过 NFS 请求文件系统状态数据时发送的一个数据包。


清单 18. 通过 NFS 请求文件系统状态数据时发送的一个数据包

ETHER:  ----- Ether Header -----
ETHER:  
ETHER:  Packet 2 arrived at 16:09:4.99083
ETHER:  Packet size = 142 bytes
ETHER:  Destination = 0:1a:ee:1:1:c0, 
ETHER:  Source      = 0:1d:60:1b:9a:2d, 
ETHER:  Ethertype = 0800 (IP)
ETHER:  
IP:   ----- IP Header -----
IP:   
IP:   Version = 4
IP:   Header length = 20 bytes
IP:   Type of service = 0x00
IP:         xxx. .... = 0 (precedence)
IP:         ...0 .... = normal delay
IP:         .... 0... = normal throughput
IP:         .... .0.. = normal reliability
IP:         .... ..0. = not ECN capable transport
IP:         .... ...0 = no ECN congestion experienced
IP:   Total length = 128 bytes
IP:   Identification = 61800
IP:   Flags = 0x4
IP:         .1.. .... = do not fragment
IP:         ..0. .... = last fragment
IP:   Fragment offset = 0 bytes
IP:   Time to live = 64 seconds/hops
IP:   Protocol = 6 (TCP)
IP:   Header checksum = c7b7
IP:   Source address = 192.168.0.2, bear.mcslp.pri
IP:   Destination address = 192.168.0.5, tweedledee.mcslp.pri
IP:   No options
IP:   
TCP:  ----- TCP Header -----
TCP:  
TCP:  Source port = 2049
TCP:  Destination port = 1013 (Sun RPC)
TCP:  Sequence number = 2161119694
TCP:  Acknowledgement number = 1253508400
TCP:  Data offset = 20 bytes
TCP:  Flags = 0x18
TCP:        0... .... = No ECN congestion window reduced
TCP:        .0.. .... = No ECN echo
TCP:        ..0. .... = No urgent pointer
TCP:        ...1 .... = Acknowledgement
TCP:        .... 1... = Push
TCP:        .... .0.. = No reset
TCP:        .... ..0. = No Syn
TCP:        .... ...0 = No Fin
TCP:  Window = 348
TCP:  Checksum = 0xec08
TCP:  Urgent pointer = 0
TCP:  No options
TCP:  
RPC:  ----- SUN RPC Header -----
RPC:  
RPC:  Record Mark: last fragment, length = 84
RPC:  Transaction id = 485864481
RPC:  Type = 1 (Reply)
RPC:  This is a reply to frame 1
RPC:  Status = 0 (Accepted)
RPC:  Verifier   : Flavor = 0 (None), len = 0 bytes
RPC:  Accept status = 0 (Success)
RPC:  
NFS:  ----- Sun NFS -----
NFS:  
NFS:  Proc = 18 (Get filesystem statistics)
NFS:  Status = 0 (OK)
NFS:  Post-operation attributes:  (not available)
NFS:  Total space = 488217268224 bytes
NFS:  Available space = 137675571200 bytes
NFS:  Available space - this user = 112875532288 bytes
NFS:  Total file slots = 60555264
NFS:  Available file slots = 58563011
NFS:  Available file slots - this user = 58563011
NFS:  Invariant time = 0 sec
NFS:  

查看特定的信息也有助于判断不同的应用程序正在执行的操作。例如,可能希望监视正在从某个主机访问哪些网站,那么可以搜索 HTTP 协议,只在 snoop 输出中输出 HTTP 行(见清单 19)。


清单 19. 监视正在从某个主机访问哪些网站

$ snoop -v port 80 |egrep '^HTTP'
...
HTTP: ----- HyperText Transfer Protocol -----
HTTP: 
HTTP: GET / HTTP/1.0
HTTP: User-Agent: Wget/1.10.2
HTTP: Accept: */*
HTTP: Host: www.bbc.co.uk
HTTP: Connection: Keep-Alive
HTTP: [...]
...

egrep 只选择以 HTTP 开头的行。在这里可以看出有人访问了 BBC 网站。





回页首



前一页第 5 页,共 10 页后一页
    关于 IBM 隐私条约 联系 IBM 使用条款