NMAP 常用掃描簡介(一)
我們之前在 NMAP 的安裝一文中,列出了 10 種不同的 ZeNMAP 掃描模式。大多數的模式使用了各種參數。各種參數代表了執行不同的掃描模式。這篇文章將介紹其中的四種通用的掃描類型。
四種通用掃描類型
下面列出了最常使用的四種掃描類型:
- PING 掃描 (
-sP
) - TCP SYN 掃描 (
-sS
) - TCP Connect() 掃描 (
-sT
) - UDP 掃描 (
-sU
)
當我們利用 NMAP 來執行掃描的時候,這四種掃描類型是我們需要熟練掌握的。更重要的是需要知道這些命令做了什麼並且需要知道這些命令是怎麼做的。本文將介紹 PING 掃描和 UDP 掃描。在之後的文中會介紹 TCP 掃描。
PING 掃描 (-sP)
某些掃描會造成網路擁塞,然而 Ping 掃描在網路中最多只會產生兩個包。當然這兩個包不包括可能需要的 DNS 搜索和 ARP 請求。每個被掃描的 IP 最少只需要一個包來完成 Ping 掃描。
通常 Ping 掃描是用來查看在指定的 IP 地址上是否有在線的主機存在。例如,當我擁有網路連接卻連不上一台指定的網路伺服器的時候,我就可以使用 PING 來判斷這台伺服器是否在線。PING 同樣也可以用來驗證我的當前設備與網路伺服器之間的路由是否正常。
注意: 當我們討論 TCP/IP 的時候,相關信息在使用 TCP/IP 協議的互聯網與區域網(LAN)中都是相當有用的。這些程序都能工作。同樣在廣域網(WAN)也能工作得相當好。
當參數給出的是一個域名的時候,我們就需要域名解析服務來找到相對應的 IP 地址,這個時候將會生成一些額外的包。例如,當我們執行 ping linuxforum.com
的時候,需要首先請求域名(linuxforum.com)的 IP 地址(98.124.199.63)。當我們執行 ping 98.124.199.63
的時候 DNS 查詢就不需要了。當 MAC 地址未知的時候,就需要發送 ARP 請求來獲取指定 IP 地址的 MAC 地址了(LCTT 譯註:這裡的指定 IP 地址,未必是目的 IP)。
Ping 命令會向指定的 IP 地址發送一個英特網信息控制協議(ICMP)包。這個包是需要響應的 ICMP Echo 請求。當伺服器系統在線的狀態下我們會得到一個響應包。當兩個系統之間存在防火牆的時候,PING 請求包可能會被防火牆丟棄。一些伺服器也會被配置成不響應 PING 請求來避免可能發生的死亡之 PING。(LCTT 譯註:現在的操作系統似乎不太可能)
注意: 死亡之 PING 是一種惡意構造的 PING 包當它被發送到系統的時候,會造成被打開的連接等待一個 rest 包。一旦有一堆這樣的惡意請求被系統響應,由於所有的可用連接都已經被打開,所以系統將會拒絕所有其它的連接。技術上來說這種狀態下的系統就是不可達的。
當系統收到 ICMP Echo 請求後它將會返回一個 ICMP Echo 響應。當源系統收到 ICMP Echo 響應後我們就能知道目的系統是在線可達的。
使用 NMAP 的時候你可以指定單個 IP 地址也可以指定某個 IP 地址段。當被指定為 PING 掃描(-sP
)的時候,會對每一個 IP 地址執行 PING 命令。
在圖 1 中你可以看到我執行 nmap -sP 10.0.0.1-10
命令後的結果。程序會試著聯繫 IP 地址 10.0.0.1 到 10.0.0.10 之間的每個系統。對每個 IP 地址都要發出三個 ARP 請求。在我們的例子中發出了三十個請求,這 10 個 IP 地址裡面有兩個有回應。(LCTT 譯註:此處原文存疑。)
圖 1
圖 2 中展示了網路上另一台計算機利用 Wireshark 抓取的發出的請求——沒錯,是在 Windows 系統下完成這次抓取的。第一行展示了發出的第一條請求,廣播請求的是 IP 地址 10.0.0.2 對應 MAC 地址。由於 NMAP 是在 10.0.0.1 這台機器上執行的,因此 10.0.0.1 被略過了。由於本機 IP 地址被略過,我們現在可以看到總共只發出了 27 個 ARP 請求。第二行展示了 10.0.0.2 這台機器的 ARP 響應。第三行到第十行是其它八個 IP 地址的 ARP 請求。第十一行是由於 10.0.0.2 沒有收到請求系統(10.0.0.1)的反饋所以(重新)發送的另一個 ARP 響應。第十二行是源系統向 10.0.0.2 發起的 HTTP 連接的 『SYN』 和 Sequence 0。第十三行和第十四行的兩次 Restart(RST)和 Synchronize(SYN)響應是用來關閉(和重發)第十二行所打開的連接的。注意 Sequence ID 是 『1』 - 是源 Sequence ID + 1。第十五行開始就是類似相同的內容。(LCTT 譯註:此處原文有誤,根據情況已經修改。)
圖 2
回到圖 1 中我們可以看到有兩台主機在線。其中一台是本機(10.0.0.1)另一台是(10.0.0.2)。整個掃描花費了 14.40 秒。
PING 掃描是一種用來發現在線主機的快速掃描方式。掃描結果中沒有關於網路、系統的其它信息。這是一種較好的初步發現網路上在線主機的方式,接著你就可以針對在線系統執行更加複雜的掃描了。你可能還會發現一些不應該出現在網路上的系統。出現在網路上的流氓軟體是很危險的,他們可以很輕易的收集內網信息和相關的系統信息。
一旦你獲得了在線系統的列表,你就可以使用 UDP 掃描來查看哪些埠是可能開啟了的。
UDP 掃描 (-sU)
現在你已經知道了有那些系統是在線的,你的掃描就可以聚焦在這些 IP 地址之上。在整個網路上執行大量的沒有針對性的掃描活動可不是一個好主意,系統管理員可以使用程序來監控網路流量當有大量異常活動發生的時候就會觸發警報。
用戶數據報協議(UDP)在發現在線系統的開放埠方面十分有用。由於 UDP 不是一個面向連接的協議,因此是不需要響應的。這種掃描方式可以向指定的埠發送一個 UDP 包。如果目標系統沒有回應那麼這個埠可能是關閉的也可能是被過濾了的。如果埠是開放狀態的那麼應該會有一個響應。在大多數的情況下目標系統會返回一個 ICMP 信息說埠不可達。ICMP 信息讓 NMAP 知道埠是被關閉了。如果埠是開啟的狀態那麼目標系統應該響應 ICMP 信息來告知 NMAP 埠可達。
注意: 只有最前面的 1024 個常用埠會被掃描。(LCTT 譯註:這裡將 1000 改成了1024,因為手冊中寫的是默認掃描 1 到 1024 埠)在後面的文章中我們會介紹如何進行深度掃描。
由於我知道 10.0.0.2 這個主機是在線的,因此我只會針對這個 IP 地址來執行掃描。掃描過程中總共收發了 3278 個包。sudo nmap -sU 10.0.0.2
這個命令的輸出結果在圖 3 中展現。
圖 3
在這副圖中你可以看見埠 137(netbios-ns)被發現是開放的。在圖 4 中展示了 Wireshark 抓包的結果。不能看到所有抓取的包,但是可以看到一長串的 UDP 包。
圖 4
如果我把目標系統上的防火牆關閉之後會發生什麼呢?我的結果有那麼一點的不同。NMAP 命令的執行結果在圖 5 中展示。
圖 5
注意: 當你執行 UDP 掃描的時候是需要 root 許可權的。
會產生大量的包是由於我們使用了 UDP。當 NMAP 發送 UDP 請求時它是不保證數據包會被收到的。因為數據包可能會在中途丟失因此它會多次發送請求。
via: https://www.linuxforum.com/threads/nmap-common-scans-part-one.3637/
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive