诸神之眼:Nmap网络安全审计技术揭秘
上QQ阅读APP看书,第一时间看更新

2.10 主机发现技术的分析

“临河而羡鱼,不如归家织网。”在我们惊叹Nmap的强大功能之时,不如动手研究它的内在机制。也许你就是下一个风靡世界的网络软件的开发者。

Nmap中提供了--packet-trace选项,通过它就可以观察Nmap发出了哪些数据包,收到了哪些数据包,有了这个研究方法,可以更深入地理解Nmap的运行原理。

使用SCTP的-PY选项对目标主机60.2.22.35和192.168.0.1进行扫描。

首先扫描60.2.22.35。

    Nmap -sn -PY 60.2.22.35

扫描的结果如下。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-17 12:51
    Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
    Nmap done: 1 IP address (0 hosts up) scanned in 3.77 seconds

这个结果显示60.2.22.35的主机并非活跃主机,但是通过之前的扫描可以知道这台主机其实处于活跃状态,得到这样的结果是因为目标主机并不支持SCTP协议。接下来使用同样的选项来扫描192.168.0.1。

    Nmap -sn -PY 192.168.0.1

扫描的结果如下。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-17 12:52
    Nmap scan report for 192.168.0.1
    Host is up (0.0040s latency).
    MAC Address: D8:FE:E3:B3:87:A9 (D-Link International)
    Nmap done: 1 IP address (1 host up) scanned in 1.77 seconds

扫描的结果是该主机为活跃状态,但是奇怪的是这台主机也没有安装SCTP协议,但是结果却和上面的完全不同。这里使用--packet-trace选项来追踪Nmap发送的数据包。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-17 13:01
    SENT (0.4940s) SCTP 192.168.0.5:40896 > 60.2.22.35:80 ttl=51 id=6676 iplen=52
    SENT (1.4970s) SCTP 192.168.0.5:40897 > 60.2.22.35:80 ttl=50 id=26673 iplen=52
    Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
    Nmap done: 1 IP address (0 hosts up) scanned in 3.71 seconds

从这里可以看到,在对60.2.22.35进行扫描时,Nmap发送了SCTP数据包,但是没有收到目标的应答包,因此Nmap判断目标主机状态为down,即非活跃主机。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-17 12:58
    SENT (0.4930s) ARP who-has 192.168.0.1 tell 192.168.0.5
    RCVD (0.4930s) ARP reply 192.168.0.1 is-at D8:FE:E3:B3:87:A9
    Nmap scan report for 192.168.0.1
    Host is up (0.00s latency).
    MAC Address: D8:FE:E3:B3:87:A9 (D-Link International)
    Nmap done: 1 IP address (1 host up) scanned in 1.72 seconds

在对192.168.0.1扫描时,虽然也使用了-PY选项,但是根本没有发送SCTP数据包,而是使用了ARP格式的请求。

这其实是由于Nmap的设计思路,Nmap会首先判断目标主机与Nmap所在主机是否在同一网段,如果相同的话,则直接使用ARP扫描模式。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-17 13:18
    SENT (0.5060s) ICMP [192.168.0.5 > 60.2.22.35 Echo request (type=8/code=0)
      id=4058 seq=0] IP [ttl=53 id=43312 iplen=28 ]
    SENT (0.5160s) TCP 192.168.0.5:38315 > 60.2.22.35:443 S ttl=49 id=52394
    iplen=44  seq=586499036 win=1024 <mss 1460>
    SENT (0.5160s) TCP 192.168.0.5:38315 > 60.2.22.35:80 A ttl=40 id=40789 iplen=40
    seq=0 win=1024
    SENT (0.5160s) ICMP [192.168.0.5 > 60.2.22.35 Timestamp request (type=13/
    code=0) id=42851 seq=0 orig=0 recv=0 trans=0] IP [ttl=57 id=42214 iplen=40 ]
    RCVD (0.5260s) ICMP [60.2.22.35 > 192.168.0.5 Echo reply (type=0/code=0)
    id=4058 seq=0] IP [ttl=52 id=63979 iplen=28 ]
    Nmap scan report for 60.2.22.35
    Host is up (0.020s latency).
    Nmap done: 1 IP address (1 host up) scanned in 1.75 seconds

通过上面结果可以很清楚地看到,在没有任何指定的情况下Nmap会向目标发送两个ICMP数据包,分别为Echo request和Timestamp request,这两个ICMP数据包的目标端口分别为443、80。

这里面使用--packet-trace分析了两个问题。

▯ Nmap在进行主机发现的时候,无论你指定了何种方式,Nmap都会先判断一下目标主机与自己是否在同一子网中,如果在同一子网中,Nmap直接使用ARP协议扫描的方式,而不会使用你所指定的方式。

▯ 当不指定扫描方式的时候,Nmap其实发送了4个数据包。