unix源码分析_UNIX网络分析

在你开始前

本教程适用于正在寻找发现和确定有关其网络结构和配置的信息(包括哪些服务和系统在不同计算机上运行)的UNIX系统管理员。 为了充分利用本教程,您应该对UNIX操作系统有基本的了解,并且对网络和Internet协议(IP)的运行方式有基本的了解。

关于本教程

当访问新的UNIX系统甚至理解现有的UNIX系统时,网络配置是困扰系统工作方式的难题的关键部分。 您需要了解和理解网络的许多方面,以正确​​识别问题并防止将来出现问题。 通过使用一些基本的工具和命令,您可以确定有关单个系统配置的许多内容,并且通过此基本理解,可以很好地了解其余网络的配置。 使用一些其他工具,您可以扩展知识,以覆盖网络中的更多系统和服务。

在本教程中,您将在UNIX环境中使用一些基本工具,这些工具可以公开有关系统配置的信息。 通过了解这些工具及其输出的信息,您将可以更好地了解系统网络配置及其工作方式。 您还将研究可以查看更广泛网络的工具和解决方案,并获得有关网络,其潜在的安全问题以及可帮助您在问题确实发生时进行诊断和诊断的信息要点的更详细信息。

了解主机上的网络

更好地了解网络的第一步是了解当前正在使用的计算机的网络配置。 这将为您提供许多参考框架,例如当前主机的IP地址,DNS配置以及您可以连接到并与之通信的其他计算机。

查找配置信息

确定正在使用的计算机的当前配置可为您提供有关环境的基本信息。 您的第一个任务是确定当前计算机的IP地址和网络掩码。 通过使用这两个值,可以确定计算机的地址以及可以直接连接到网络的其他计算机(例如,不使用路由器)。

在确定IP地址之前,请使用hostname命令获取系统的主机名(请参见清单1)。

清单1.获取主机名
$  hostname
sulaco

使用-a选项时,ifconfig命令将显示所有已配置网络设备的当前配置信息。 例如,清单2显示了Solaris计算机上ifconfig命令的输出。

清单2. Solaris上ipconfig的输出
$ ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
pcn0: flags=201004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4,CoS> 
mtu 1500 index 2
        inet 192.168.1.25 netmask fffffc00 broadcast 192.168.3.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
        inet6 ::1/128 
pcn0: flags=202004841<UP,RUNNING,MULTICAST,DHCP,IPv6,CoS> mtu 1500 index 2
        inet6 fe80::20c:29ff:fe7f:dc5/10

您可以从此输出中看到有一个回送设备lo0,其本地主机的常规地址为127.0.0.1。 您还可以看到同一设备也具有等效的IPv6地址。

pcn0设备配置的网络地址为192.168.1.25,网络掩码为fffffc00,等效于255.255.252.0。 您还可以看到,在这种情况下,该地址是使用DHCP设置的(来自DHCP标志列表)。

网络掩码特别重要,因为仅使用网络掩码,您就可以确定直接网络的大小(以注册的IP地址为单位)。 在这种情况下,255.255.252.0等于四个C类地址,因为256(主机的最大数量)减去252(被屏蔽的主机的数量)等于四。

通过将网络掩码与配置的IP地址结合使用,您可以猜测本地网络中IP地址的范围。 因为IP块通常按组和顺序拆分,所以您可以知道网络的IP地址范围是192.168.0.0到192.168.3.255。 您可以确定这一点,因为通常使用四个C类地址的网络掩码将整个范围(192.168.0.0-192.168.255.255)分成相等的块-地址前缀为192.168.1.x,它必须位于第一个四个地址块。

不同的操作系统以不同的方式输出信息(和详细信息)。 清单3显示了Linux®系统的输出。

清单3. Linux系统上的输出
eth0      Link encap:Ethernet  HWaddr 00:1d:60:1b:9a:2d  
          inet addr:192.168.0.2  Bcast:192.168.3.255  Mask:255.255.252.0
          inet6 addr: fe80::21d:60ff:fe1b:9a2d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2371085881 errors:36 dropped:0 overruns:0 frame:36
          TX packets:2861233776 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:913269364222 (850.5 GiB)  TX bytes:3093820025338 (2.8 TiB)
          Interrupt:23 Base address:0x4000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:279755697 errors:0 dropped:0 overruns:0 frame:0
          TX packets:279755697 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:388038389807 (361.3 GiB)  TX bytes:388038389807 (361.3 GiB)

清单4显示了Mac OS X™系统的输出。

清单4. Mac OS X系统的输出
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 192.168.0.101 netmask 0xfffffc00 broadcast 192.168.3.255
    ether 00:16:cb:a0:3b:cb 
    media: autoselect (1000baseT <full-duplex,flow-control>) status: active
    supported media: autoselect 10baseT/UTP <half-duplex> 10baseT/UTP 
<full-duplex> 10baseT/UTP <full-duplex,hw-loopback> 10baseT/UTP 
<full-duplex,flow-control> 100baseTX <half-duplex> 100baseTX 
<full-duplex> 100baseTX <full-duplex,hw-loopback> 100baseTX 
<full-duplex,flow-control> 1000baseT <full-duplex> 1000baseT 
<full-duplex,hw-loopback> 1000baseT <full-duplex,flow-control> none
fw0: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 2030
    lladdr 00:17:f2:ff:fe:7b:84:d6 
    media: autoselect <full-duplex> status: inactive
    supported media: autoselect <full-duplex>
en1: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
    ether 00:17:f2:9b:3d:38 
    media: autoselect (<unknown type>)
    supported media: autoselect
en5: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    inet6 fe80::21c:42ff:fe00:8%en5 prefixlen 64 scopeid 0x7 
    inet 10.211.55.2 netmask 0xffffff00 broadcast 10.211.55.255
    ether 00:1c:42:00:00:08 
    media: autoselect status: active
    supported media: autoselect
en6: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    inet6 fe80::21c:42ff:fe00:9%en6 prefixlen 64 scopeid 0x8 
    inet 10.37.129.2 netmask 0xffffff00 broadcast 10.37.129.255
    ether 00:1c:42:00:00:09 
    media: autoselect status: active
    supported media: autoselect

在所有情况下,通常都可以找到所连接网络设备的Internet地址和网络掩码。 显然,如果您有多个网络设备,那么您将在输出中获得每个设备的信息,这可能是因为您可以仅从一台计算机访问范围广泛的不同网络和系统。

查找姓名解析服务

确定当前计算机配置的下一步应该与名称服务系统的配置有关,该系统将在您访问另一台计算机上的服务时将系统上的名称和域名转换为IP地址。

在大多数计算机上,此配置是通过/etc/nsswitch.conf文件进行的,该文件包含不同命名服务(主机,用户等)的列表以及不同服务(DNS,NIS或本地文件)的顺序)用于解析。 您可以在清单5中看到一个示例。

清单5.解决名称服务系统
passwd:     files
group:      files
hosts:      files dns 
ipnodes:    files dns
networks:   files
protocols:  files
rpc:        files
ethers:     files
netmasks:   files
bootparams: files
publickey:  files
netgroup:   files
automount:  files
aliases:    files
services:   files
printers:   user files
auth_attr:  files
prof_attr:  files
project:    files
tnrhtp:     files
tnrhdb:     files

例如,在清单5中,首先通过查看系统上的本地文件(例如/ etc / hosts),然后查看域名系统(DNS)来解析主机名信息。

如果已经配置了DNS,则/etc/resolv.conf文件将告诉您使用了哪些机器将名称转换为IP地址。 清单6中显示了该文件的示例。

清单6.用来将名称转换为IP地址的机器
domain example.pri
nameserver 192.168.0.2
nameserver 192.168.0.3

如果您想直接查询这些机器以获取信息,则此信息很有用。 您可以使用dig和nslookup之类的工具来提取有关名称服务以及名称和IP地址解析的信息。

检查路线

网络外部的主机(与当前IP地址相比,超出了网络掩码的范围)被发送到路由器,以转发到另一台计算机上。 路由器可用于网络的所有级别,包括部门之间,不同物理站点之间以及公共和外部站点(例如Internet)之间。

当您的计算机想要与“本地”网络外部的计算机通信时,netstat命令可以告诉您与哪些计算机或路由器联系。 例如,下面的清单7来自Solaris计算机。

清单7. netstat命令
$ netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
default              voyager.example.pri  UG        1        139 pcn0      
192.168.0.0          solaris2.example.pri U         1        447 pcn0      
solaris2             solaris2             UH        1         35 lo0       

Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use    If   
--------------------------- --------------------------- ----- --- ------- ----- 
fe80::/10                   fe80::20c:29ff:fe7f:dc5     U       1       0 pcn0  
solaris2                    solaris2                    UH      1       0 lo0

默认路由显示网关(路由器),该网关用于路由当前网络外部或特定I​​P地址或IP地址范围的其他路由尚未覆盖的数据包。

因为您可能需要在当前名称服务不起作用或未返回正确信息的情况下确定此信息,所以也可以指定-n选项以使用IP地址而不是名称来显示信息。

检查支持的服务

netstat命令还可用于确定当前主机上正在共享和公开哪些服务。 这包括所有网络服务,包括DNS,NFS,Web服务和其他信息。 显示的信息基于处于打开状态并且正在等待客户端连接的“正在侦听”状态的端口,或者基于已经打开并与客户端进行通信的端口。

该信息对于确定服务是否正在运行,以及作为确定计算机是否正在共享自身或使自身承受不必要风险的标准安全检查的一部分,都具有无可估量的价值。

您可以在清单8中看到输出示例,在这里使用-a显示所有打开的端口和服务,既已建立(打开)又在侦听新连接。 默认情况下,netstat还会显示打开的UNIX域套接字,只有当前计算机可以访问这些套接字。 为简便起见,这些已从输出中删除。

清单8.使用-a输出
$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:imaps                 *:*                     LISTEN     
tcp        0      0 *:nfs                   *:*                     LISTEN     
tcp        0      0 *:vmware-authd          *:*                     LISTEN     
tcp        0      0 localhost:10024         *:*                     LISTEN     
tcp        0      0 localhost:10025         *:*                     LISTEN     
tcp        0      0 *:mysql                 *:*                     LISTEN     
tcp        0      0 *:imap                  *:*                     LISTEN     
tcp        0      0 localhost:783           *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 bear.example.pri:http     *:*                     LISTEN     
tcp        0      0 *:cisco-sccp            *:*                     LISTEN     
tcp        0      0 *:47506                 *:*                     LISTEN     
tcp        0      0 *:34452                 *:*                     LISTEN     
tcp        0      0 172.16.217.1:domain     *:*                     LISTEN     
tcp        0      0 192.168.92.1:domain     *:*                     LISTEN     
tcp        0      0 bear.example.pri:domain   *:*                     LISTEN     
tcp        0      0 localhost:domain        *:*                     LISTEN     
tcp        0      0 *:53941                 *:*                     LISTEN     
tcp        0      0 *:3128                  *:*                     LISTEN     
tcp        0      0 localhost:rndc          *:*                     LISTEN     
tcp        0      0 *:smtp                  *:*                     LISTEN     
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65452  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65459  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65412  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65417  ESTABLISHED
tcp        0      0 bear.example.pri:mysq   bear.example.pri:35475    TIME_WAIT  
tcp        0      0 bear.example.pri:http   sulaco.example.p:49603  FIN_WAIT2  
tcp        0      0 bear.example.pri:nfs    sulaco.example.p:49552  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65433  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65431  ESTABLISHED
tcp        1      0 bear.example.pri:nfs    sulaco.example.p:51900  CLOSE_WAIT 
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65415  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65475  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65472  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65429  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65430  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65438  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65443  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65418  ESTABLISHED
tcp        0      0 bear.example.pri:nfs    narcissus.exampl:62968 ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65448  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65423  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65468  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65445  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65476  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65453  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65456  ESTABLISHED
tcp        1      0 bear.example.pri:nfs    sulaco.example.p:59172  CLOSE_WAIT 
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65416  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65439  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65441  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65446  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65470  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65450  ESTABLISHED
tcp        0      0 bear.example.pri:nfs    sulaco.example.p:65320  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65465  ESTABLISHED
tcp        0      0 bear.example.pri:36230  solaris2.vmbear.mcs:ssh ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65421  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65464  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65474  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:64955  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65473  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65461  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65454  ESTABLISHED
tcp        0      0 bear.example.pri:http   sulaco.example.p:49608  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65471  ESTABLISHED
tcp        0      0 localhost:50123         localhost:ssh           ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65420  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65466  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65463  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65451  ESTABLISHED
tcp        0      0 bear.example.pri:35471  bear.example.pri:mysql    TIME_WAIT  
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65457  ESTABLISHED
tcp        1      0 bear.example.pri:nfs    sulaco.example.p:53877  CLOSE_WAIT 
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65432  ESTABLISHED
tcp        0      0 bear.example.pri:mysql  bear.example.pri:35470    TIME_WAIT  
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65467  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65414  ESTABLISHED
tcp        0      0 bear.example.pri:50112  bear.example.pri:imap     TIME_WAIT  
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65462  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65460  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65469  ESTABLISHED
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65422  ESTABLISHED
tcp        0      0 bear.example.pri:50110  bear.example.pri:imap     TIME_WAIT  
tcp        0      0 bear.example.pri:50111  bear.example.pri:imap     TIME_WAIT  
tcp        0      0 bear.example.pri:imap   sulaco.example.p:65442  ESTABLISHED
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN     
tcp6       0      0 [::]:11211              [::]:*                  LISTEN     
tcp6       0      0 [::]:imap               [::]:*                  LISTEN     
tcp6       0      0 [::]:cisco-sccp         [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:rndc          [::]:*                  LISTEN     
tcp6       0      0 [::]:https              [::]:*                  LISTEN     
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:52786  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:56220  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:63895  ESTABLISHED
tcp6       0      0 localhost:ssh           localhost:50123         ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:60914  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:64669  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:56053  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:52268  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:49528  ESTABLISHED
tcp6       0      0 bear.example.pri:ssh    sulaco.example.p:65408  ESTABLISHED
udp        0      0 *:nfs                   *:*                                
udp        0      0 *:42498                 *:*                                
udp        0      0 *:54680                 *:*                                
udp        0      0 172.16.217.1:domain     *:*                                
udp        0      0 192.168.92.1:domain     *:*                                
udp        0      0 bear.example.p:domain   *:*                                
udp        0      0 localhost:domain        *:*                                
udp        0      0 *:45495                 *:*                                
udp        0      0 *:icpv2                 *:*                                
udp        0      0 *:bootps                *:*                                
udp        0      0 *:964                   *:*                                
udp        0      0 *:11211                 *:*                                
udp        0      0 *:sunrpc                *:*                                
udp        0      0 *:50042                 *:*                                
raw        0      0 *:icmp                  *:*                     7

从此输出中可以看到,机器非常繁忙。 第三列显示每个打开的连接或侦听连接的主机名和端口,用冒号分隔。 如果TCP或UDP服务号与已知端口号匹配(在/ etc / services文件中定义),则服务名称将显示在输出中。 对于主机,将显示主机名,备用IP地址或“ *”符号。 星号表示服务和端口已打开并且正在侦听所有IP地址。

例如,您可以从此输出中得知该计算机已配置为支持NFS,并且具有打开的(已建立的)连接,如清单9所示。

清单9.配置机器以支持NFS
$ netstat -a|grep nfs
tcp        0      0 *:nfs                *:*                     LISTEN     
tcp        1      0 bear.example.pri:nfs sulaco.example.p:51900  CLOSE_WAIT 
tcp        0      0 bear.example.pri:nfs narcissus.example.p:62968 ESTABLISHED
tcp        1      0 bear.example.pri:nfs sulaco.example.p:59172  CLOSE_WAIT 
tcp        0      0 bear.example.pri:nfs sulaco.example.p:65320  ESTABLISHED
tcp        1      0 bear.example.pri:nfs sulaco.example.p:53877  CLOSE_WAIT 
udp        0      0 *:nfs                   *:*

也可以使用此输出来查看当前与该机器通信的机器。 例如,通过查看第五列,然后从列表中排序并删除重复项,可以提取与之连接的计算机的列表(请参阅第10章)。

清单10.提取连接机器的列表
$ netstat -a|egrep 'tcp|udp'|grep ESTABLISHED|awk '{ print $5; }'|cut -d: -f1|sort|uniq
localhost
narcissus.mcslp.p
nautilus.wireless
polarbear.wireles
solaris2.vmbear.mcs
sulaco.mcslp.pri

当您怀疑有用户或计算机连接到您无法识别或期望的机器时,此功能很有用。

要了解这些其他计算机,您需要开始查看网络中的其他计算机。

查找有关其他主机的信息

了解了有关计算机的基本信息之后,就可以开始扩展并查看网络中的其他计算机,以确定它们的可用性和提供的服务。 使用正确的工具,您甚至可以尝试确定这些计算机在运行什么操作系统以及这些计算机可能共享的服务。

检查主机

检查远程机器最简单,最明显的工具是使用ping工具检查特定主机是否已启动并可用。 ping工具执行的操作非常简单。 它将数据包发送到远程主机,请求响应。 收到响应后,Ping工具将计算时间差,并且发送和接收数据包所花费的时间可以用作指示机器离其当前位置有多远。

例如,如果您对自己的网络上的计算机执行ping操作,则很可能会很快收到对ping数据包的响应(请参见清单11)。

清单11.自己网络上的Ping机
$ ping bear
PING bear.mcslp.pri (192.168.0.2): 56 data bytes
64 bytes from 192.168.0.2: icmp_seq=0 ttl=64 time=0.154 ms
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.162 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.149 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.161 ms
64 bytes from 192.168.0.2: icmp_seq=4 ttl=64 time=0.162 ms
64 bytes from 192.168.0.2: icmp_seq=5 ttl=64 time=0.161 ms
^C
--- bear.mcslp.pri ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.149/0.158/0.162/0.005 ms

ping工具的不同实现以不同的方式工作。 默认情况下,在Linux和Mac OS X上,该工具将连续发送数据包并等待响应,直到您强制应用程序以Control-C终止。

在Solaris™,AIX®和其他一些UNIX变体上,没有任何其他参数,ping工具将仅指示远程主机是否响应(请参见清单12)。

清单12.在UNIX变体上不带附加参数的Ping
$ ping bear
bear is alive

要执行更长的测试,请使用-s选项,如清单13所示。

清单13.使用-s选项进行ping
$ ping -s bear
PING bear: 56 data bytes
64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=0. time=0.288 ms
64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=1. time=0.247 ms
64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=2. time=0.208 ms
64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=3. time=0.230 ms
^C
----bear PING Statistics----
4 packets transmitted, 4 packets received, 0% packet loss
round-trip (ms)  min/avg/max/stddev = 0.208/0.243/0.288/0.034

每行的时间字段为您提供每个数据包的速度和延迟(响应之前的延迟,通常是活动级别的指示)的指示。 当停止输出时,您将获得发送,接收和时间统计信息包的摘要。

ping数据包必须经过的距离越远,来自远程主机的响应时间就越长。 例如,如果尝试对Internet上的公共服务器执行ping操作,则响应数据包所花费的时间可能会大大增加(请参见清单14)。

清单14.在Internet上Ping公共服务器
$ ping www.example.com
PING www.example.com (67.205.21.169) 56(84) bytes of data.
64 bytes from mcslp.com (67.205.21.169): icmp_seq=1 ttl=44 time=193 ms
64 bytes from mcslp.com (67.205.21.169): icmp_seq=2 ttl=44 time=194 ms
64 bytes from mcslp.com (67.205.21.169): icmp_seq=3 ttl=44 time=197 ms
64 bytes from mcslp.com (67.205.21.169): icmp_seq=4 ttl=44 time=194 ms
^C
--- www.example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3039ms
rtt min/avg/max/mdev = 193.737/195.120/197.123/1.353 ms

比较此连接到Internet服务的时间(193ms)与本地主机的时间(0.23ms)。

ping工具也是确定您是否可以连接到要连接的远程主机的快速方法。 在不存在的主机上运行ping会返回一个非常特定的错误(请参见清单15)。

清单15. ping不存在的主机
$ ping notinhere
PING notinhere (192.168.0.110) 56(84) bytes of data.
>From bear.mcslp.pri (192.168.0.2) icmp_seq=1 Destination Host Unreachable
>From bear.mcslp.pri (192.168.0.2) icmp_seq=2 Destination Host Unreachable
>From bear.mcslp.pri (192.168.0.2) icmp_seq=3 Destination Host Unreachable
^C
--- notinhere ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4039ms

ping工具依赖于了解网络上还有哪些其他计算机。 让我们看看如何在不知道主机名或IP地址的情况下确定网络上可能存在的主机

发现网络上的主机

在以太网系统(和其他网络)中,网络上的所有设备都有与硬件网络设备关联的唯一地址。 媒体访问控制(MAC)编号唯一地标识了网络设备,并且通过使用更高级别的协议(例如Internet协议),可以将MAC地址与主机名相关联。

在网络上发送数据包时,操作系统会使用(反向)此功能。 当您将数据包发送到特定的主机名时,操作系统会尝试将主机名解析为MAC地址,以便它可以构造要在网络上发送的硬件(以太网)数据包。

地址解析协议(ARP)处理此映射,您可以使用arp工具显示有关主机及其主机名或IP地址的当前保存的信息。

因为网络上任何要与另一台计算机进行通信的计算机都必须发送带有MAC地址和IP地址的数据包,所以系统在ARP缓存中收集到的信息可以成为一种有用的方式来查找其他计算机在运行什么网络(请参见清单16)。

清单16.使用arp命令
$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
gendarme.mcslp.pri       ether   00:1B:2F:F0:39:6A   C                     eth0
narcissus.mcslp.pri      ether   00:16:CB:85:2D:15   C                     eth0
solaris2.vmbear.mcslp.p  ether   00:0C:29:7F:0D:C5   C                     eth0
nautilus.wireless.mcslp  ether   00:17:F2:40:4D:1B   C                     eth0
sulaco.mcslp.pri         ether   00:16:CB:A0:3B:CB   C                     eth0

使用现代的以太网交换机,代替较旧的集线器结构,arp输出的信息可能仅限于发送到特定主机或从特定主机接收的数据包。 如果您可以在服务器上运行arp,则将获得更长的信息列表,但这并不总是可行或实际的。

在某些网络交换机上,您有一个网络管理或监视端口,在该端口上,所有数据包都得到了回显,并且可以用来获取有关其他网络设备以及网络结构的信息。 如果您无权访问此信息,则可能需要更强力的方法来查找网络上的主机。

在网络上查找其他主机

nmap工具是一种实用程序,可以在您的网络中执行各种不同的扫描,以查找和确定不同级别的信息。 从根本上讲,它可用于查找给定网络中的所有主机。

前面的文章探讨了如何获取主机的当前IP地址和网络掩码信息。 您可以使用此信息来设置nmap的基本搜索参数,以尝试查找网络上的所有主机。 要指定此信息,您必须使用CIDR样式地址。 CIDR格式使用主机的IP地址以及网络掩码中的位数确定网络的范围。

在示例主机中,IP地址为192.168.1.25,网络掩码为255.255.252.0。 相当于22位-第一部分为8位,第二部分为8位,第三部分为6位。

使用此地址运行nmap将扫描该范围内的每个IP地址(例如,192.168.0.0和192.168.3.255之间的每个地址),并确定哪些主机答复。

您可以执行许多不同的测试,包括使用标准ping协议的测试,或在禁用ping协议的情况下尝试其他网络端口的更广泛的测试。 例如,ping测试将显示清单17中的主机列表。

清单17.运行nmap来扫描IP地址范围
$ nmap -sP 192.168.1.25/22

Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 15:59 GMT
Host 192.168.0.1 appears to be up.
Host bear.mcslp.pri (192.168.0.2) appears to be up.
Host narcissus.mcslp.pri (192.168.0.3) appears to be up.
Host 192.168.0.10 appears to be up.
Host 192.168.0.27 appears to be up.
Host sulaco.mcslp.pri (192.168.0.101) appears to be up.
Host nautilus.wireless.mcslp.pri (192.168.0.109) appears to be up.
Host 192.168.1.1 appears to be up.
Host 192.168.1.25 appears to be up.
Host gentoo1.vmbear.mcslp.pri (192.168.1.52) appears to be up.
Host gentoo2.vmbear.mcslp.pri (192.168.1.53) appears to be up.
Nmap done: 1024 IP addresses (11 hosts up) scanned in 5.78 seconds

ping检查可以使您快速了解网络上还有哪些其他计算机。 在这种情况下,已发现11台主机,但并非所有主机都可以解析回一个名称。 这是DNS配置中的错误,应予以修复,因为某些系统使用反向查找(IP地址为名称)作为安全检查,以确保客户端IP地址未被伪造。

在网络上查找其他服务

ping检查很有用,但是如果您想知道一台单独的计算机实际向其公开的服务,请使用TCP检查。 TCP检查需要更长的时间,因为nmap将尝试使用TCP / IP协议从列表中的每个主机打开端口。 这样可以更有效地显示网络上的主机,并提供有关每个主机打开的端口的详细信息。 您可以在清单18中看到这一点。

清单18.使用TCP检查
$ nmap -sT 192.168.1.25/22

Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:03 GMT
Interesting ports on 192.168.0.1:
Not shown: 997 closed ports
PORT      STATE SERVICE
80/tcp    open  http
8080/tcp  open  http-proxy
49153/tcp open  unknown

Interesting ports on bear.mcslp.pri (192.168.0.2):
Not shown: 987 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
143/tcp  open  imap
443/tcp  open  https
902/tcp  open  iss-realsecure
993/tcp  open  imaps
2000/tcp open  callbook
2049/tcp open  nfs
3128/tcp open  squid-http
3306/tcp open  mysql

Interesting ports on narcissus.mcslp.pri (192.168.0.3):
Not shown: 982 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
88/tcp   open  kerberos-sec
106/tcp  open  pop3pw
111/tcp  open  rpcbind
311/tcp  open  asip-webadmin
389/tcp  open  ldap
548/tcp  open  afp
625/tcp  open  apple-xsrvr-admin
749/tcp  open  kerberos-adm
1021/tcp open  unknown
1022/tcp open  unknown
3659/tcp open  unknown
3689/tcp open  rendezvous
4111/tcp open  unknown
5900/tcp open  vnc
8086/tcp open  unknown
8087/tcp open  unknown

Interesting ports on 192.168.0.10:
Not shown: 997 closed ports
PORT    STATE SERVICE
23/tcp  open  telnet
80/tcp  open  http
443/tcp open  https

Interesting ports on 192.168.0.27:
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Interesting ports on sulaco.mcslp.pri (192.168.0.101):
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
88/tcp   open  kerberos-sec
548/tcp  open  afp
631/tcp  open  ipp
2170/tcp open  unknown

Interesting ports on nautilus.wireless.mcslp.pri (192.168.0.109):
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
88/tcp   open  kerberos-sec
111/tcp  open  rpcbind
1001/tcp open  unknown
5900/tcp open  vnc

Interesting ports on 192.168.1.1:
Not shown: 995 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
80/tcp   open  http
5431/tcp open  unknown

Interesting ports on 192.168.1.25:
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
4045/tcp open  lockd

Interesting ports on gentoo1.vmbear.mcslp.pri (192.168.1.52):
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
3128/tcp open  squid-http

Interesting ports on gentoo2.vmbear.mcslp.pri (192.168.1.53):
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1024 IP addresses (11 hosts up) scanned in 32.27 seconds

从此输出中,您可以看到网络上有许多服务器提供各种服务。 例如,位于192.168.0.1的设备提供HTTP和HTTP代理服务。 除smtp imap,nfs和MySQL服务外,Sp还会执行bear.mcslp.pri。

要确定有关这些服务的更多特定信息,可以再次将nmap与version参数一起使用,以获取有关在特定主机上打开的协议和端口的版本信息的更特定列表。

例如,检查似乎是主服务器(熊)的服务器,您可以非常清楚地知道每个端口背后正在运行什么(参见清单19)。

清单19.将nmap与version参数一起使用
$ nmap -sT -sV bear

Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:17 GMT
Interesting ports on localhost (127.0.0.1):
Not shown: 985 closed ports
PORT      STATE SERVICE         VERSION
22/tcp    open  ssh             OpenSSH 5.1 (protocol 2.0)
25/tcp    open  smtp            Postfix smtpd
53/tcp    open  domain          ISC BIND 9.4.3-P1
111/tcp   open  rpcbind
143/tcp   open  imap            Cyrus IMAP4 2.3.13-Gentoo
443/tcp   open  ssl/http        Apache httpd
783/tcp   open  spamassassin    SpamAssassin spamd
902/tcp   open  ssl/vmware-auth VMware Authentication Daemon 1.10 (Uses VNC)
993/tcp   open  ssl/imap        Cyrus imapd
2000/tcp  open  sieve           Cyrus timsieved 2.3.13-Gentoo (included w/cyrus imap)
2049/tcp  open  rpcbind
3128/tcp  open  http-proxy      Squid webproxy 2.7.STABLE6
3306/tcp  open  mysql           MySQL 5.0.60-log
10024/tcp open  smtp            amavisd smtpd
10025/tcp open  smtp            Postfix smtpd
Service Info: Hosts:  gendarme.mcslp.com, bear, 127.0.0.1

Service detection performed. Please report any incorrect results at
   http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.12 seconds

在这种情况下,您可以看到许多特定服务,这一次显示了每种情况下提供的版本甚至应用程序信息。

确定您网络上的身份不明的主机

当您在网络上找到一台主机时,尤其是您可能不会立即识别的主机,您可能想了解有关该主机的更多信息。 TCP端口扫描向您显示了主机支持哪些服务,但这并不一定说明全部。 某些设备和系统可能会或可能不会以无法立即使网络中的内容显而易见的方式公开端口。

nmap操作系统扫描会检查打开的端口,并尝试找出系统在不同服务背后的作用。 这可以在识别具有开放端口的服务器和网络上的新设备之间有所不同。

例如,如果您在服务器Bear上运行操作系统标识,则可以将系统标识为运行传统版本的Linux,这可能表示一台标准计算机,如清单20所示。

清单20. nmap操作系统扫描
# nmap -sT -O bear

Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:20 GMT
Interesting ports on localhost (127.0.0.1):
Not shown: 985 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
53/tcp    open  domain
111/tcp   open  rpcbind
143/tcp   open  imap
443/tcp   open  https
783/tcp   open  spamassassin
902/tcp   open  iss-realsecure
993/tcp   open  imaps
2000/tcp  open  callbook
2049/tcp  open  nfs
3128/tcp  open  squid-http
3306/tcp  open  mysql
10024/tcp open  unknown
10025/tcp open  unknown
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.17 - 2.6.25
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds

操作系统扫描并不完美,它依靠指纹技术来确定打开的端口和返回的版本信息的含义。 例如,清单21中的下面的扫描已确定了端口类型后面可能存在的许多潜在操作系统。

清单21.扫描以识别许多潜在的操作系统
# nmap -sT -O some.faroffhost.com

Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:23 GMT
Interesting ports on some.faroffhost.com (205.196.217.20):
Not shown: 976 closed ports
PORT     STATE    SERVICE
21/tcp   open     ftp
22/tcp   open     ssh
25/tcp   open     smtp
110/tcp  open     pop3
111/tcp  filtered rpcbind
113/tcp  open     auth
135/tcp  filtered msrpc
139/tcp  filtered netbios-ssn
143/tcp  open     imap
548/tcp  open     afp
554/tcp  open     rtsp
555/tcp  open     dsf
587/tcp  open     submission
687/tcp  open     unknown
993/tcp  open     imaps
995/tcp  open     pop3s
1720/tcp filtered H.323/Q.931
5222/tcp open     unknown
5269/tcp open     unknown
5666/tcp open     unknown
7070/tcp open     realserver
8000/tcp open     http-alt
8001/tcp open     unknown
8649/tcp open     unknown
Device type: print server|general purpose|storage-misc|WAP|switch|specialized
Running (JUST GUESSING) : HP embedded (92%), Linux 2.6.X|2.4.X (92%), Buffalo embedded 
(91%), Acorp embedded (89%), Actiontec Linux 2.4.X (89%), Linksys embedded (89%), 
Netgear embedded (89%), Infoblox NIOS 4.X (89%)
Aggressive OS guesses: HP 4200 PSA (Print Server Appliance) model J4117A (92%), 
Linux 2.6.20 (Ubuntu 7.04 server, x86) (92%), Linux 2.6.9 (92%), Buffalo TeraStation NAS 
device (91%), Linux 2.6.18 (CentOS 5.1, x86) (91%), OpenWrt 7.09 (Linux 2.4.34) (90%), 
Acorp W400G or W422G wireless ADSL modem (MontaVista Linux 2.4.17) (89%), HP Brocade 
4100 switch; or Actiontec MI-424-WR, Linksys WRVS4400N, or Netgear WNR834B wireless 
broadband router (89%), HP Brocade 4Gb SAN switch (89%), Infoblox NIOS Release 
4.1r2-5-22263 (89%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 18 hops

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.66 seconds

值得注意的是,nmap扫描可以在本地和远程网络上使用。 在上面的远程测试中,nmap确定了数据包到达目的地之前必须经过的不同系统。 了解您和网络上其他计算机之间的不同设备通常是了解和确定网络布局的最后一部分。

确定网络结构

每当在网络上发送IP网络数据包时,每次系统将数据包转发到另一个网络或系统时,都会增加一个特殊计数器。 数据包的转发发生在许多不同的系统中。 如果将多个网络交换机连接在一起,则每个集线器都可以将自己标识为新设备。 另外,无线接入点和传统路由器都是转发数据包的设备示例,因此被视为数据包网络路由的一部分。

在大多数网络环境中,本地网络中的集线器,交换机和其他组件不会增加该值,但是随着您在整个网络中的扩展,网络会变得越来越大,越来越复杂,因此了解单个数据包采用的路由可能会有所帮助您可以确定性能和连接性问题。

用于显示与主机通信的路由信息​​的主要工具是traceroute。 这将确定从当前主机到目标主机的给定路径内每个主机的IP地址。 如果主机是直接在本地的,则路由显然是直接的(请参见清单22)。

清单22.使用traceroute
$ traceroute solaris2
traceroute to solaris2 (192.168.1.25), 30 hops max, 40 byte packets
 1  solaris2.mcslp.pri (192.168.1.25)  0.651 ms  0.892 ms  0.969 ms

对于可以通过本地路由器或网桥访问的本地网络中的主机,请参见清单23。

清单23.本地网络中的主机
$ traceroute gentoo1
traceroute to gentoo1 (192.168.1.52), 30 hops max, 40 byte packets
 1  gendarme.mcslp.pri (192.168.0.1) 3.163 ms  3.159 ms  6.618 ms
 2  gentoo1.mcslp.pri (192.168.1.52)  34.336 ms  34.341 ms  34.341 ms

与远程网络的连接可能会显示每个路由器以及数据包所采取的步骤(请参见清单24)。

清单24.到远程网络的连接
$ traceroute www.ibm.com
traceroute to www.ibm.com (129.42.58.216), 30 hops max, 40 byte packets
 1  gendarme.mcslp.pri (192.168.0.1)  3.163 ms  3.159 ms  6.618 ms
 2  gauthier-dsl1.hq.zen.net.uk (62.3.82.17)  34.336 ms  34.341 ms  34.341 ms
 3  lotze-ge-0-0-1-136.hq.zen.net.uk (62.3.80.137)  37.581 ms  47.276 ms  50.548 ms
 4  nietzsche-ae2-0.ls.zen.net.uk (62.3.80.70)  43.945 ms  47.239 ms  50.529 ms
 5  nozick-ge-3-1-0-0.ls.zen.net.uk (62.3.80.74)  55.343 ms  55.341 ms  55.339 ms
 6  lorenz-ge-3-0-0-0.te.zen.net.uk (62.3.80.78)  66.347 ms  63.118 ms  63.105 ms
 7  82.195.188.13 (82.195.188.13)  146.039 ms  118.175 ms  124.532 ms
 8  sl-bb22-lon-8-0.sprintlink.net (213.206.128.60)  50.460 ms  47.273 ms  40.991 ms
 9  sl-bb20-lon-12-0.sprintlink.net (213.206.128.52)  47.107 ms  47.094 ms  43.711 ms
10  sl-crs2-nyc-0-5-3-0.sprintlink.net (144.232.9.164)  111.579 ms  113.173 ms  
      113.159 ms
11  144.232.18.238 (144.232.18.238)  116.353 ms  111.633 ms  111.619 ms
12  0.xe-5-0-1.XL3.NYC4.ALTER.NET (152.63.3.125)  114.812 ms  111.788 ms  115.000 ms
13  0.so-7-1-0.XT3.STL3.ALTER.NET (152.63.0.6)  151.969 ms  142.573 ms  142.574 ms
14  POS6-0.GW8.STL3.ALTER.NET (152.63.92.37)  142.552 ms  253.001 ms  252.986 ms
15  ibm-gw.customer.alter.net (65.206.180.74)  179.655 ms  228.775 ms  228.751 ms
16  10.16.255.10 (10.16.255.10)  145.847 ms  139.310 ms  142.509 ms
17  * * *
18  129.42.58.216 (129.42.58.216)  143.118 ms  141.181 ms  141.152 ms

使用此方法,结合nmap确定主机列表,您可以更好地了解网络上的主机以及使用哪些路由器和系统访问这些系统。

摘要

结论

在本教程中,您了解了许多不同的UNIX工具和技术,这些工具和技术可用于确定有关网络上主机的不同信息,它们的可访问性,所连接的机器和其他系统以及服务和他们提供的系统。

一起使用这些技术,您应该能够进入任何UNIX环境并制定网络配置,并通过记录信息来确定出现问题的方式和原因以及如何解决问题。


翻译自: https://www.ibm.com/developerworks/aix/tutorials/au-unixnetworkanalysis/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值