Nmap端口掃描
1. 端口掃描的作用
Nmap(“網絡映射器”)是免費開放源代碼(許可證)實用程序,用於網絡發現和安全審覈。許多系統和網絡管理員還發現它對於諸如網絡清單,管理服務升級計劃以及監視主機或服務正常運行時間之類的任務很有用。Nmap以新穎的方式使用原始IP數據包來確定網絡上可用的主機,這些主機提供的服務(應用程序名稱和版本),它們正在運行的操作系統(和OS版本),包過濾器/防火牆的類型。正在使用中,還有許多其他特性。它旨在快速掃描大型網絡,但可以在單個主機上正常運行。Nmap可在所有主要的計算機操作系統上運行,並且官方二進制程序包可用於Linux,Windows和Mac OSX。除了經典的命令行Nmap可執行文件之外,Zenmap),靈活的數據傳輸,重定向和調試工具(Ncat),用於比較掃描結果的實用程序(Ndiff)以及數據包生成和響應分析工具(Nping)。
官網:[https://nmap.org(https://nmap.org/)
Namp的一些功能
- 檢測存活在網絡上的主機(主機發現)
- 檢測主機上開放的端口(端口發現或枚舉)
- 檢測相應的端口(服務發現)的軟件和版本
- 檢測操作系統,硬件地址,以及軟件版本
- 檢測脆弱性的漏洞(Nmap的腳本)
2. Nmap的常用指令,瞭解端口的六種狀態
- -sS: TCP SYN掃描
- -p:指定端口號掃描
- -v:顯示掃描過程
- -F:快速掃描
- -Pn:禁止ping後掃描:跳過主機發現的過程進行端口掃描
- -A:全面的系統掃描:包括打開操作系統探測、版本探測、腳本掃描、路徑跟蹤
掃描指定IP開放端口
命令:nmap -sS -p 端口號 -v 192.168.1.2
使用半開掃描,,指定端口號1-65535,顯示掃描過程
穿透防火牆掃描
命令:nmap -Pn -A 192.168.221.12
服務器禁止ping命令,試試-Pn,nmap參數配合使用
端口掃描的狀態
- Opened:端口開啓
- Closed:端口關閉
- Filtered:端口被過濾,數據沒有到達主機,返回的結果爲空,數據被防火牆攔截
- Unfiltered:未被過濾,數據有到達主機但是不能識別端口的當前狀態
- Open|filtered:開放或者被過濾,端口沒有返回值,主要發生在UDP、IP、FIN、NULL和Xmas掃描中
- Closed|filtered:關閉或者被過濾,只發生在IP ID idle掃描
3. 瞭解nmap掃描的模式
TCP SYN scanning -sS
這種掃描方式又被稱爲tcp半開放掃描。顧名思義,這種掃描不需要建立完整的tcp連接,即可掃描端口的狀態。發送tcp syn數據包,這個也是tcp握手的第一個包。如果端口開放,則會返回 tcp syn+ack數據包。如果端口關閉,則返回 tcp rst數據包。這樣我們就不用進行tcp 握手的第三步,也可以探測端口的狀態。這種掃描需要構建raw socket。所以需要root權限
TCP FIN scanning
有些時候防火牆繪過濾tcp syn數據包,有些時候會記錄syn數據包並檢測時候有nmap掃描。這時候可以使用TCP FIN scanning。這種方式很簡單。發送tcp FIN數據包到待測端口。如果返回RST數據包,則說明該端口關閉,如果無返回則說明該端口開放。這時tcp協議的一個BUG,所以這種掃描方式不一定百分之百可靠(例如windows),但是這種掃描方式適合大部分 *NIX 系統
TCP NULL, FIN, and Xmas scans
在RFC 793的第65頁寫到,如果目的端口的是關閉的,並且接受到的tcp數據包如果可能會導致系統錯誤,則返回RST。如果開放的端口接受到諸如SYN RST ACK,則丟棄或者不做任何處理。根據此RFC描述,我們可以發送不包含SYN RST或者ACK標誌的數據包,如果返回RST則說明端口是關閉狀態,如果什麼都沒有返回則說明端口是開放狀態。
- Null scan
tcp flag headers 全爲0 - FIN scan
只設置tcp FIN標誌 - xmas scan
同時設置FIN PSH URG標誌位。
上面這三種掃描的結果都是一致的,如果接受到到RST,則說明端口是關閉的。如果無響應,則端口可能是開放或者filteted狀態。如果返回icmp unreachable error(type 3, code 0, 1, 2, 3, 9, 10, 13),則說明端口一定是filtered的。
TCP ACK scan
這種掃描只設置tcp ack標誌位。這種掃描一般來探測防火牆是否過濾被掃描的端口。如果掃描的端口未被防火牆保護,那麼無論是開放或者是關閉,都會返回RST。nmap將該端口標記爲未被封鎖的(unfiltered),但是不能確定該端口是開放或者關閉狀態。如果無響應,或者返貨icmp error,則該端口一定被防火牆封鎖了
TCP Window scan
tcp窗口掃描,如果接收到RST,則說明端口封鎖了。在某些操作系統,開放的端口會返回一個正數的tcp窗口值,如果端口關閉,則返回tcp窗口值爲0或者負數。但是這種掃描不是很靠譜
TCP Maimon scan
這種掃描爲發送同時設置FIN/ACK的數據包。如果返回RST,則說明端口是開放的,如果無響應,則是關閉狀態的。
IP protocol scan
這種是專門掃描ip協議的。掃描類似於udp掃描,如果IP協議號不存在,返回 icmp錯誤。具體沒用過,不太好寫
UDP ICMP port unreachable scanning
如果udp端口開放,則無響應。如果udp端口關閉,則會返回icmp unreachable error錯誤。這種掃描需要root權限,因爲需要構建raw socket。
UDP connect掃描
這種直接一個一個建立udp連接,如果能建立,則說明端口開放,不能建立則端口關閉。
- 使用Nmap探測目標開放端口
用Nmap掃描特定的IP地址 //nmap
用-v對結果進行詳細輸出 //nmap -v
自行設置端口範圍進行掃描 //nmap -p 1-998
指定端口號進行掃描 //nmap -p 80,3000,22
對目標進行Ping掃描 //nmap -sP
幫助文檔 //nmap -help
掃描多臺主機 :
在Nmap命令後假設多個IP地址或主機名來掃描多臺主機
nmap ip ip ip
掃描整個子網:
使用*通配符來掃描整個子網或某個範圍的IP地址
nmap 192.168.0.*
從一個文件中掃描主機列表:
創建一個名爲“nmaptest.txt“的文本文件,並定義所以你想要掃描的服務器IP地址或主機名
nmap -iL nmaptest.txt
掃描一個IP地址範圍:
在nmap執行掃描時指定IP範圍
nmap 192.168.0.101-110
協議探測
Nmap -sO ip