在 Oracle® Solaris 11.2 中管理 TCP/IP 网络、IPMP 和 IP 隧道

退出打印视图

更新时间: 2014 年 7 月
 
 

使用 IP 层设备监视包

Oracle Solaris 中引入了用于增强 IP 观察功能的 IP 层设备。通过这些设备,可以访问具有与系统网络接口关联的地址的所有包。这些地址包括本地地址以及位于非回送接口或逻辑接口上的地址。可观察的通信流量可以是 IPv4 和 IPv6 地址。因此,可以监视以系统为目标的所有通信流量。通信流量可以是回送 IP 通信流量、来自远程计算机的包、要从系统发送的包或转发的所有通信流量。

使用 IP 层设备,Oracle Solaris 全局区域的管理员可以监视区域之间以及区域内的通信流量。非全局区域的管理员也可以观察由该区域发送和接收的通信流量。

要监视 IP 层上的通信流量,请使用带有较新的 –I 选项的 snoop 命令。此选项指定此命令将使用新的 IP 层设备,而不是底层链路层设备来显示通信流量数据。

如何检查 IP 层上的包

  1. (u53ef选) 如有必要,列显有关连接到系统的接口的信息。
    # ipadm show-if
  2. 捕获特定接口上的 IP 通信流量。
    # snoop -I interface [-V | -v]

用于检查包的方法

以下所有示例均基于此系统配置:

# ipadm show-addr

ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           dhcp     ok           10.153.123.225/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::214:4fff:2731:b1a9/10
net0/v6           addrconf ok           2001:0db8:212:60bb:214:4fff:2731:b1a9/64
net0/v6           addrconf ok           2001:0db8:56::214:4fff:2731:b1a9/64

    假设有两个区域 sandboxtoybox,它们使用以下 IP 地址:

  • sandbox172.0.0.3

  • toybox172.0.0.1

您可以对系统上的不同接口使用 snoop –I 命令。显示的包信息取决于您是全局区域的管理员还是非全局区域的管理员。

示例 1-11  观察回送接口上的通信流量

以下示例显示了用于回送接口的 snoop 命令的输出。

# snoop -I lo0
Using device ipnet/lo0 (promiscuous mode)
localhost -> localhost    ICMP Echo request (ID: 5550 Sequence number: 0)
localhost -> localhost    ICMP Echo reply (ID: 5550 Sequence number: 0)

要生成详细输出,请使用 –v 选项。

# snoop -v -I lo0
Using device ipnet/lo0 (promiscuous mode)
IPNET:  ----- IPNET Header -----
IPNET:
IPNET:  Packet 1 arrived at 10:40:33.68506
IPNET:  Packet size = 108 bytes
IPNET:  dli_version = 1
IPNET:  dli_type = 4
IPNET:  dli_srczone = 0
IPNET:  dli_dstzone = 0
IPNET:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
...

为了支持观察 IP 层上的包,引入了新的 ipnet 数据包头,置于要观察的包之前。将同时指示源和目标 ID。ID 为 0 指示将从全局区域生成通信流量。

示例 1-12  观察本地区域内的 net0 设备中的包流

以下示例显示了系统内不同区域中发生的通信。您可以查看与 net0 IP 地址关联的所有包,包括那些从本地传递到其他区域的包。如果生成详细输出,则还可以查看包流中涉及的区域。

# snoop -I net0
Using device ipnet/net0 (promiscuous mode)
toybox -> sandbox TCP D=22 S=62117 Syn Seq=195630514 Len=0 Win=49152 Options=<mss
sandbox -> toybox TCP D=62117 S=22 Syn Ack=195630515 Seq=195794440 Len=0 Win=49152
toybox -> sandbox TCP D=22 S=62117 Ack=195794441 Seq=195630515 Len=0 Win=49152
sandbox -> toybox TCP D=62117 S=22 Push Ack=195630515 Seq=195794441 Len=20 Win=491
# snoop -I net0 -v port 22
IPNET:  ----- IPNET Header -----
IPNET:
IPNET:  Packet 5 arrived at 15:16:50.85262
IPNET:  Packet size = 64 bytes
IPNET:  dli_version = 1
IPNET:  dli_type = 0
IPNET:  dli_srczone = 0
IPNET:  dli_dstzone = 1
IPNET:
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 = 40 bytes
IP:   Identification = 22629
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 = 0000
IP:   Source address = 172.0.0.1, 172.0.0.1
IP:   Destination address = 172.0.0.3, 172.0.0.3
IP:   No options
IP:
TCP:  ----- TCP Header -----
TCP:
TCP:  Source port = 46919
TCP:  Destination port = 22
TCP:  Sequence number = 3295338550
TCP:  Acknowledgement number = 3295417957
TCP:  Data offset = 20 bytes
TCP:  Flags = 0x10
TCP:        0... .... = No ECN congestion window reduced
TCP:        .0.. .... = No ECN echo
TCP:        ..0. .... = No urgent pointer
TCP:        ...1 .... = Acknowledgement
TCP         .... 0... = No push
TCP         .... .0.. = No reset
TCP:        .... ..0. = No Syn
TCP:        .... ...0 = No Fin
TCP:  Window = 49152
TCP:  Checksum = 0x0014
TCP:  Urgent pointer = 0
TCP:  No options
TCP:

在以上输出中,ipnet 数据包头指示该包是从全局区域 (ID 0) 发送至 sandbox (ID 1) 的。

示例 1-13  通过标识区域观察网络通信流量

以下示例演示如何通过标识区域来观察网络通信流量,这种方法对于具有多个区域的系统非常有用。当前,只能使用区域 ID 标识区域。不支持将 snoop 命令与区域名称一起使用。

# snoop -I hme0 sandboxsnoop -I net0 sandbox
Using device ipnet/hme0 (promiscuous mode)
toybox -> sandbox TCP D=22 S=61658 Syn Seq=374055417 Len=0 Win=49152 Options=<mss
sandbox -> toybox TCP D=61658 S=22 Syn Ack=374055418 Seq=374124525 Len=0 Win=49152
toybox -> sandbox TCP D=22 S=61658 Ack=374124526 Seq=374055418 Len=0 Win=49152