1. 程式人生 > >網路掃描工具Nmap、Zmap、Masscan之簡述

網路掃描工具Nmap、Zmap、Masscan之簡述

網路掃描是資訊收集的重要手段。通過掃描可以發現存活主機、開放埠,進而發現其執行的服務、作業系統等資訊,為下一步的工作奠定基礎。掃描工具的選取尤為重要。目前,有不少掃描工具可供選擇,且各有特色。其中,Nmap以其強大而豐富的功能被絕大部分人所使用。除此之外,號稱“45分鐘掃描全網”的Zmap以及“6分鐘掃描全網”的Masscan也有著較高的使用率。接下來,本文將對Nmap、Zmap、Masscan這三種掃描工具進行一些比較。

一、使用環境

Nmap可以在Linux、Windows、Mac OS下執行,並且有圖形化介面Zenmap;

Zmap、Masscan可以在Linux、Mac OS下執行,同時也可以在Windows下使用,不過要藉助Cygwin等工具。

二、功能

Zmap

Zmap採用了無狀態的掃描技術,沒有進行完整的TCP三次握手,因此掃描速度極大提升。Zmap的基本功能是掃描發現主機的開放埠。

l  一次掃描支援單埠,不支援在命令裡設定目標IP。

l  設定黑白名單,由於Zmap設計為在全網範圍內尋找主機,若想對特定網段進行掃描,可以利用白名單的方式;

l  設定掃描數量和掃描時間;

l  設定掃描速率,由於Zmap會以網路介面卡支援的最快速率進行掃描,不會根據上游流量提供商自動調整發送速率,需要手動調整,來減少丟包和不正確的結果。可以通過設定每秒發包數量或頻寬進行調整;

l  設定掃描源埠、源IP,偽造閘道器MAC地址進行偽裝。

l  結果輸出預設csv格式,經過額外的配置可輸出redis和JSON;使用者也可以用官方提供的API自己編寫輸出模組。

l  掃描模式,支援TCPSYN、ICMP echo、UDP三種掃描模式,使用者也可以用官方提供的API自己編寫探測模組。

l  Banner獲取,Zmap並不直接提供Banner獲取功能,需要編寫擴充套件模組,不過開發者已經為我們提供了一個樣本。詳情見後文。

Masscan

Masscan與Zmap類似,同樣採用了無狀態的掃描技術。

l  允許自定義任意的地址範圍和埠範圍;

l  設定黑白名單;

l  設定掃描速率;

l  指定發包的源IP地址、源埠和源MAC地址進行偽裝。

l  結果輸出支援xml、binary、JSON、list等多種格式。

l  為了配合使用者的各種掃描需求,Masscan提供了重試次數、UA欄位值、發出資料包的TTL值、發包後的等待時間等掃描設定。

l  Banner獲取直接在掃描命令裡使用—banners即可。

Nmap

Nmap的功能非常強大,而且作為一個廣泛使用的開源工具,全球的開發者都為其功能的豐富貢獻了力量。因此,本文僅對其功能進行簡單的描述。

基本功能:主機發現,開放埠掃描,支援多埠、多網段,可對目標域名進行掃描;

識別功能:識別埠服務型別及版本、作業系統、裝置型別等;

掃描模式:TCP SYN scan、TCP connectscan、UDP scan、No Ping scan等;

規避檢測:分片、IP偽裝、MAC偽裝。

三、擴充套件性

Zmap

Zmap的擴充套件模組需使用C語言編寫,官方提供了兩個擴充套件模組用於獲取Banner。

1.      banner-grab-tcp

原理是向掃描發現的IP進行二次發包抓取Banner,二次發包的內容需要自定義。

2.      forge-socket

功能與前者一樣,但需要先安裝驅動。該模組以底層驅動方式,效率更高。

除了以上兩個擴充套件模組,使用者也可以結合需求自行編寫。

Nmap

Nmap有強大的指令碼引擎框架,使用者可以使用Lua語言編寫擴充套件。目前官方提供了400多個擴充套件指令碼,用於增強基礎功能和擴充套件更多功能,如漏洞檢測、口令爆破等。在掃描命令中使用—script=scriptname呼叫即可。

四、速度和效率

三種掃描工具在功能上各有長短,本文針對其最基本的埠掃描、主機發現功能進行了實驗對比。

實驗環境

作業系統:CentOS 6.5
網路頻寬:2000Kbps左右

實驗過程

本文分別編寫了三個Python指令碼,執行掃描命令。選取來自美歐中非的幾個網段,在一次掃描中,針對相同網段和15個常用埠進行掃描,並將結果最後轉存到資料庫中,對比Zmap、Masscan、Nmap三種工具在相同環境下執行掃描的速度和結果數量。

實驗結果

網段 Zmap Masscan Nmap
144.76.183.0/24 時間 11min43s 1min27s 7min39s
結果數量 323 315 317
125.56.212.0/24 時間 11min34s 54s 7min53s
結果數量 496 496 496
129.232.174.0/24 時間 11min24s 53s 15min55s
結果數量 416 427 429
125.71.28.0/24 時間 11min437s 50s 5min42s
結果數量 47 47 47
125.65.110.0/24 時間 11min39s 56s 4min55s
結果數量 275 254 275
134.213.61.0/24 時間 11min46s 56s 37min50s
結果數量 167 168 168
138.186.177.0/24 105.198.227.0/24 時間 22min34s 1min29s 2h18min47s
結果數量 363 183 368

時間方面,Zmap和Masscan掃描耗時與到掃描目標數量成正比,Zmap由於每次只能針對一個埠進行掃描,對於15個埠的情況需要在指令碼中發起15次掃描,因此耗時高於Masscan;Nmap的耗時情況並不穩定,懷疑與目標網段網路環境有關。

結果數量方面,在對一個C段進行掃描的時候,三種工具的主機發現數量差距不大;而在對兩個C段進行掃描的實驗中,Masscan出現了明顯的遺漏。

五、延伸工具

Masscan

【Masscan Web Interface】可以匯入XML檔案,讓使用者方便地搜尋掃描結果。

Nmap

【Rainmap Lite】Web版Nmap,僅需安裝Django,就可以建立新的掃描伺服器,允許使用者從他們的手機/平板電腦/網路瀏覽器啟動Nmap掃描。

【Dracnmap】將Nmap複雜的命令進行一定程度的整合與簡化,使新使用者更加容易上手。

【LazyMap】可以自動進行Nmap掃描,並且能自動生成定製的Nessus策略。

【DNmap】Nmap的分散式版本,採用C/S結構,由伺服器接受命令分發到客戶端執行掃描。

六、總結

以上三種掃描工具各有利弊,工具的選取應該結合具體情況決定。Zmap和Masscan採用了無狀態的掃描技術,掃描速度非常可觀。在資訊收集的初級階段,可以使用Zmap或Masscan進行目標的情勢瞭解,掃描單一埠的情況考慮使用Zmap,而多埠的情況下Masscan則更為快速。在做完初步瞭解之後,則應該使用功能更加豐富的Nmap進行進一步的詳細掃描。

七、參考文獻

文章來自微信公眾號:DevOps