介紹
Nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。軟件名字Nmap是Network MApper的簡稱。
一般情況下,Nmap用于列舉網絡主機清單、管理服務升級調度、監控主機或服務運行狀況。Nmap可以檢測目標機是否在線、端口開放情況、偵測運行的服務類型及版本信息、偵測操作系統與設備類型等信息。
- Nmap的優點:
- 靈活。支持數十種不同的掃描方式,支持多種目標對象的掃描
- 強大。Nmap可以用于掃描互聯網上大規模的計算機
- 可移植。支持主流操作系統:windows/linux/Unix/macOS等等;源碼開放,方便移植
- 簡單。提供默認的操作能覆蓋大部分功能,基本端口掃描nmap targetip,全面的掃描nmap –A targetip
- 自由。Nmap作為開源軟件,在GPL License的范圍內可以自由的使用
- 文檔豐富。Nmap官網提供了詳細的文檔描述。Nmap作者及其他安全專家編寫了多部Nmap參考書籍
- 社區支持。Nmap背后有強大的社區團隊支持
- Nmap包含四項基本功能:
- 主機發現 (Host Discovery)
- 端口掃描 (Port Scanning)
- 版本偵測 (Version Detection)
- 操作系統偵測 (Operating System Detection)
首先需要進行主機發現,隨后確定端口狀態,然后確定端口上運行的具體應用程序和版本信息,然后可以進行操作系統的偵測。而在這四項功能的基礎上,nmap還提供防火墻和 IDS 的規避技巧,可以綜合運用到四個基本功能的各個階段。另外nmap還提供強大的NSE(Nmap Scripting Language)腳本引擎功能,腳本可以對基本功能進行補充和擴展。
語法
Usage: nmap [Scan Type(s)] [Options] {target specification}
選項
-iflist : 查看本地主機的接口信息和路由信息 -A :選項用于使用進攻性方式掃描 -T4: 指定掃描過程使用的時序,總有6個級別(0-5),級別越高,掃描速度越快,但也容 易被防火墻或IDS檢測并屏蔽掉,在網絡通訊狀況較好的情況下推薦使用T4。 paranoid(0)、sneaky(1)模式用于IDS躲避 polite(2)模式降低了掃描速度及使用更少的帶寬和目標主機資源 normal(3)為默認模式因此-T3實際上未做任何優化 aggressive(4)模式假設用戶具有合適及可靠的網絡從而加速掃描 insane(5)模式假設用戶具有特別快的網絡或者愿意為獲得速度而犧牲準確性 -oX test.xml: 將掃描結果生成 test.xml 文件 -oG test.txt: 將掃描結果生成 test.txt 文件 -sn : 只進行主機發現,不進行端口掃描 -O : 指定Nmap進行系統版本掃描 -sV: 指定讓Nmap進行服務版本掃描 -p <port ranges>: 掃描指定的端口 -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式 來對目標主機進行掃描 -sU: 指定使用UDP掃描方式確定目標主機的UDP端口狀況 -script <script name> : 指定掃描腳本 -Pn : 不進行ping掃描 -iL 1.txt : 批量掃描1.txt中的目標地址 -sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現 -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的情況 -sO: 使用IP protocol 掃描確定目標機支持的協議類型 -PO : 使用IP協議包探測對方主機是否開啟 -PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機 -PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協助探測對方的TCP端口狀態 -e eth0:指定使用eth0網卡進行探測 -f : --mtu <val>: 指定使用分片、指定數據包的 MTU. -b <FTP relay host>: 使用FTP bounce scan掃描方式 -g: 指定發送的端口號 -r: 不進行端口隨機打亂的操作(如無該參數,nmap會將要掃描的端口以隨機順序方式掃描,以讓nmap的掃描不易被對方防火墻檢測到) -v 表示顯示冗余信息,在掃描過程中顯示掃描的細節,從而讓用戶了解當前的掃描狀態 -n : 表示不進行DNS解析; -D <decoy1,decoy2[,ME],...>: 用一組 IP 地址掩蓋真實地址,其中 ME 填入自己的 IP 地址 -R :表示總是進行DNS解析。 -F : 快速模式,僅掃描TOP 100的端口 -S <IP_Address>: 偽裝成其他 IP 地址 --ttl <val>: 設置 time-to-live 時間 --badsum: 使用錯誤的 checksum 來發送數據包(正常情況下,該類數據包被拋棄,如果 收到回復,說明回復來自防火墻或 IDS/IPS) --dns-servers : 指定DNS服務器 --system-dns : 指定使用系統的DNS服務器 --traceroute : 追蹤每個路由節點 --scanflags <flags>: 定制TCP包的flags --top-ports <number> :掃描開放概率最高的number個端口 --port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports類似,這里以概率作為參數 --version-trace: 顯示出詳細的版本偵測過程信息 --osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口) --osscan-guess: 大膽猜測對方的主機的系統類型。由此準確性會下降不少,但會盡可能多為用戶提供潛在的操作系統 --data-length <num>: 填充隨機數據讓數據包長度達到 Num --ip-options <options>: 使用指定的 IP 選項來發送數據包 --spoof-mac <mac address/prefix/vendor name> : 偽裝 MAC 地址 --version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越準確,但是運行時間會比較長。 --version-light: 指定使用輕量偵測方式 (intensity 2) --version-all: 嘗試使用所有的probes進行偵測 (intensity 9) --version-trace: 顯示出詳細的版本偵測過程信息
實例
(一)探索目標主機是否在線
主機發現的原理與Ping命令類似,發送探測包到目標主機,如果收到回復,那么說明目標主機是開啟的。Nmap支持十多種不同的主機探測方式,用戶可以在不同的條件下靈活選用不同的方式來探測目標機。主機發現常用參數如下。
-sn: Ping Scan 只進行主機發現,不進行端口掃描。 -PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機。 -PS/PA/PU/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現。 -sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。 -Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。 -PO[protocollist]: 使用IP協議包探測對方主機是否開啟。 -n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。 --dns-servers <serv1[,serv2],...>: 指定DNS服務器。 --system-dns: 指定使用系統的DNS服務器 --traceroute: 追蹤每個路由節點
當探測公網 ip時
nmap -sn
Nmap會發送四種不同類型的數據包來探測目標主機是否在線。
ICMP echo request a TCP SYN packet to port 443(https) a TCP ACK packet to port 80(http) an ICMP timestamp request
例: nmap -sn 114.114.114.114

依次發送四個報文探測目標機是否開啟。只要收到其中一個包的回復,那就證明目標機開啟。使用四種不同類型的數據包可以避免因防火墻或丟包造成的判斷錯誤。通常主機發現并不單獨使用,而只是作為端口掃描、版本偵測、OS偵測先行步驟。而在某些特殊應用(例如確定大型局域網內活動主機的數量),可能會單獨專門使用主機發現功能來完成。
nmap -PE/-PP/-PM
-PE 的ICMP Echo掃描簡單來說是通過向目標發送ICMP Echo數據包來探測目標主機是否存活,但由于許多主機的防火墻會禁止這些報文,所以僅僅ICMP掃描通常是不夠的。
nmap -PE 114.114.114.114

-PP 的ICMP time stamp時間戳掃描在大多數防火墻配置不當時可能會得到回復,可以以此方式來判斷目標主機是否存活。倘若目標主機在線,該命令還會探測其開放的端口以及運行的服務!
nmap -PP 114.114.114.114

-PM 的ICMP address maskPing地址掩碼掃描會試圖用備選的ICMP等級Ping指定主機,通常有不錯的穿透防火墻的效果
nmap -PM 114.114.114.114.

- -PS的TCP SYN掃描
當探測內網ip時
nmap -sn
使用 nmap -sn 內網ip 這個命令會發送arp請求包探測目標ip是否在線,如果有arp回復包,則說明在線。此命令可以探測目標主機是否在線,如果在線,還可以得到其MAC地址。但是不會探測其開放的端口號。
nmap -PE/-PP/-PM
使用 nmap -PE/PP/PM 內網ip 探測主機的開啟情況,使用的是ARP請求報文,如果有ARP回復報文,說明主機在線。-PP/PE/PM命令探測到主機在線后,還會探測主機的端口的開啟狀態以及運行的服務。
探測該主機所在網段內所有主機的在線情況,使用的是 nmap -sn 網段/子網掩碼 。
例:nmap -sn 192.168.1.0/24 或 nmap -sn 192.168.1.100-200

二:端口掃描及其原理
端口掃描是Nmap最基本最核心的功能,用于確定目標主機的TCP/UDP端口的開放情況。
默認情況下,Nmap會掃描1000個最有可能開放的TCP端口
Nmap通過探測將端口劃分為6個狀態:
- open:端口是開放的。
- closed:端口是關閉的。
- filtered:端口被防火墻IDS/IPS屏蔽,無法確定其狀態。
- unfiltered:端口沒有被屏蔽,但是否開放需要進一步確定。
- open|filtered:端口是開放的或被屏蔽。
- closed|filtered :端口是關閉的或被屏蔽
TCP SYN 掃描(-sS)
這是Nmap默認的掃描方式,通常被稱作半開放掃描。該方式發送SYN到目標端口,如果收到SYN/ACK回復,那么可以判斷端口是開放的;如果收到RST包,說明該端口是關閉的。如果沒有收到回復,那么可以判斷該端口被屏蔽了。因為該方式僅發送SYN包對目標主機的特定端口,但不建立完整的TCP連接,所以相對比較隱蔽,而且效率比較高,適用范圍廣。
TCP connent 掃描(-sT)
TCP connect方式使用系統網絡API connect向目標主機的端口發起連接,如果無法連接,說明該端口關閉。該方式掃描速度比較慢,而且由于建立完整的TCP連接會在目標主機上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮使用的方式
TCP ACK 掃描(-sA)
向目標主機的端口發送ACK包
- 如果收到RST包,說明該端口沒有被防火墻屏蔽;
- 沒有收到RST包,說明被屏蔽。
該方式只能用于確定防火墻是否屏蔽某個端口,可以輔助TCP SYN的方式來判斷目標主機防火墻的狀況
TCP FIN/Xmas/NULL 掃描(-sN/sF/sX)
這三種掃描方式被稱為秘密掃描,因為相對比較隱蔽。
- FIN掃描向目標主機的端口發送的TCP FIN 包或Xmas tree包或NULL包,如果收到對方的RST回復包,那么說明該端口是關閉的;沒有收到RST包說明該端口可能是開放的或者被屏蔽了。
- 其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;
- NULL包是指所有的flags都為0的TCP包。
UDP掃描(-sU)
UDP掃描用于判斷UDP端口的情況,向目標主機的UDP端口發送探測包
- 如果收到回復ICMP port unreachable就說明該端口是關閉的;
- 如果沒有收到回復,那說明該UDP端口可能是開放的或者屏蔽的。
因此,通過反向排除法的方式來判斷哪些UDP端口是可能處于開放狀態的。
其他方式(-sY/-sZ)
除了以上幾種常用的方式外,Nmap還支持多種其他的探測方式。例如使用SCTP INIT/Cookie-ECHO方式是來探測SCTP的端口開放情況;使用IP protocol方式來探測目標主機支持的協議類型(tcp/udp/icmp/sctp等等);使用idle scan方式借助僵尸主機來掃描目標主機,以達到隱蔽自己的目的;或者使用FTP bounce scan,借助FTP允許的代理服務掃描其他的主機,同樣達到隱蔽自己的目的
三:端口掃描用法
掃描方式選項:
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描。 -sU: 指定使用UDP掃描方式確定目標主機的UDP端口狀況。 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協助探測對方的TCP端口狀態。 --scanflags <flags>: 定制TCP包的flags。 -sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標主機(前提需要找到合適的zombie host) -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的情況。 -sO: 用IP protocol 掃描確定目標機支持的協議類型。 -b <FTP relay host>: 使用FTP bounce scan掃描方式
端口參數與掃描順序
-p <port ranges>: 掃描指定的端口
實例:
- -p 22;
- -p1-65535;
- -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP協議、U代表UDP協議、S代表SCTP協議)
- -F: Fast mode – 快速模式,僅掃描TOP 100的端口
- -r: 不進行端口隨機打亂的操作(如無該參數,nmap會將要掃描的端口以隨機順序方式掃描,以讓nmap的掃描不易被對方防火墻檢測到)。
- --top-ports <number>:掃描開放概率最高的number個端口
- --port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports類似,這里以概率作為參數,讓概率大于--port-ratio的端口才被掃描。顯然參數必須在在0到1之間,具體范圍概率情況可以查看nmap-services文件
簡單掃描(nmap ip)
nmap 202.207.236.2

例如: nmap 202.207.236.2 這個命令會按照 nmap-services 文件中指定的端口進行掃描,然后列出目標主機開放的端口號,以及端口號上運行的服務。在一次簡單掃描中,Nmap會以默認TCP SYN掃描方式進行,僅判斷目標端口是否開放,若開放,則列出端口對應的服務名稱。
探測端口開放過程: 確定主機在線之后,nmap會按照nmap-services文件中的端口號發送TCP SYN報文給主機相應的端口,如果主機回復一個包含TCP SYN、ACK的報文,則說明該端口號開放。nmap會再回復一個TCP RST清除連接復位。下面的截圖是nmap是和目標主機的80號端口的探測過程,由此可見,目標主機的22號端口屬于開放狀態!
全面掃描(nmap -A ip)
nmap -A 192.168.1.250


例如: nmap -A 192.168.1.250 這個命令不僅列出目標主機開放的端口號,對應的服務,還較為詳細的列出了服務的版本,其支持的命令,到達目標主機的每一跳路由等信息。在進行完全掃描時,掃描機與目標主機之間存在大量的數據流量交互,掃描時長隨之增加。完全掃描不僅僅是TCP協議上的通信交互,還有例如ICMP、HTTP、NBSS、TDS、POP等等協議的交互,這些協議的交互是因為在完全掃描開始時首先對目標主機的開放端口進行了確認,之后再根據不同對應的不同服務進行服務版本信息探測、賬戶信息等信息的探測!
探測主機是否在線:全面掃描時探測主機是否在線和簡單掃描完全一致
探測端口是否打開:全面掃描時探測主機端口開放和簡單掃描完全一致
探測端口服務具體版本:每個協議都不一樣,總之就是確定端口開放了之后,和該端口進行更多的數據交互,以獲得更多的信息。在下一節的版本探測中有更深入的研究
nmap -T4 -A -v 192.168.1.250


探測指定端口的開放狀態
在默認情況下,Nmap對端口的掃描方式是從小到大進行的,或者是參照 nmap-services 中文件列出的端口進行掃描。-p選項可以指定一個端口號或者一個端口范圍。若既想掃描TCP端口又想掃描UDP端口,則需要在端口號前加上T:或U:來分別代表TCP和UDP協議。注意,要既掃描TCP又掃描UDP,則需要指定-sU及至少一個TCP掃描類型(-sS(半連接掃描),-sT(全連接掃描)等),如果沒有給定協議限定符,端口號會被加到所有協議列表。
例: nmap -p 80-445 192.168.1.250 掃描目標主機的80-445端口的開放情況

從上面的圖中可以看到,若只簡單的指定一個端口范圍,Nmap會默認以TCP SYN方式掃描目標端口,若既想掃描目標TCP端口又想掃描UDP的端口,則需要指定掃描方式以及端口。
例: nmap -sS -sU -p T:80,U:445 192.168.1.250 以半連接的TCP SYN方式掃描目標主機的80端口,以UDP方式掃描目標主機的445端口

探測N個最有可能開放的端口
例:nmap -sS -sU --top-ports 100 192.168.1.250

參數:
- -sS表示使用TCP SYN方式掃描TCP端口;
- -sU表示掃描UDP端口;
- --top-ports 100表示掃描最有可能開放的100個端口(TCP和UDP分別100個端口)。
四:版本偵測
版本偵測,用于確定目標主機開放端口上運行的具體的應用程序及版本信息。
Nmap提供的版本偵測具有如下的優點:
- 高速。并行地進行套接字操作,實現一組高效的探測匹配定義語法。
- 盡可能地確定應用名字與版本名字。
- 支持TCP/UDP協議,支持文本格式與二進制格式。
- 支持多種平臺服務的偵測,包括Linux/Windows/Mac OS/FreeBSD等系統。
如果檢測到SSL,會調用openSSL繼續偵測運行在SSL上的具體協議(如HTTPS/POP3S/IMAPS)。
如果檢測到SunRPC服務,那么會調用brute-force RPC grinder進一步確定RPC程序編號、名字、版本號。
支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
通用平臺枚舉功能(CPE)
廣泛的應用程序數據庫(nmap-services-probes)。目前Nmap可以識別幾千種服務的簽名,包含了180多種不同的協議。
版本偵測原理
版本偵測主要分為以下幾個步驟:
- 首先檢查open與open|filtered狀態的端口是否在排除端口列表內。如果在排除列表,將該端口剔除。
- 如果是TCP端口,嘗試建立TCP連接。嘗試等待片刻(通常6秒或更多,具體時間可以查詢文件nmap-services-probes中Probe TCP NULL q||對應的totalwaitms)。通常在等待時間內,會接收到目標機發送的“WelcomeBanner”信息。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。查找對應應用程序的名字與版本信息。
- 如果通過“Welcome Banner”無法確定應用程序版本,那么nmap再嘗試發送其他的探測包(即從nmap-services-probes中挑選合適的probe),將probe得到回復包與數據庫中的簽名進行對比。如果反復探測都無法得出具體應用,那么打印出應用返回報文,讓用戶自行進一步判定。
- 如果是UDP端口,那么直接使用nmap-services-probes中探測包進行探測匹配。根據結果對比分析出UDP應用服務類型。
- 如果探測到應用程序是SSL,那么調用openSSL進一步的偵查運行在SSL之上的具體的應用類型。
- 如果探測到應用程序是SunRPC,那么調用brute-force RPC grinder進一步探測具體服務。
版本偵測用法
比如目標主機把SSH的22號端口改成了2222端口,那么如果使用普通掃描只會發現2222端口是開啟的,并不能知道2222號端口上運行的程序,通過加參數 -sV 進行版本掃描,可以探測到目標主機上2222端口運行的是SSH服務
- -sV: 指定讓Nmap進行版本偵測
- --version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越準確,但是運行時間會比較長。
- --version-light: 指定使用輕量偵測方式 (intensity 2)
- --version-all: 嘗試使用所有的probes進行偵測 (intensity 9)
- --version-trace: 顯示出詳細的版本偵測過程信息
例: nmap -sV 192.168.1.250

五:OS偵測
操作系統偵測用于檢測目標主機運行的操作系統類型及設備類型等信息。
Nmap擁有豐富的系統數據庫nmap-os-db,目前可以識別2600多種操作系統與設備類型。
OS偵測原理
Nmap使用TCP/IP協議棧指紋來識別不同的操作系統和設備。在RFC規范中,有些地方對TCP/IP的實現并沒有強制規定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據這些細節上的差異來判斷操作系統的類型的。
具體實現方式如下:
- Nmap內部包含了2600多已知系統的指紋特征(在文件nmap-os-db文件中)。將此指紋數據庫作為進行指紋對比的樣本庫。
- 分別挑選一個open和closed的端口,向其發送經過精心設計的TCP/UDP/ICMP數據包,根據返回的數據包生成一份系統指紋。
- 將探測生成的指紋與nmap-os-db中指紋進行對比,查找匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。
OS偵測用法
- -O: 指定Nmap進行OS偵測。
- --osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口)。
- --osscan-guess: 大膽猜測對方的主機的系統類型。由此準確性會下降不少,但會盡可能多為用戶提供潛在的操作系統
例: nmap -O 10.96.10.246

六:Nmap高級用法
防火墻/IDS規避
防火墻與IDS規避為用于繞開防火墻與IDS的檢測與屏蔽,以便能夠更加詳細地發現目標主機的狀況。nmap提供了多種規避技巧通常可以從兩個方面考慮規避方式:數據包的變換(Packet Change)和時序變換(Timing Change)
分片
將可疑的探測包進行分片處理(例如將TCP包拆分成多個IP包發送過去),某些簡單的防火墻為了加快處理速度可能不會進行重組檢查,以此避開其檢查
IP誘騙(IP decoys)
在進行掃描時,將真實IP地址在和其他主機的IP地址混合使用(其他主機需要在線,否則目標主機將回復大量數據包到不存在的數主機,從而實質構成了DOS攻擊),以此讓目標主機的防火墻或IDS追蹤大量的不同IP地址的數據包,降低其追查到自身的概率。但是,某些高級的IDS系統通過統計分析仍然可以追蹤出掃描者真實的IP地址
IP偽裝
IP偽裝就是將自己發送的數據包中的IP地址偽裝成其他主機的地址,從而目標機認為是其他主機與之通信。需要注意的是,如果希望接收到目標主機的回復包,那么偽裝的IP需要位于統一局域網內。另外,如果既希望隱蔽自己的IP地址,又希望收到目標主機的回復包,那么可以嘗試使用idle scan 或匿名代理等網絡技術
指定源端口
某些目標主機只允許來自特定端口的數據包通過防火墻。例如,FTP服務器的配置為允許源端口為21號的TCP包通過防火墻與FTP服務器通信,但是源端口為其他的數據包被屏蔽。所以,在此類情況下,可以指定數據包的源端口
掃描延時
某些防火墻針對發送過于頻繁的數據包會進行嚴格的偵查,而且某些系統限制錯誤報文產生的頻率。所以,我們可以降低發包的頻率和發包延時以此降低目標主機的審查強度
其他技術
nmap還提供其他多種規避技巧,比如指定使用某個網絡接口來發送數據包、指定發送包的最小長度、指定發包的MTU、指定TTL、指定偽裝的MAC地址,使用錯誤檢查。
-f; --mtu <val>: 指定使用分片、指定數據包的 MTU. -D <decoy1,decoy2[,ME],...>: 用一組 IP 地址掩蓋真實地址,其中 ME 填入自己的 IP 地址。 -S <IP_Address>: 偽裝成其他 IP 地址 -e <iface>: 使用特定的網絡接口 -g/--source-port <portnum>: 使用指定源端口 --data-length <num>: 填充隨機數據讓數據包長度達到 Num。 --ip-options <options>: 使用指定的 IP 選項來發送數據包。 --ttl <val>: 設置 time-to-live 時間。 --spoof-mac <mac address/prefix/vendor name>: 偽裝 MAC 地址 --badsum: 使用錯誤的 checksum 來發送數據包(正常情況下,該類數據包被拋棄,如果收到回復,說明回復來自防火墻或 IDS/IPS)
實例:
nmap -F -Pn -D 192.168.1.100,192.168.1.110,ME -e eth0 -g 5555 192.168.1.250

- -F參數表示快速掃描100個端口
- -Pn不進行ping掃描
- -D表示使用ip誘騙方式掩飾真實ip,使用的是192.168.1.100和192.168.1.110
- ME表示自己真實的ip,這里是192.168.1.234
- -e 參數指定eth0網卡發送數據包
- -g參數指定發送的端口號
NSE腳本引擎
NSE腳本引擎(Nmap Scripting Engine)是nmap最強大,最靈活的功能之一,允許用戶自己編寫腳本來執行自動化的操作或者擴展nmap的功能。
nmap的腳本庫的路徑:/usr/share/nmap/scripts ,該目錄下的文件都是nse腳本
NSE使用Lua腳本語言,并且默認提供了豐富的腳本庫,目前已經包含了14個類別的350多個腳本。NSE的設計初衷主要考慮以下幾個方面
- 網絡發現(Network Discovery)
- 更加復雜的版本偵測(例如 skype 軟件)
- 漏洞偵測(Vulnerability Detection)
- 后門偵測(Backdoor Detection)
- 漏洞利用(Vulnerability Exploitation)