Nmap滲透測試使用方法
- 2019 年 10 月 30 日
- 筆記
Nmap滲透測試使用方法
Nmap官網 https://nmap.org/book/toc.html
https://nmap.org/man/zh/
目標選擇
掃描單個IP |
nmap 192.168.1.1 |
掃描主機 |
nmap www.linuxplus.loca |
掃描一系列IP |
nmap 192.168.1.1-20 |
掃描子網 |
nmap 192.168.1.0/24 |
從文本文件獲得掃描目標 |
nmap -iL list-of-ips.txt |
無ping掃描:常用於防火牆禁止ping的情況 |
nmap -P0 172.20.62.150 |
埠選擇
掃描單個埠 |
nmap -p 22 192.168.1.1 |
掃描一系列埠 |
nmap -p 1-100 192.168.1.1 |
掃描100個最常見的埠(快速) |
nmap -F 192.168.1.1 |
掃描所有65535埠 |
nmap -p- 192.168.1.1 |
作業系統和服務檢測
檢測作業系統和服務 |
nmap -A 192.168.1.1 |
標準服務檢測 |
nmap -sV 192.168.1.1 |
激進的服務檢測 |
nmap -sV –version-intensity 5 192.168.1.1 |
輕量Banner抓取檢測 |
nmap -sV –version-intensity 0 192.168.1.1 |
Nmap輸出格式
將默認輸出保存到文件 |
nmap -oN outputfile.txt 192.168.1.1 |
將結果保存為XML |
nmap -oX outputfile.xml 192.168.1.1 |
為方便grep來保存格式 |
nmap -oG outputfile.txt 192.168.1.1 |
保存所有格式 |
nmap -oA outputfile 192.168.1.1 |
用NSE腳本深入挖掘
使用默認安全腳本掃描 |
nmap -sV -sC 192.168.1.1 |
獲取腳本的幫助 |
nmap –script-help=ssl-heartbleed |
使用特定的NSE腳本進行掃描 |
nmap -sV -p 443 –script=ssl-heartbleed.nse 192.168.1.1 |
用一組腳本進行掃描 |
nmap -sV –script=smb* 192.168.1.1 |
HTTP服務資訊
從HTTP服務收集頁面標題 |
nmap –script=http-title 192.168.1.0/24 |
獲取Web服務的HTTP頭 |
nmap –script=http-headers 192.168.1.0/24 |
從已知路徑查找網路應用程式 |
nmap –script=http-enum 192.168.1.0/24 |
檢測SSL漏洞問題的主機
Heartbleed測試 |
nmap -sV -p 443 –script=ssl-heartbleed 192.168.1.0/24 |
設備掃描
獲取ip |
host 網址 host 域名 dig 域名 |
是否存活 |
ping ip nmap -sP –script discovery ip |
掃描在線主機 |
nmap -sP 202.193.64.* |
探測IP協議 |
nmap -PO ip |
獲取系統概況 |
nmap -A ip (暴力形式,很容易被發現) |
探測是否有【】防火牆 |
nmap -PN ip |
探測防火牆規則 |
nmap -sA ip |
TCP Window掃描 |
nmap -sw ip |
禁止反向域名解析 |
nmap -n -sL 172.24.171.1/24 |
FIN掃描 |
nmap -sF ip (FIN掃描方式用於識別埠是否關閉,收到RST回復說明該埠關閉,否則說明是open或filtered狀態) |
TCP掃描 |
nmap -sT -p 1-65535 -Pn ip nmap -sT -p 1-65535 -Pn 192.168.1.1-254 nmap -sL 192.168.1.0/24 |
ARP Ping掃描 |
nmap -PR 172.20.62.150 |
SYN掃描 |
nmap -sS -p- Pn ip |
TCP SYN Ping掃描 |
nmap -PS -v www.xxx.com |
UDP掃描 |
nmap -sU ip(UDP掃描費時,所以去掉-p-,默認掃描) |
Xmas掃描 |
nmap -sX -p1-65535 -Pn 192.168.1.1 |
Null掃描 |
nmap -sN -p 1-65535 -Pn ip |
掃描所選埠 – 忽略發現 |
nmap -Pn -F 192.168.1.1 |
繞開鑒權 |
nmap –script=auth 192.168.56.* |
探測作業系統 |
nmap -O ip |
探測軟體版本 |
nmap -V ip nmap -sTV -p- -Pn ip |
設置掃描強度強度在0~9之間,默認強度為7 |
nmap -sV –version-intensity 1 www.xxx.com |
輕量級掃描 |
nmap -sV –version-light www.xxx.com |
重量級掃描 |
nmap -sV –version-all www.xxx.com |
版本探測 |
nmap -sV -A www.xxx.com |
對指定的目標進行系統探測 |
Nmap -osscan-limit www.xxx.com |
推測系統識別 |
Nmap -osscan-guess/–fuzzy www.xxx.com |
獲取詳細版本資訊 |
nmap -sV –version-trace www.xxx.com |
全埠版本探測 |
nmap -allports -A www.xxx.com |
RPC掃描 |
Nmap -sR www.xxx.com |
調整並行掃描組的大小(默認為5-1024)最小的組 |
nmap –min-hostgroup 30 172.20.62.1/24 |
調整並行掃描組的大小(默認為5-1024)最大的組 |
nmap –max-hostgroup 50 172.20.62.1/24 |
探查區域網內更多服務 |
nmap -n –script=broadcast ip |
碎片化 |
nmap -f ip nmap –mtu 16 ip |
誘餌 |
nmap –D RND:10 TARGET nmap –D decoy1,decoy2,decoy3 target |
MAC地址欺騙 |
nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target nmap -spoof-mac Scisio ip -spoof-mac 可以根據廠商名字偽造不同mac地址 |
發送間隔時間控制 |
nmap -scan_delay 5ms ip |
發送錯誤校驗 |
nmap –badsum target |
Http方法 |
nmap -p80,443 –script http-methods scanme.nmap.org |
發現文件 |
nmap -sV –script http-enum ip |
判斷是否使用默認埠 |
nmap -sV -script=smtp-strangeport ip |
利用第三方資料庫 |
nmap –script external ip |
獲得PHP版本資訊 |
nmap -sV -script=http-php-version ip |
如果想對一個基於WordPress的web站點進行滲透測試,可以使用這個腳本 |
nmap -sV -script=http-php-version ip 1.http-wordpress-plugins,2.http-wordpress-enum,3.http-wordpress-brute |
用戶發現IP地址黑名單 |
nmap -sn ip –script dns-blacklist |
簡單暴力猜解 |
nmap –script=brute 192.168.56.* |
檢查是否存在漏洞 |
nmap –script=vuln 192.168.56.* |
路由跟蹤 |
nmap –traceroute -sP 172.20.62.150 |
SCTP INIT Ping掃描 |
nmap -PY -v 172.20.62.150 |
按VNC掃描
檢查vnc bypass |
nmap –script=realvnc-auth-bypass 192.168.137.4 |
檢查vnc認證方式 |
nmap –script=vnc-auth 192.168.137.4 |
獲取vnc資訊 |
nmap –script=vnc-info 192.168.137.4 |
按SMB掃描
smb破解 |
nmap –script=smb-brute.nse 192.168.137.4 |
smb字典破解 |
nmap –script=smb-brute.nse –script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4 |
smb已知幾個嚴重漏 |
nmap –script=smb-check-vulns.nse –script-args=unsafe=1 192.168.137.4 |
查看共享目錄 |
nmap -p 445 –script smb-ls –script-args ‘share=e$,path=,smbuser=test,smbpass=test’ 192.168.137.4 |
查詢主機一些敏感資訊 |
nmap -p 445 -n –script=smb-psexec –script-args= smbuser=test,smbpass=test 192.168.137.4 |
查看會話 |
nmap -n -p445 –script=smb-enum-sessions.nse –script-args=smbuser=test,smbpass=test 192.168.137.4 |
系統資訊 |
nmap -n -p445 –script=smb-os-discovery.nse –script-args=smbuser=test,smbpass=test 192.168.137.4 |
按Mssql掃描
猜解mssql用戶名和密碼 |
nmap -p1433 –script=ms-sql-brute –script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4 |
xp_cmdshell 執行命令 |
nmap -p 1433 –script ms-sql-xp-cmdshell –script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd=”net user” 192.168.137.4 |
dumphash值 |
nmap -p 1433 –script ms-sql-dump-hashes.nse –script-args mssql.username=sa,mssql.password=sa 192.168.137.4 |
按Mysql掃描
掃描root空口令 |
nmap -p3306 –script=mysql-empty-password.nse 192.168.137.4 |
列出所有mysql用戶 |
nmap -p3306 –script=mysql-users.nse –script-args=mysqluser=root 192.168.137.4 |
支援同一應用的所有腳本掃描 |
nmap –script=mysql-* 192.168.137.4 |
按Oracle掃描
oracle sid掃描 |
nmap –script=oracle-sid-brute -p 1521-1560 192.168.137.5 |
oracle弱口令破解 |
nmap –script oracle-brute -p 1521 –script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd 192.168.137.5 |
資訊收集掃描
ip資訊搜集 |
nmap –script ip-geolocation-* www.xxx.com |
獲得IP地址的資訊 |
nmap –script=asn-query,whois,ip-geolocation-maxmind 192.168.1.0/24 |
whois查詢 |
nmap –script whois www.xxx.com |
ip反查 |
nmap -sn –script hostmap-ip2hosts www.xxx.com |
資訊搜集 |
nmap –script dns-brute www.xxx.com |
列舉dns伺服器的主機名 |
nmap –script dns-brute –script-args dns-brute.domain=baidu.com |
檢索系統資訊 |
nmap -p 445 172.20.62.150 –script membase-http-info |
後台印表機服務漏洞 |
nmap –script smb-security-mode.nse -p 445 xxx.xxx.xxx.xxx |
smb漏洞掃描 |
nmap –script smb-check-vulns.nse -p 445 172.20.62.150//未驗證命令 |
通過snmp列舉windows服務 |
nmap -sU -p 161 –script=snmp-win32-services 172.20.62.137 |
通過snmp列舉windows賬戶 |
nmap -sU -p 161 –script=snmp-win32-users 172.20.62.137 |
http資訊搜集 對http版本進行探測 |
nmap -sV -p 80 www.xxx.com |
http頭資訊探測 |
nmap -p 80 –script=http-headers www.xxx.com |
http目錄結構探測 |
nmap -p 80 –script=http-sitemap-generator www.xxx.com |
枚舉ssl密鑰ssl-enum-ciphers SSL(Secure Sockets Layer,安全套接層 TLS(Transport Layer Security,傳輸層安全) |
nmap -p 443 –script=ssl-enum-ciphers www.baidu.com |
伺服器支援的密鑰演算法SSH服務密鑰資訊探測 |
nmap -p 22 –script ssh-hostkey –script-args ssh_hostkey=full 127.0.0.1 |
其他腳本
發現網關 |
Nmap –script=broadcast-netbios-master-browser 192.168.137.4 |
telnet破解 |
nmap -sV –script=telnet-brute 192.168.137.4 |
dos攻擊 |
nmap –script http-slowloris –max-parallelism 400 192.168.137.4 |
破解rsync |
nmap -p 873 –script rsync-brute –script-args ‘rsync-brute.module=www’ 192.168.137.4 |
informix資料庫破解 |
nmap –script informix-brute -p 9088 192.168.137.4 |
pgsql破解 |
nmap -p 5432 –script pgsql-brute 192.168.137.4 |
snmp破解 |
nmap -sU –script snmp-brute 192.168.137.4 |
檢查http方法 |
nmap –script=http-methods.nse 192.168.137.4 |
查看本地路由與介面 |
nmap -iflist |
指定網口與ip地址 |
nmap -e eth0 ip |
產生隨機ip地址 |
nmap -iR 1200000 -sL -n | grep “not scanned” | awk ‘{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp |
掃描思科路由器 |
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16 思科路由器會在上述埠中運行了常見的服務。列舉出上述埠開放的主機,可以定位到路由器設備可能的IP地址及埠狀態。 |
掃描路由器TFTP |
nmap –sU –p69 –nvv target 大多數的路由器都支援TFTP協議(簡單文件傳輸協議),該協議常用於備份和恢復路由器的配置文件,運行在UDP 69埠上。使用上述命令可以探測出路由器是否開放TFTP。 |
掃描路由器作業系統 |
nmap -O -F -n 192.168.1.1 與通用PC掃描方式類似,使用-O選項掃描路由器的作業系統。-F用於快速掃描最可能開放的100個埠,並根據埠掃描結果進一步做OS的指紋分析。 |
顯示網路上共有多少台 Linux 及 Win 設備 |
nmap -F -O 192.168.1.1-255 | grep “Running: ” > /tmp/os; echo “$(cat /tmp/os | grep Linux | wc -l) Linux device(s)”; echo “$(cat /tmp/os | grep Windows | wc -l) Window(s) devices” |
技巧
發送乙太網數據包 |
nmap –send-eth 172.20.62.150 |
網路層發送 |
nmap –send-ip 172.20.62.150 |
假定擁有所有權 |
nmap –privileged 172.20.62.150 |
設置調試級別 |
nmap -d 1 172.20.62.150 |
級別範圍1-9,9為最高級,產生的數據最多 跟蹤發送接受的報文:(-p指定埠範圍,減少產生的報文): |
nmap –packet-trace -p 20-30 172.20.62.150 |
列舉介面和路由:(多用於調試路由) |
nmap -iflist 172.20.62.150 |
指定網路介面:指定從en0發送數據: |
nmap -e en0 172.20.62.150 |
探測防火牆 |
nmap –script=firewalk –traceroute 172.20.62.150 |
埠狀態
開放 |
* Open |
關閉 |
* Closed |
可能被過濾,可能網路阻塞 |
Filtered |
可以訪問,但未知埠處於開放還是關閉狀態 |
Unfiltered |
能確定埠事開放被過濾 |
Open|Filtered |
不能確定埠事關閉還說被過濾 |
Closed|Filtered: |
Nmap文字描述
1、目標說明
-iL <inputfilename> (從列表中輸入)
從 <inputfilename>中讀取目標說明。在命令行輸入 一堆主機名顯得很笨拙,然而經常需要這樣。 例如,您的DHCP伺服器可能導出10,000個當前租約的列表,而您希望對它們進行 掃描。如果您不是使用未授權的靜態IP來定位主機,或許您想要掃描所有IP地址。 只要生成要掃描的主機的列表,用-iL 把文件名作為選項傳給Nmap。列表中的項可以是Nmap在 命令行上接受的任何格式(IP地址,主機名,CIDR,IPv6,或者八位位元組範圍)。 每一項必須以一個或多個空格,製表符或換行符分開。 如果您希望Nmap從標準輸入而不是實際文件讀取列表, 您可以用一個連字元(-)作為文件名。
-iR <hostnum> (隨機選擇目標)
對於互聯網範圍內的調查和研究, 您也許想隨機地選擇目標。 <hostnum> 選項告訴 Nmap生成多少個IP。不合需要的IP如特定的私有,組播或者未分配的地址自動 略過。選項 0 意味著永無休止的掃描。記住,一些網管對於未授權的掃描可能會很感冒並加以抱怨。 使用該選項的後果自負! 如果在某個雨天的下午,您覺得實在無聊, 試試這個命令nmap -sS -PS80 -iR 0 -p 80隨機地找一些網站瀏覽。
–exclude <host1[,host2][,host3],…> (排除主機/網路)
如果在您指定的掃描範圍有一些主機或網路不是您的目標, 那就用該選項加上以逗號分隔的列表排除它們。該列表用正常的Nmap語法, 因此它可以包括主機名,CIDR,八位位元組範圍等等。 當您希望掃描的網路包含執行關鍵任務的伺服器,已知的對埠掃描反應強烈的 系統或者被其它人看管的子網時,這也許有用。
–excludefile <excludefile> (排除文件中的列表)
這和–exclude 選項的功能一樣,只是所排除的目標是用以 換行符,空格,或者製表符分隔的 <excludefile>提供的,而不是在命令行上輸入的。
- 主機發現
-sL (列表掃描)
列表掃描是主機發現的退化形式,它僅僅列出指定網路上的每台主機, 不發送任何報文到目標主機。默認情況下,Nmap仍然對主機進行反向域名解析以獲取 它們的名字。簡單的主機名能給出的有用資訊常常令人驚訝。例如, fw.chi.playboy.com是花花公子芝加哥辦公室的 防火牆。Nmap最後還會報告IP地址的總數。列表掃描可以很好的確保您擁有正確的目標IP。 如果主機的域名出乎您的意料,那麼就值得進一步檢查以防錯誤地掃描其它組織的網路。
既然只是列印目標主機的列表,像其它一些高級功能如埠掃描,作業系統探測或者Ping掃描 的選項就沒有了。如果您希望關閉ping掃描而仍然執行這樣的高級功能,請繼續閱讀關於 -P0選項的介紹。
-sP (Ping掃描)
該選項告訴Nmap僅僅 進行ping掃描 (主機發現),然後列印出對掃描做出響應的那些主機。 沒有進一步的測試 (如埠掃描或者作業系統探測)。 這比列表掃描更積極,常常用於 和列表掃描相同的目的。它可以得到些許目標網路的資訊而不被特別注意到。 對於攻擊者來說,了解多少主機正在運行比列表掃描提供的一列IP和主機名往往更有價值。
系統管理員往往也很喜歡這個選項。 它可以很方便地得出 網路上有多少機器正在運行或者監視伺服器是否正常運行。常常有人稱它為 地毯式ping,它比ping廣播地址更可靠,因為許多主機對廣播請求不響應。
-sP選項在默認情況下, 發送一個ICMP回聲請求和一個TCP報文到80埠。如果非特權用戶執行,就發送一個SYN報文 (用connect()系統調用)到目標機的80埠。 當特權用戶掃描區域網上的目標機時,會發送ARP請求(-PR), ,除非使用了–send-ip選項。 -sP選項可以和除-P0)之外的任何發現探測類型-P* 選項結合使用以達到更大的靈活性。 一旦使用了任何探測類型和埠選項,默認的探測(ACK和回應請求)就被覆蓋了。 當防守嚴密的防火牆位於運行Nmap的源主機和目標網路之間時, 推薦使用那些高級選項。否則,當防火牆捕獲並丟棄探測包或者響應包時,一些主機就不能被探測到。
-P0 (無ping)
該選項完全跳過Nmap發現階段。 通常Nmap在進行高強度的掃描時用它確定正在運行的機器。 默認情況下,Nmap只對正在運行的主機進行高強度的探測如 埠掃描,版本探測,或者作業系統探測。用-P0禁止 主機發現會使Nmap對每一個指定的目標IP地址 進行所要求的掃描。所以如果在命令行指定一個B類目標地址空間(/16), 所有 65,536 個IP地址都會被掃描。 -P0的第二個字元是數字0而不是字母O。 和列表掃描一樣,跳過正常的主機發現,但不是列印一個目標列表, 而是繼續執行所要求的功能,就好像每個IP都是活動的。
-PS [portlist] (TCP SYN Ping)
該選項發送一個設置了SYN標誌位的空TCP報文。 默認目的埠為80 (可以通過改變nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值進行配置,但不同的埠也可以作為選項指定。 甚至可以指定一個以逗號分隔的埠列表(如 -PS22,23,25,80,113,1050,35000), 在這種情況下,每個埠會被並發地掃描。
SYN標誌位告訴對方您正試圖建立一個連接。 通常目標埠是關閉的,一個RST (複位) 包會發回來。 如果碰巧埠是開放的,目標會進行TCP三步握手的第二步,回應 一個SYN/ACK TCP報文。然後運行Nmap的機器則會扼殺這個正在建立的連接, 發送一個RST而非ACK報文,否則,一個完全的連接將會建立。 RST報文是運行Nmap的機器而不是Nmap本身響應的,因為它對收到 的SYN/ACK感到很意外。
Nmap並不關心埠開放還是關閉。 無論RST還是SYN/ACK響應都告訴Nmap該主機正在運行。
在UNIX機器上,通常只有特權用戶 root 能否發送和接收 原始的TCP報文。因此作為一個變通的方法,對於非特權用戶, Nmap會為每個目標主機進行系統調用connect(),它也會發送一個SYN 報文來嘗試建立連接。如果connect()迅速返回成功或者一個ECONNREFUSED 失敗,下面的TCP堆棧一定已經收到了一個SYN/ACK或者RST,該主機將被 標誌位為在運行。 如果連接超時了,該主機就標誌位為down掉了。這種方法也用於IPv6 連接,因為Nmap目前還不支援原始的IPv6報文。
-PA [portlist] (TCP ACK Ping)
TCP ACK ping和剛才討論的SYN ping相當類似。 也許您已經猜到了,區別就是設置TCP的ACK標誌位而不是SYN標誌位。 ACK報文表示確認一個建立連接的嘗試,但該連接尚未完全建立。 所以遠程主機應該總是回應一個RST報文, 因為它們並沒有發出過連接請求到運行Nmap的機器,如果它們正在運行的話。
-PA選項使用和SYN探測相同的默認埠(80),也可以 用相同的格式指定目標埠列表。如果非特權用戶嘗試該功能, 或者指定的是IPv6目標,前面說過的connect()方法將被使用。 這個方法並不完美,因為它實際上發送的是SYN報文,而不是ACK報文。
提供SYN和ACK兩種ping探測的原因是使通過防火牆的機會儘可能大。 許多管理員會配置他們的路由器或者其它簡單的防火牆來封鎖SYN報文,除非 連接目標是那些公開的伺服器像公司網站或者郵件伺服器。 這可以阻止其它進入組織的連接,同時也允許用戶訪問互聯網。 這種無狀態的方法幾乎不佔用防火牆/路由器的資源,因而被硬體和軟體過濾器 廣泛支援。Linux Netfilter/iptables 防火牆軟體提供方便的 –syn選項來實現這種無狀態的方法。 當這樣的無狀態防火牆規則存在時,發送到關閉目標埠的SYN ping探測 (-PS) 很可能被封鎖。這種情況下,ACK探測格外有閃光點,因為它正好利用了 這樣的規則。
另外一種常用的防火牆用有狀態的規則來封鎖非預期的報文。 這一特性已開始只存在於高端防火牆,但是這些年類它越來越普遍了。 Linux Netfilter/iptables 通過 –state選項支援這一特性,它根據連接狀態把報文 進行分類。SYN探測更有可能用於這樣的系統,由於沒頭沒腦的ACK報文 通常會被識別成偽造的而丟棄。解決這個兩難的方法是通過即指定 -PS又指定-PA來即發送SYN又發送ACK。
-PU [portlist] (UDP Ping)
還有一個主機發現的選項是UDP ping,它發送一個空的(除非指定了–data-length UDP報文到給定的埠。埠列表的格式和前面討論過的-PS和-PA選項還是一樣。 如果不指定埠,默認是31338。該默認值可以通過在編譯時改變nmap.h文件中的 DEFAULT-UDP-PROBE-PORT值進行配置。默認使用這樣一個奇怪的埠是因為對開放埠 進行這種掃描一般都不受歡迎。
如果目標機器的埠是關閉的,UDP探測應該馬上得到一個ICMP埠無法到達的回應報文。 這對於Nmap意味著該機器正在運行。 許多其它類型的ICMP錯誤,像主機/網路無法到達或者TTL超時則表示down掉的或者不可到達的主機。 沒有回應也被這樣解釋。如果到達一個開放的埠,大部分服務僅僅忽略這個 空報文而不做任何回應。這就是為什麼默認探測埠是31338這樣一個 極不可能被使用的埠。少數服務如chargen會響應一個空的UDP報文, 從而向Nmap表明該機器正在運行。
該掃描類型的主要優勢是它可以穿越只過濾TCP的防火牆和過濾器。 例如。我曾經有過一個Linksys BEFW11S4無線寬頻路由器。默認情況下, 該設備對外的網卡過濾所有TCP埠,但UDP探測仍然會引發一個埠不可到達 的消息,從而暴露了它自己。
-PE; -PP; -PM (ICMP Ping Types)
除了前面討論的這些不常見的TCP和UDP主機發現類型, Nmap也能發送世人皆知的ping 程式所發送的報文。Nmap發送一個ICMP type 8 (回聲請求)報文到目標IP地址, 期待從運行的主機得到一個type 0 (回聲響應)報文。 對於網路探索者而言,不幸的是,許多主機和 防火牆現在封鎖這些報文,而不是按期望的那樣響應, 參見RFC 1122。因此,僅僅ICMP掃描對於互聯網上的目標通常是不夠的。 但對於系統管理員監視一個內部網路,它們可能是實際有效的途徑。 使用-PE選項打開該回聲請求功能。
雖然回聲請求是標準的ICMP ping查詢, Nmap並不止於此。ICMP標準 (RFC 792)還規範了時間戳請求,資訊請求 request,和地址掩碼請求,它們的程式碼分別是13,15和17。 雖然這些查詢的表面目的是獲取資訊如地址掩碼和當前時間, 它們也可以很容易地用於主機發現。 很簡單,回應的系統就是在運行的系統。Nmap目前沒有實現資訊請求報文, 因為它們還沒有被廣泛支援。RFC 1122 堅持 “主機不應該實現這些消息”。 時間戳和地址掩碼查詢可以分別用-PP和-PM選項發送。 時間戳響應(ICMP程式碼14)或者地址掩碼響應(程式碼18)表示主機在運行。 當管理員特別封鎖了回聲請求報文而忘了其它ICMP查詢可能用於 相同目的時,這兩個查詢可能很有價值。
-PR (ARP Ping)
最常見的Nmap使用場景之一是掃描一個以太區域網。 在大部分區域網上,特別是那些使用基於 RFC1918私有地址範圍的網路,在一個給定的時間絕大部分 IP地址都是不使用的。 當Nmap試圖發送一個原始IP報文如ICMP回聲請求時, 作業系統必須確定對應於目標IP的硬體 地址(ARP),這樣它才能把以太幀送往正確的地址。 這一般比較慢而且會有些問題,因為作業系統設計者認為一般不會在短時間內 對沒有運行的機器作幾百萬次的ARP請求。
當進行ARP掃描時,Nmap用它優化的演算法管理ARP請求。 當它收到響應時, Nmap甚至不需要擔心基於IP的ping報文,既然它已經知道該主機正在運行了。 這使得ARP掃描比基於IP的掃描更快更可靠。 所以默認情況下,如果Nmap發現目標主機就在它所在的區域網上,它會進行ARP掃描。 即使指定了不同的ping類型(如 -PI或者 -PS) ,Nmap也會對任何相同區域網上的目標機使用ARP。 如果您真的不想要ARP掃描,指定 –send-ip。
-n (不用域名解析)
告訴Nmap 永不對它發現的活動IP地址進行反向域名解析。 既然DNS一般比較慢,這可以讓事情更快些。
-R (為所有目標解析域名)
告訴Nmap 永遠 對目標IP地址作反向域名解析。 一般只有當發現機器正在運行時才進行這項操作。
–system-dns (使用系統域名解析器)
默認情況下,Nmap通過直接發送查詢到您的主機上配置的域名伺服器 來解析域名。為了提高性能,許多請求 (一般幾十個 ) 並發執行。如果您希望使用系統自帶的解析器,就指定該選項 (通過getnameinfo()調用一次解析一個IP)。除非Nmap的DNS程式碼有bug–如果是這樣,請聯繫我們。 一般不使用該選項,因為它慢多了。系統解析器總是用於IPv6掃描。
- 埠掃描基礎
open(開放的)
應用程式正在該埠接收TCP 連接或者UDP報文。發現這一點常常是埠掃描 的主要目標。安全意識強的人們知道每個開放的埠 都是攻擊的入口。攻擊者或者入侵測試者想要發現開放的埠。 而管理員則試圖關閉它們或者用防火牆保護它們以免妨礙了合法用戶。 非安全掃描可能對開放的埠也感興趣,因為它們顯示了網路上那些服務可供使用。
closed(關閉的)
關閉的埠對於Nmap也是可訪問的(它接受Nmap的探測報文並作出響應), 但沒有應用程式在其上監聽。 它們可以顯示該IP地址上(主機發現,或者ping掃描)的主機正在運行up 也對部分作業系統探測有所幫助。 因為關閉的關口是可訪問的,也許過會兒值得再掃描一下,可能一些又開放了。 系統管理員可能會考慮用防火牆封鎖這樣的埠。 那樣他們就會被顯示為被過濾的狀態,下面討論。
filtered(被過濾的)
由於包過濾阻止探測報文到達埠, Nmap無法確定該埠是否開放。過濾可能來自專業的防火牆設備,路由器規則 或者主機上的軟體防火牆。這樣的埠讓攻擊者感覺很挫折,因為它們幾乎不提供 任何資訊。有時候它們響應ICMP錯誤消息如類型3程式碼13 (無法到達目標: 通訊被管理員禁止),但更普遍的是過濾器只是丟棄探測幀, 不做任何響應。 這迫使Nmap重試若干次以訪萬一探測包是由於網路阻塞丟棄的。 這使得掃描速度明顯變慢。
unfiltered(未被過濾的)
未被過濾狀態意味著埠可訪問,但Nmap不能確定它是開放還是關閉。 只有用於映射防火牆規則集的ACK掃描才會把埠分類到這種狀態。 用其它類型的掃描如窗口掃描,SYN掃描,或者FIN掃描來掃描未被過濾的埠可以幫助確定 埠是否開放。
open|filtered(開放或者被過濾的)
當無法確定埠是開放還是被過濾的,Nmap就把該埠劃分成 這種狀態。開放的埠不響應就是一個例子。沒有響應也可能意味著報文過濾器丟棄 了探測報文或者它引發的任何響應。因此Nmap無法確定該埠是開放的還是被過濾的。 UDP,IP協議, FIN,Null,和Xmas掃描可能把埠歸入此類。
closed|filtered(關閉或者被過濾的)
該狀態用於Nmap不能確定埠是關閉的還是被過濾的。 它只可能出現在IPID Idle掃描中。
- 埠掃描技術
-sS (TCP SYN掃描)
SYN掃描作為默認的也是最受歡迎的掃描選項,是有充分理由的。 它執行得很快,在一個沒有入侵防火牆的快速網路上,每秒鐘可以掃描數千個 埠。 SYN掃描相對來說不張揚,不易被注意到,因為它從來不完成TCP連接。 它也不像Fin/Null/Xmas,Maimon和Idle掃描依賴於特定平台,而可以應對任何兼容的 TCP協議棧。 它還可以明確可靠地區分open(開放的), closed(關閉的),和filtered(被過濾的) 狀態
它常常被稱為半開放掃描, 因為它不打開一個完全的TCP連接。它發送一個SYN報文, 就像您真的要打開一個連接,然後等待響應。 SYN/ACK表示埠在監聽 (開放),而 RST (複位)表示沒有監聽者。如果數次重發後仍沒響應, 該埠就被標記為被過濾。如果收到ICMP不可到達錯誤 (類型3,程式碼1,2,3,9,10,或者13),該埠也被標記為被過濾。
-sT (TCP connect()掃描)
當SYN掃描不能用時,CP Connect()掃描就是默認的TCP掃描。 當用戶沒有許可權發送原始報文或者掃描IPv6網路時,就是這種情況。 Instead of writing raw packets as most other scan types do,Nmap通過創建connect() 系統調用要求作業系統和目標機以及埠建立連接,而不像其它掃描類型直接發送原始報文。 這是和Web瀏覽器,P2P客戶端以及大多數其它網路應用程式用以建立連接一樣的 高層系統調用。它是叫做Berkeley Sockets API編程介面的一部分。Nmap用 該API獲得每個連接嘗試的狀態資訊,而不是讀取響應的原始報文。
當SYN掃描可用時,它通常是更好的選擇。因為Nmap對高層的 connect()調用比對原始報文控制更少, 所以前者效率較低。 該系統調用完全連接到開放的目標埠而不是像SYN掃描進行 半開放的複位。這不僅花更長時間,需要更多報文得到同樣資訊,目標機也更可能 記錄下連接。IDS(入侵檢測系統)可以捕獲兩者,但大部分機器沒有這樣的警報系統。 當Nmap連接,然後不發送數據又關閉連接, 許多普通UNIX系統上的服務會在syslog留下記錄,有時候是一條加密的錯誤消息。 此時,有些真正可憐的服務會崩潰,雖然這不常發生。如果管理員在日誌里看到來自同一系統的 一堆連接嘗試,她應該知道她的系統被掃描了。
-sU (UDP掃描)
雖然互聯網上很多流行的服務運行在TCP 協議上,UDP服務也不少。 DNS,SNMP,和DHCP (註冊的埠是53,161/162,和67/68)是最常見的三個。 因為UDP掃描一般較慢,比TCP更困難,一些安全審核人員忽略這些埠。 這是一個錯誤,因為可探測的UDP服務相當普遍,攻擊者當然不會忽略整個協議。 所幸,Nmap可以幫助記錄並報告UDP埠。
UDP掃描用-sU選項激活。它可以和TCP掃描如 SYN掃描 (-sS)結合使用來同時檢查兩種協議。
UDP掃描發送空的(沒有數據)UDP報頭到每個目標埠。 如果返回ICMP埠不可到達錯誤(類型3,程式碼3), 該埠是closed(關閉的)。 其它ICMP不可到達錯誤(類型3, 程式碼1,2,9,10,或者13)表明該埠是filtered(被過濾的)。 偶爾地,某服務會響應一個UDP報文,證明該埠是open(開放的)。 如果幾次重試後還沒有響應,該埠就被認為是 open|filtered(開放|被過濾的)。 這意味著該埠可能是開放的,也可能包過濾器正在封鎖通訊。 可以用版本掃描(-sV)幫助區分真正的開放埠和被過濾的埠。
UDP掃描的巨大挑戰是怎樣使它更快速。 開放的和被過濾的埠很少響應,讓Nmap超時然後再探測,以防探測幀或者 響應丟失。關閉的埠常常是更大的問題。 它們一般發回一個ICMP埠無法到達錯誤。但是不像關閉的TCP埠響應SYN或者Connect 掃描所發送的RST報文,許多主機在默認情況下限制ICMP埠不可到達消息。 Linux和Solaris對此特別嚴格。例如, Linux 2.4.20內核限制一秒鐘只發送一條目標不可到達消息 (見net/ipv4/icmp。c)。
Nmap探測速率限制並相應地減慢來避免用那些目標機會丟棄的無用報文來阻塞 網路。不幸的是,Linux式的一秒鐘一個報文的限制使65,536個埠的掃描要花 18小時以上。加速UDP掃描的方法包括並發掃描更多的主機,先只對主要埠進行快速 掃描,從防火牆後面掃描,使用–host-timeout跳過慢速的 主機。
-sN; -sF; -sX (TCP Null,FIN,and Xmas掃描)
這三種掃描類型 (甚至用下一節描述的 –scanflags 選項的更多類型) 在TCP RFC 中發掘了一個微妙的方法來區分open(開放的)和 closed(關閉的)埠。第65頁說“如果 [目標]埠狀態是關閉的…. 進入的不含RST的報文導致一個RST響應。” 接下來的一頁 討論不設置SYN,RST,或者ACK位的報文發送到開放埠: “理論上,這不應該發生,如果您確實收到了,丟棄該報文,返回。 ”
如果掃描系統遵循該RFC,當埠關閉時,任何不包含SYN,RST,或者ACK位的報文會導致 一個RST返回,而當埠開放時,應該沒有任何響應。只要不包含SYN,RST,或者ACK, 任何其它三種(FIN,PSH,and URG)的組合都行。Nmap有三種掃描類型利用這一點:
Null掃描 (-sN)
不設置任何標誌位(tcp標誌頭是0)
FIN掃描 (-sF)
只設置TCP FIN標誌位。
Xmas掃描 (-sX)
設置FIN,PSH,和URG標誌位,就像點亮聖誕樹上所有的燈一樣。
除了探測報文的標誌位不同,這三種掃描在行為上完全一致。 如果收到一個RST報文,該埠被認為是 closed(關閉的),而沒有響應則意味著 埠是open|filtered(開放或者被過濾的)。 如果收到ICMP不可到達錯誤(類型 3,代號 1,2,3,9,10,或者13),該埠就被標記為 被過濾的。
這些掃描的關鍵優勢是它們能躲過一些無狀態防火牆和報文過濾路由器。 另一個優勢是這些掃描類型甚至比SYN掃描還要隱秘一些。但是別依賴它 — 多數 現代的IDS產品可以發現它們。一個很大的不足是並非所有系統都嚴格遵循RFC 793。 許多系統不管埠開放還是關閉,都響應RST。 這導致所有埠都標記為closed(關閉的)。 這樣的作業系統主要有Microsoft Windows,許多Cisco設備,BSDI,以及IBM OS/400。 但是這種掃描對多數UNIX系統都能工作。這些掃描的另一個不足是 它們不能辨別open(開放的)埠和一些特定的 filtered(被過濾的)埠,從而返回 open|filtered(開放或者被過濾的)。
-sA (TCP ACK掃描)
這種掃描與目前為止討論的其它掃描的不同之處在於 它不能確定open(開放的)或者 open|filtered(開放或者過濾的))埠。 它用於發現防火牆規則,確定它們是有狀態的還是無狀態的,哪些埠是被過濾的。
ACK掃描探測報文只設置ACK標誌位(除非您使用 –scanflags)。當掃描未被過濾的系統時, open(開放的)和closed(關閉的) 埠 都會返回RST報文。Nmap把它們標記為 unfiltered(未被過濾的),意思是 ACK報文不能到達,但至於它們是open(開放的)或者 closed(關閉的) 無法確定。不響應的埠 或者發送特定的ICMP錯誤消息(類型3,代號1,2,3,9,10, 或者13)的埠,標記為 filtered(被過濾的)。
-sW (TCP窗口掃描)
除了利用特定系統的實現細節來區分開放埠和關閉埠,當收到RST時不總是列印unfiltered, 窗口掃描和ACK掃描完全一樣。 它通過檢查返回的RST報文的TCP窗口域做到這一點。 在某些系統上,開放埠用正數表示窗口大小(甚至對於RST報文) 而關閉埠的窗口大小為0。因此,當收到RST時,窗口掃描不總是把埠標記為 unfiltered, 而是根據TCP窗口值是正數還是0,分別把埠標記為open或者 closed
該掃描依賴於互聯網上少數系統的實現細節, 因此您不能永遠相信它。不支援它的系統會通常返回所有埠closed。 當然,一台機器沒有開放埠也是有可能的。 如果大部分被掃描的埠是 closed,而一些常見的埠 (如 22, 25,53) 是 filtered,該系統就非常可疑了。 偶爾地,系統甚至會顯示恰恰相反的行為。 如果您的掃描顯示1000個開放的埠和3個關閉的或者被過濾的埠, 那麼那3個很可能也是開放的埠。
-sM (TCP Maimon掃描)
Maimon掃描是用它的發現者Uriel Maimon命名的。他在 Phrack Magazine issue #49 (November 1996)中描述了這一技術。 Nmap在兩期後加入了這一技術。 這項技術和Null,FIN,以及Xmas掃描完全一樣,除了探測報文是FIN/ACK。 根據RFC 793 (TCP),無論埠開放或者關閉,都應該對這樣的探測響應RST報文。 然而,Uriel注意到如果埠開放,許多基於BSD的系統只是丟棄該探測報文。
–scanflags (訂製的TCP掃描)
真正的Nmap高級用戶不需要被這些現成的掃描類型束縛。 –scanflags選項允許您通過指定任意TCP標誌位來設計您自己的掃描。 讓您的創造力流動,躲開那些僅靠本手冊添加規則的入侵檢測系統!
–scanflags選項可以是一個數字標記值如9 (PSH和FIN), 但使用字元名更容易些。 只要是URG, ACK,PSH, RST,SYN,and FIN的任何組合就行。例如,–scanflags URGACKPSHRSTSYNFIN設置了所有標誌位,但是這對掃描沒有太大用處。 標誌位的順序不重要。
除了設置需要的標誌位,您也可以設置 TCP掃描類型(如-sA或者-sF)。 那個基本類型告訴Nmap怎樣解釋響應。例如, SYN掃描認為沒有響應意味著 filtered埠,而FIN掃描則認為是 open|filtered。 除了使用您指定的TCP標記位,Nmap會和基本掃描類型一樣工作。 如果您不指定基本類型,就使用SYN掃描。
-sI <zombie host[:probeport]> (Idlescan)
這種高級的掃描方法允許對目標進行真正的TCP埠盲掃描 (意味著沒有報文從您的真實IP地址發送到目標)。相反,side-channel攻擊 利用zombie主機上已知的IP分段ID序列生成演算法來窺探目標上開放埠的資訊。 IDS系統將顯示掃描來自您指定的zombie機(必須運行並且符合一定的標準)。 這種奇妙的掃描類型太複雜了,不能在此完全描述,所以我寫一篇非正式的論文, 發布在https://nmap.org/book/idlescan.html。
除了極端隱蔽(由於它不從真實IP地址發送任何報文), 該掃描類型可以建立機器間的基於IP的信任關係。 埠列表從zombie 主機的角度。顯示開放的埠。 因此您可以嘗試用您認為(通過路由器/包過濾規則)可能被信任的 zombies掃描目標。
如果您由於IPID改變希望探測zombie上的特定埠, 您可以在zombie 主機後加上一個冒號和埠號。 否則Nmap會使用默認埠(80)。
-sO (IP協議掃描)
IP 協議掃描可以讓您確定目標機支援哪些IP協議 (TCP,ICMP,IGMP,等等)。從技術上說,這不是埠掃描 ,既然它遍歷的是IP協議號而不是TCP或者UDP埠號。 但是它仍使用 -p選項選擇要掃描的協議號, 用正常的埠表格式報告結果,甚至用和真正的埠掃描一樣 的掃描引擎。因此它和埠掃描非常接近,也被放在這裡討論。
除了本身很有用,協議掃描還顯示了開源軟體的力量。 儘管基本想法非常簡單,我過去從沒想過增加這一功能也沒收到任何對它的請求。 在2000年夏天,Gerhard Rieger孕育了這個想法,寫了一個很棒的修補程式程式,發送到nmap-hackers郵件列表。 我把那個修補程式加入了Nmap,第二天發布了新版本。 幾乎沒有商業軟體會有用戶有足夠的熱情設計並貢獻他們的改進。
協議掃描以和UDP掃描類似的方式工作。它不是在UDP報文的埠域上循環, 而是在IP協議域的8位上循環,發送IP報文頭。 報文頭通常是空的,不包含數據,甚至不包含所申明的協議的正確報文頭 TCP,UDP,和ICMP是三個例外。它們三個會使用正常的協議頭,因為否則某些系 統拒絕發送,而且Nmap有函數創建它們。協議掃描不是注意ICMP埠不可到達消息, 而是ICMP 協議不可到達消息。如果Nmap從目標主機收到 任何協議的任何響應,Nmap就把那個協議標記為open。 ICMP協議不可到達 錯誤(類型 3,代號 2) 導致協議被標記為 closed。其它ICMP不可到達協議(類型 3,代號 1,3,9,10,或者13) 導致協議被標記為 filtered (雖然同時他們證明ICMP是 open )。如果重試之後仍沒有收到響應, 該協議就被標記為open|filtered
-b <ftp relay host> (FTP彈跳掃描)
FTP協議的一個有趣特徵(RFC 959) 是支援所謂代理ftp連接。它允許用戶連接到一台FTP伺服器,然後要求文件送到一台第三方伺服器。 這個特性在很多層次上被濫用,所以許多伺服器已經停止支援它了。其中一種就是導致FTP伺服器對其它主機埠掃描。 只要請求FTP伺服器輪流發送一個文件到目標主機上的所感興趣的埠。 錯誤消息會描述埠是開放還是關閉的。 這是繞過防火牆的好方法,因為FTP伺服器常常被置於可以訪問比Web主機更多其它內部主機的位置。 Nmap用-b選項支援ftp彈跳掃描。參數格式是 <username>:<password>@<server>:<port>。 <Server> 是某個脆弱的FTP伺服器的名字或者IP地址。 您也許可以省略<username>:<password>, 如果伺服器上開放了匿名用戶(user:anonymous password:-wwwuser@)。 埠號(以及前面的冒號) 也可以省略,如果<server>使用默認的FTP埠(21)。
當Nmap1997年發布時,這個弱點被廣泛利用,但現在大部分已經被fix了。 脆弱的伺服器仍然存在,所以如果其它都失敗了,這也值得一試。 如果您的目標是繞過防火牆,掃描目標網路上的開放的21埠(或者 甚至任何ftp服務,如果您用版本探測掃描所有埠), 然後對每個嘗試彈跳掃描。Nmap會告訴您該主機脆弱與否。 如果您只是試著玩Nmap,您不必(事實上,不應該)限制您自己。 在您隨機地在互聯網上尋找脆弱的FTP伺服器時,考慮一下系統管理員不太喜歡您這樣濫用他們的伺服器。
- 掃描順序
-p <port ranges> (只掃描指定的埠)
該選項指明您想掃描的埠,覆蓋默認值。 單個埠和用連字元表示的埠範圍(如 1-1023)都可以。 範圍的開始以及/或者結束值可以被省略, 分別導致Nmap使用1和65535。所以您可以指定 -p-從埠1掃描到65535。 如果您特別指定,也可以掃描埠0。 對於IP協議掃描(-sO),該選項指定您希望掃描的協議號 (0-255)。
當既掃描TCP埠又掃描UDP埠時,您可以通過在埠號前加上T: 或者U:指定協議。 協議限定符一直有效您直到指定另一個。 例如,參數 -p U:53,111,137,T:21-25,80,139,8080 將掃描UDP 埠53,111,和137,同時掃描列出的TCP埠。注意,要既掃描 UDP又掃描TCP,您必須指定 -sU ,以及至少一個TCP掃描類型(如 -sS,-sF,或者 -sT)。如果沒有給定協議限定符, 埠號會被加到所有協議列表。
-F (快速 (有限的埠) 掃描)
在nmap的nmap-services 文件中(對於-sO,是協議文件)指定您想要掃描的埠。 這比掃描所有65535個埠快得多。 因為該列表包含如此多的TCP埠(1200多),這和默認的TCP掃描 scan (大約1600個埠)速度差別不是很大。如果您用–datadir選項指定您自己的 小小的nmap-services文件 ,差別會很驚人。
-r (不要按隨機順序掃描埠)
默認情況下,Nmap按隨機順序掃描埠 (除了出於效率的考慮,常用的埠前移)。這種隨機化通常都是受歡迎的, 但您也可以指定-r來順序埠掃描。
- 服務和版本探索
-sV (版本探測)
打開版本探測。 您也可以用-A同時打開作業系統探測和版本探測。
–allports (不為版本探測排除任何埠)
默認情況下,Nmap版本探測會跳過9100 TCP埠,因為一些印表機簡單地列印送到該埠的 任何數據,這回導致數十頁HTTP get請求,二進位 SSL會話請求等等被列印出來。這一行為可以通過修改或刪除nmap-service-probes 中的Exclude指示符改變, 您也可以不理會任何Exclude指示符,指定–allports掃描所有埠
–version-intensity <intensity> (設置 版本掃描強度)
當進行版本掃描(-sV)時,nmap發送一系列探測報文 ,每個報文都被賦予一個1到9之間的值。 被賦予較低值的探測報文對大範圍的常見服務有效,而被賦予較高值的報文 一般沒什麼用。強度水平說明了應該使用哪些探測報文。數值越高, 服務越有可能被正確識別。 然而,高強度掃描花更多時間。強度值必須在0和9之間。 默認是7。當探測報文通過nmap-service-probes ports指示符 註冊到目標埠時,無論什麼強度水平,探測報文都會被嘗試。這保證了DNS 探測將永遠在任何開放的53埠嘗試, SSL探測將在443埠嘗試,等等。
–version-light (打開輕量級模式)
這是 –version-intensity 2的方便的別名。輕量級模式使 版本掃描快許多,但它識別服務的可能性也略微小一點。
–version-all (嘗試每個探測)
–version-intensity 9的別名, 保證對每個埠嘗試每個探測報文。
–version-trace (跟蹤版本掃描活動)
這導致Nmap列印出詳細的關於正在進行的掃描的調試資訊。 它是您用–packet-trace所得到的資訊的子集。
-sR (RPC掃描)
這種方法和許多埠掃描方法聯合使用。 它對所有被發現開放的TCP/UDP埠執行SunRPC程式NULL命令,來試圖 確定它們是否RPC埠,如果是, 是什麼程式和版本號。因此您可以有效地獲得和rpcinfo -p一樣的資訊, 即使目標的埠映射在防火牆後面(或者被TCP包裝器保護)。Decoys目前不能和RPC scan一起工作。 這作為版本掃描(-sV)的一部分自動打開。 由於版本探測包括它並且全面得多,-sR很少被需要。
- 作業系統探測
-O (啟用作業系統檢測)
也可以使用-A來同時啟用作業系統檢測和版本檢測。
–osscan-limit (針對指定的目標進行作業系統檢測)
如果發現一個打開和關閉的TCP埠時,作業系統檢測會更有效。 採用這個選項,Nmap只對滿足這個條件的主機進行作業系統檢測,這樣可以 節約時間,特別在使用-P0掃描多個主機時。這個選項僅在使用 -O或-A 進行作業系統檢測時起作用。
–osscan-guess; –fuzzy (推測作業系統檢測結果)
當Nmap無法確定所檢測的作業系統時,會儘可能地提供最相近的匹配,Nmap默認 進行這種匹配,使用上述任一個選項使得Nmap的推測更加有效。
- 時間和性能
–min-hostgroup <milliseconds>; –max-hostgroup <milliseconds> (調整並行掃描組的大小)
Nmap具有並行掃描多主機埠或版本的能力,Nmap將多個目標IP地址 空間分成組,然後在同一時間對一個組進行掃描。通常,大的組更有效。缺 點是只有當整個組掃描結束後才會提供主機的掃描結果。如果組的大小定義 為50,則只有當前50個主機掃描結束後才能得到報告(詳細模式中的補充資訊 除外)。
默認方式下,Nmap採取折衷的方法。開始掃描時的組較小, 最小為5,這樣便於盡快產生結果;隨後增長組的大小,最大為1024。確切的 大小依賴於所給定的選項。為保證效率,針對UDP或少量埠的TCP掃描,Nmap 使用大的組。
–max-hostgroup選項用於說明使用最大的組,Nmap不 會超出這個大小。–min-hostgroup選項說明最小的組,Nmap 會保持組大於這個值。如果在指定的介面上沒有足夠的目標主機來滿足所 指定的最小值,Nmap可能會採用比所指定的值小的組。這兩個參數雖然很少使用, 但都用於保持組的大小在一個指定的範圍之內。
這些選項的主要用途是說明一個最小組的大小,使得整個掃描更加快速。通常 選擇256來掃描C類網段。對於埠數較多的掃描,超出該值沒有意義。對於 埠數較少的掃描,2048或更大的組大小是有幫助的。
–min-parallelism <milliseconds>; –max-parallelism <milliseconds> (調整探測報文的並行度)
這些選項控制用於主機組的探測報文數量,可用於埠掃描和主機發現。默認狀態下, Nmap基於網路性能計算一個理想的並行度,這個值經常改變。如果報文被丟棄, Nmap降低速度,探測報文數量減少。隨著網路性能的改善,理想的探測報文數量會緩慢增加。 這些選項確定這個變數的大小範圍。默認狀態下,當網路不可靠時,理想的並行度值 可能為1,在好的條件下,可能會增長至幾百。
最常見的應用是–min-parallelism值大於1,以加快 性能不佳的主機或網路的掃描。這個選項具有風險,如果過高則影響準確度,同時 也會降低Nmap基於網路條件動態控制並行度的能力。這個值設為10較為合適, 這個值的調整往往作為最後的手段。
–max-parallelism選項通常設為1,以防止Nmap在同一時間 向主機發送多個探測報文,和選擇–scan-delay同時使用非常有用,雖然 這個選項本身的用途已經很好。
–min-rtt-timeout <milliseconds>, –max-rtt-timeout <milliseconds>, –initial-rtt-timeout <milliseconds> (調整探測報文超時)
Nmap使用一個運行超時值來確定等待探測報文響應的時間,隨後會放棄或重新 發送探測報文。Nmap基於上一個探測報文的響應時間來計算超時值,如果網路延遲比較顯著 和不定,這個超時值會增加幾秒。初始值的比較保守(高),而當Nmap掃描無響應 的主機時,這個保守值會保持一段時間。
這些選項以毫秒為單位,採用小的–max-rtt-timeout值,使 –initial-rtt-timeout值大於默認值可以明顯減少掃描時間,特別 是對不能ping通的掃描(-P0)以及具有嚴格過濾的網路。如果使用太 小的值,使得很多探測報文超時從而重新發送,而此時可能響應消息正在發送,這使得整個掃描的時 間會增加。
如果所有的主機都在本地網路,對於–max-rtt-timeout值來 說,100毫秒比較合適。如果存在路由,首先使用ICMP ping工具ping主機,或使用其 它報文工具如hpings,可以更好地穿透防火牆。查看大約10個包的最大往返時間,然後將 –initial-rtt-timeout設成這個時間的2倍,–max-rtt-timeout 可設成這個時間值的3倍或4倍。通常,不管ping的時間是多少,最大的rtt值不得小於100ms, 不能超過1000ms。
–min-rtt-timeout這個選項很少使用,當網路不可靠時, Nmap的默認值也顯得過於強烈,這時這個選項可起作用。當網路看起來不可靠時,Nmap僅將 超時時間降至最小值,這個情況是不正常的,需要向nmap-dev郵件列表報告bug。
–host-timeout <milliseconds> (放棄低速目標主機)
由於性能較差或不可靠的網路硬體或軟體、頻寬限制、嚴格的防火牆等原因, 一些主機需要很長的時間掃描。這些極少數的主機掃描往往占 據了大部分的掃描時間。因此,最好的辦法是減少時間消耗並且忽略這些主機,使用 –host-timeout選項來說明等待的時間(毫秒)。通常使用1800000 來保證Nmap不會在單個主機上使用超過半小時的時間。需要注意的是,Nmap在這半小時中可以 同時掃描其它主機,因此並不是完全放棄掃描。超時的主機被忽略,因此也沒有針對該主機的 埠表、作業系統檢測或版本檢測結果的輸出。
–scan-delay <milliseconds>; –max-scan-delay <milliseconds> (調整探測報文的時間間隔)
這個選項用於Nmap控制針對一個主機發送探測報文的等待時間(毫秒),在頻寬 控制的情況下這個選項非常有效。Solaris主機在響應UDP掃描探測報文報文時,每秒 只發送一個ICMP消息,因此Nmap發送的很多數探測報文是浪費的。–scan-delay 設為1000,使Nmap低速運行。Nmap嘗試檢測頻寬控制並相應地調整掃描的延遲,但 並不影響明確說明何種速度工作最佳。
–scan-delay的另一個用途是躲閉基於閾值的入侵檢測和預防 系統(IDS/IPS)。
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (設置時間模板)
上述優化時間控制選項的功能很強大也很有效,但有些用戶會被迷惑。此外, 往往選擇合適參數的時間超過了所需優化的掃描時間。因此,Nmap提供了一些簡單的 方法,使用6個時間模板,使用時採用-T選項及數字(0 – 5) 或名稱。模板名稱有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。前兩種模式用於IDS躲避,Polite模式降低了掃描 速度以使用更少的頻寬和目標主機資源。默認模式為Normal,因此-T3 實際上是未做任何優化。Aggressive模式假設用戶具有合適及可靠的網路從而加速 掃描。Insane模式假設用戶具有特別快的網路或者願意為獲得速度而犧牲準確性。
用戶可以根據自己的需要選擇不同的模板,由Nmap負責選擇實際的時間值。 模板也會針對其它的優化控制選項進行速度微調。例如,-T4 針對TCP埠禁止動態掃描延遲超過10ms,-T5對應的值為5ms。 模板可以和優化調整控制選項組合使用,但模板必須首先指定,否則模板的標準值 會覆蓋用戶指定的值。建議在掃描可靠的網路時使用 -T4,即使 在自己要增加優化控制選項時也使用(在命令行的開始),從而從這些額外的較小的優化 中獲益。
如果用於有足夠的頻寬或乙太網連接,仍然建議使用-T4選項。 有些用戶喜歡-T5選項,但這個過於強烈。有時用戶考慮到避免使主機 崩潰或者希望更禮貌一些會採用-T2選項。他們並沒意識到-T Polite選項是如何的慢,這種模式的掃描比默認方式實際上要多花10倍的時間。默認時間 選項(-T3)很少有主機崩潰和頻寬問題,比較適合于謹慎的用戶。不進行 版本檢測比進行時間調整能更有效地解決這些問題。
雖然-T0和-T1選項可能有助於避免IDS告警,但 在進行上千個主機或埠掃描時,會顯著增加時間。對於這種長時間的掃描,寧可設定確切的時間 值,而不要去依賴封裝的-T0和-T1選項。
T0選項的主要影響是對於連續掃描,在一個時間只能掃描一個埠, 每個探測報文的發送間隔為5分鐘。T1和T2選項比較類似, 探測報文間隔分別為15秒和0.4秒。T3是Nmap的默認選項,包含了並行掃描。 T4選項與 –max-rtt-timeout 1250 –initial-rtt-timeout 500 等價,最大TCP掃描延遲為10ms。T5等價於 –max-rtt-timeout 300 –min-rtt-timeout 50 –initial-rtt-timeout 250 –host-timeout 900000,最大TCP掃描延遲為5ms。
- 防火牆/IDS躲避和哄騙
-f (報文分段); –mtu (使用指定的MTU)
-f選項要求掃描時(包挺ping掃描)使用 小的IP包分段。其思路是將TCP頭分段在幾個包中,使得包過濾器、 IDS以及其它工具的檢測更加困難。必須小心使用這個選項,有些系 統在處理這些小包時存在問題,例如舊的網路嗅探器Sniffit在接收 到第一個分段時會立刻出現分段錯誤。該選項使用一次,Nmap在IP 頭後將包分成8個位元組或更小。因此,一個20位元組的TCP頭會被分成3個 包,其中2個包分別有TCP頭的8個位元組,另1個包有TCP頭的剩下4個字 節。當然,每個包都有一個IP頭。再次使用-f可使用 16位元組的分段(減少分段數量)。使用–mtu選項可 以自定義偏移的大小,使用時不需要-f,偏移量必須 是8的倍數。包過濾器和防火牆對所有的IP分段排隊,如Linux核心中的 CONFIG-IP-ALWAYS-DEFRAG配置項,分段包不會直接使用。一些網路無法 承受這樣所帶來的性能衝擊,會將這個配置禁止。其它禁止的原因有分段 包會通過不同的路由進入網路。一些源系統在內核中對發送的報文進行 分段,使用iptables連接跟蹤模組的Linux就是一個例子。當使用類似Ethereal 的嗅探器時,掃描必須保證發送的報文要分段。如果主機作業系統會產 生問題,嘗試使用–send-eth選項以避開IP層而直接 發送原始的乙太網幀。
-D <decoy1 [,decoy2][,ME],…> (使用誘餌隱蔽掃描)
為使誘餌掃描起作用,需要使遠程主機認為是誘餌在掃描目標網路。 IDS可能會報個某個IP的5-10個埠掃描,但並不知道哪個IP在掃描以及 哪些不是誘餌。但這種方式可以通過路由跟蹤、響應丟棄以及其它主動 機制在解決。這是一種常用的隱藏自身IP地址的有效技術。
使用逗號分隔每個誘餌主機,也可用自己的真實IP作為誘餌,這時可使用 ME選項說明。如果在第6個位置或 更後的位置使用ME選項,一些常用 埠掃描檢測器(如Solar Designer’s excellent scanlogd)就不會報告 這個真實IP。如果不使用ME選項,Nmap 將真實IP放在一個隨機的位置
注意,作為誘餌的主機須在工作狀態,否則會導致目標主機的SYN洪水攻擊。 如果在網路中只有一個主機在工作,那就很容易確定哪個主機在掃描。也可 使用IP地址代替主機名(被誘騙的網路就不可能在名字伺服器日誌中發現)。
誘餌可用在初始的ping掃描(ICMP、SYN、ACK等)階段或真正的埠掃描 階段。誘餌也可以用於遠程作業系統檢測(-O)。在進行版 本檢測或TCP連接掃描時,誘餌無效。
使用過多的誘餌沒有任何價值,反而導致掃描變慢並且結果不準確。 此外,一些ISP會過濾哄騙的報文,但很多對欺騙IP包沒有任何限制。
-S <IP_Address> (源地址哄騙)
在某些情況下,Nmap可能無法確定你的源地址(如果這樣,Nmap會給出 提示)。此時,使用-S選項並說明所需發送包的介面IP地址。
這個標誌的另一個用處是哄騙性的掃描,使得目標認為是另 一個地址在進行掃描。可以想像某一個競爭對手在不斷掃描某個公司! -e選項常在這種情況下使用,也可採用-P0選項。
-e <interface> (使用指定的介面)
告訴Nmap使用哪個介面發送和接收報文,Nmap可以進行自動檢測, 如果檢測不出會給出提示。
–source-port <portnumber>; -g <portnumber> (源埠哄騙)
僅依賴於源埠號就信任數據流是一種常見的錯誤配置,這個問題非常 好理解。例如一個管理員部署了一個新的防火牆,但招來了很多用戶的不滿,因為 他們的應用停止工作了。可能是由於外部的UDP DNS伺服器響應無法進入網路,而導致 DNS的崩潰。FTP是另一個常見的例子,在FTP傳輸時,遠程伺服器嘗試和內部用 建立連接以傳輸數據。
對這些問題有安全解決方案,通常是應用級代理或協議分析防火牆模組。 但也存在一些不安全的方案。注意到DNS響應來自於53埠,FTP連接 來自於20埠,很多管理員會掉入一個陷阱,即允許來自於這些埠的數據進入 網路。他們認為這些埠里不會有值得注意的攻擊和漏洞利用。此外,管理員 或許認為這是一個短期的措施,直至他們採取更安全的方案。但他們忽視了安全的 升級。
不僅僅是工作量過多的網路管理員掉入這種陷阱,很多產品本身也會有這類 不安全的隱患,甚至是微軟的產品。Windows 2000和Windows XP中包含的IPsec過濾 器也包含了一些隱含規則,允許所有來自88埠(Kerberos)的TCP和UDP數據流。另 一個常見的例子是Zone Alarm個人防火牆到2.1.25版本仍然允許源埠53(DNS)或 67(DHCP)的UDP包進入。
Nmap提供了-g和–source-port選項(它們是 等價的),用於利用上述弱點。只需要提供一個埠號,Nmap就可以從這些 埠發送數據。為使特定的作業系統正常工作,Nmap必須使用不同的埠號。 DNS請求會忽略–source-port選項,這是因為Nmap依靠系 統庫來處理。大部分TCP掃描,包括SYN掃描,可以完全支援這些選項,UDP掃 描同樣如此。
–data-length <number> (發送報文時 附加隨機數據)
正常情況下,Nmap發送最少的報文,只含一個包頭。因此TCP包通常 是40位元組,ICMP ECHO請求只有28位元組。這個選項告訴Nmap在發送的報文上 附加指定數量的隨機位元組。作業系統檢測(-O)包不受影響, 但大部分ping和埠掃描包受影響,這會使處理變慢,但對掃描的影響較小。
–ttl <value> (設置IP time-to-live域)
設置IPv4報文的time-to-live域為指定的值。
–randomize-hosts (對目標主機的順序隨機排列)
告訴Nmap在掃描主機前對每個組中的主機隨機排列,最多可達 8096個主機。這會使得掃描針對不同的網路監控系統來說變得不是很 明顯,特別是配合值較小的時間選項時更有效。如果需要對一個較大 的組進行隨機排列,需要增大nmap.h文件中 PING-GROUP-SZ的值,並重新編譯。另一種方法是使用列表掃描 (-sL -n -oN <filename>),產生目標IP的列表, 使用Perl腳本進行隨機化,然後使用-iL提供給Nmap。
–spoof-mac <mac address,prefix,or vendor name> (MAC地址哄騙)
要求Nmap在發送原乙太網幀時使用指定的MAC地址,這個選項隱含了 –send-eth選項,以保證Nmap真正發送乙太網包。MAC地址有幾 種格式。如果簡單地使用字元串“0”,Nmap選擇一個完全隨機的MAC 地址。如果給定的字元品是一個16進位偶數(使用:分隔),Nmap將使用這個MAC地址。 如果是小於12的16進位數字,Nmap會隨機填充剩下的6個位元組。如果參數不是0或16進 制字元串,Nmap將通過nmap-mac-prefixes查找 廠商的名稱(大小寫區分),如果找到匹配,Nmap將使用廠商的OUI(3位元組前綴),然後 隨機填充剩餘的3個節字。正確的–spoof-mac參數有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和Cisco.
- 輸出
-oN <filespec> (標準輸出)
要求將標準輸出直接寫入指定 的文件。如上所述,這個格式與互動式輸出 略有不同。
-oX <filespec> (XML輸出)
要求XML輸出直接寫入指定 的文件。Nmap包含了一個文檔類型定義(DTD),使XML解析器有效地 進行XML輸出。這主要是為了程式應用,同時也可以協助人工解釋 Nmap的XML輸出。DTD定義了合法的格式元素,列舉可使用的屬性和 值。最新的版本可在 http://www.insecure.org/nmap/data/nmap.dtd獲取。
XML提供了可供軟體解析的穩定格式輸出,主要的電腦 語言都提供了免費的XML解析器,如C/C++,Perl,Python和Java。 針對這些語言有一些捆綁程式碼用於處理Nmap的輸出和特定的執行程式。 例如perl CPAN中的Nmap::Scanner 和Nmap::Parser。 對幾乎所有與Nmap有介面的主要應用來說,XML是首選的格式。
XML輸出引用了一個XSL樣式表,用于格式化輸出結果,類似於 HTML。最方便的方法是將XML輸出載入到一個Web瀏覽器,如Firefox 或IE。由於nmap.xsl文件的絕對 路徑,因此通常只能在運行了Nmap的機器上工作(或類似配置的機器)。 類似於任何支援Web機器的HTML文件,–stylesheet 選項可用於建立可移植的XML文件。
-oS <filespec> (ScRipT KIdd|3 oUTpuT)
腳本小子輸出類似於交互工具輸出,這是一個事後處理,適合於 ‘l33t HaXXorZ, 由於原來全都是大寫的Nmap輸出。這個選項和腳本小子開了玩笑,看上去似乎是為了 “幫助他們”。
-oG <filespec> (Grep輸出)
這種方式最後介紹,因為不建議使用。XML輸格式很強大,便於有經驗 的用戶使用。XML是一種標準,由許多解析器構成,而Grep輸屆更簡化。XML 是可擴展的,以支援新發布的Nmap特點。使用Grep輸出的目的是忽略這些 特點,因為沒有足夠的空間。
然面,Grep輸出仍然很常使用。它是一種簡單格式,每行一個主機,可以 通過UNIX工具(如grep、awk、cut、sed、diff)和Perl方便地查找和分解。常可 用於在命令行上進行一次性測式。查找ssh埠打開或運行Sloaris的主機,只需 要一個簡單的grep主機說明,使用通道並通過awk或cut命令列印所需的域。
Grep輸出可以包含注釋(每行由#號開始)。每行由6個標記的域組成,由製表符及 冒號分隔。這些域有主機,埠, 協議,忽略狀態, 作業系統,序列號, IPID和狀態。
這些域中最重要的是Ports,它提供 了所關注的埠的細節,埠項由逗號分隔。每個埠項代表一個所關注的埠, 每個子域由/分隔。這些子域有:埠號, 狀態,協議, 擁有者,服務, SunRPCinfo和版本資訊。
對於XML輸出,本手冊無法列舉所有的格式,有關Nmap Grep輸出的更詳細資訊可 查閱http://www.unspecific.com/nmap-oG-output。
-oA <basename> (輸出至所有格式)
為使用方便,利用-oA<basename>選項 可將掃描結果以標準格式、XML格式和Grep格式一次性輸出。分別存放在 <basename>.nmap,<basename>.xml和 <basename>.gnmap文件中。也可以在文件名前 指定目錄名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:hackingsco on Windows。
細節和調試選項
-v (提高輸出資訊的詳細度)
通過提高詳細度,Nmap可以輸出掃描過程的更多資訊。 輸出發現的打開埠,若Nmap認為掃描需要更多時間會顯示估計 的結束時間。這個選項使用兩次,會提供更詳細的資訊。這個選 項使用兩次以上不起作用。
大部分的變化僅影響互動式輸出,也有一些影響標準和腳本 小子輸出。其它輸出類型由機器處理,此時Nmap默認提供詳細的信 息,不需要人工干預。然而,其它模式也會有一些變化,省略一些 細節可以減小輸出大小。例如,Grep輸出中的注釋行提供所有掃描 埠列表,但由於這些資訊過長,因此只能在細節模式中輸出。
-d [level] (提高或設置調試級別)
當詳細模式也不能為用戶提供足夠的數據時,使用調試可以得到更 多的資訊。使用細節選項(-v)時,可啟用命令行參數 (-d),多次使用可提高調試級別。也可在-d 後面使用參數設置調試級別。例如,-d9設定級別9。這是 最高的級別,將會產生上千行的輸出,除非只對很少的埠和目標進行簡單掃描。
如果Nmap因為Bug而掛起或者對Nmap的工作及原理有疑問,調試輸出 非常有效。主要是開發人員用這個選項,調試行不具備自我解釋的特點。 例如,Timeoutvals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000。如果對某行輸出不明白, 可以忽略、查看源程式碼或向開發列表(nmap-dev)求助。有些輸出行會有自 我解釋的特點,但隨著調試級別的升高,會越來越含糊。
–packet-trace (跟蹤發送和接收的報文)
要求Nmap列印發送和接收的每個報文的摘要,通常用於 調試,有助於新用戶更好地理解Nmap的真正工作。為避免輸出過 多的行,可以限制掃描的埠數,如-p20-30。 如果只需進行版本檢測,使用–version-trace。
–iflist (列舉介面和路由)
輸出Nmap檢測到的介面列表和系統路由,用於調試路由 問題或設備描述失誤(如Nmap把PPP連接當作乙太網對待)。
其它輸出選項
–append-output (在輸出文件中添加)
當使用文件作為輸出格式,如-oX或-oN, 默認該文件被覆蓋。如果希望文件保留現有內容,將結果添加在現 有文件後面,使用–append-output選項。所有指 定的輸出文件都被添加。但對於XML(-oX)掃描輸出 文件無效,無法正常解析,需要手工修改。
–resume <filename> (繼續中斷的掃描)
一些擴展的Nmap運行需要很長的時間 — 以天計算,這類掃描 往往不會結束。可以進行一些限制,禁止Nmap在工作時間運行,導致 網路中斷、運行Nmap的主機計劃或非計劃地重啟、或者Nmap自己中斷。 運行Nmap的管理員可以因其它原因取消運行,按下ctrl-C 即可。從頭開始啟動掃描可能令人不快,幸運的是,如果標準掃描 (-oN)或Grep掃描(-oG)日誌 被保留,用戶可以要求Nmap恢復終止的掃描,只需要簡單地使用選項 –resume並說明標準/Grep掃描輸出文件,不允許 使用其它參數,Nmap會解析輸出文件並使用原來的格式輸出。使用方式 如nmap –resume <logfilename>。 Nmap將把新地結果添加到文件中,這種方式不支援XML輸出格式,原因是 將兩次運行結果合併至一個XML文件比較困難。
–stylesheet <path or URL> (設置XSL樣式表,轉換XML輸出)
Nmap提從了XSL樣式表nmap.xsl,用於查看 或轉換XML輸出至HTML。XML輸出包含了一個xml-stylesheet, 直接指向nmap.xml文件, 該文件由Nmap安裝(或位於Windows當前工作目錄)。在Web瀏覽器 中打開Nmap的XML輸出時,將會在文件系統中尋找nmap.xsl文件, 並使用它輸出結果。如果希望使用不同的樣式表,將它作為 –stylesheet的參數,必段指明完整的路 徑或URL,常見的調用方式是–stylesheet http://www.insecure.org/nmap/data/nmap.xsl。 這告訴瀏覽器從Insecire.Org中載入最新的樣式表。這使得 沒安裝Nmap(和nmap.xsl) 的機器中可以方便地查看結果。因此,URL更方便使用,本地文件系統 的nmap.xsl用於默認方式。
–no-stylesheet (忽略XML聲明的XSL樣式表)
使用該選項禁止Nmap的XML輸出關聯任何XSL樣式表。 xml-stylesheet指示被忽略。
- 其它選項
-6 (啟用IPv6掃描)
從2002年起,Nmap提供對IPv6的一些主要特徵的支援。ping掃描(TCP-only)、 連接掃描以及版本檢測都支援IPv6。除增加-6選項外, 其它命令語法相同。當然,必須使用IPv6地址來替換主機名,如 3ffe:7501:4819:2000:210:f3ff:fe03:14d0。 除“所關注的埠”行的地址部分為IPv6地址。
IPv6目前未在全球廣泛採用,目前在一些國家(亞洲)應用較多, 一些高級作業系統支援IPv6。使用Nmap的IPv6功能,掃描的源和目 的都需要配置IPv6。如果ISP(大部分)不分配IPv6地址,Nmap可以採用 免費的隧道代理。一種較好的選擇是BT Exact,位於https://tb.ipv6.btexact.com/。 此外,還有Hurricane Electric,位於http://ipv6tb.he.net/。6to4隧道是 另一種常用的免費方法。
-A (激烈掃描模式選項)
這個選項啟用額外的高級和高強度選項,目前還未確定代表 的內容。目前,這個選項啟用了作業系統檢測(-O) 和版本掃描(-sV),以後會增加更多的功能。 目的是啟用一個全面的掃描選項集合,不需要用戶記憶大量的 選項。這個選項僅僅啟用功能,不包含用於可能所需要的 時間選項(如-T4)或細節選項(-v)。
–datadir <directoryname> (說明用戶Nmap數據文件位置)
Nmap在運行時從文件中獲得特殊的數據,這些文件有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes和 nmap-os-fingerprints。Nmap首先 在–datadir選項說明的目錄中查找這些文件。 未找到的文件,將在BMAPDIR環境變數說明的目錄中查找。 接下來是用於真正和有效UID的~/.nmap 或Nmap可執行程式碼的位置(僅Win32);然後是是編譯位置, 如/usr/local/share/nmap 或/usr/share/nmap。 Nmap查找的最後一個位置是當前目錄。
–send-eth (使用原乙太網幀發送)
要求Nmap在乙太網(數據鏈路)層而不是IP(網路層)發送 報文。默認方式下,Nmap選擇最適合其運行平台的方式,原套接 字(IP層)是UNIX主機最有效的方式,而乙太網幀最適合Windows操作 系統,因為Microsoft禁用了原套接字支援。在UNIX中,如果沒有其 它選擇(如無乙太網連接),不管是否有該選項,Nmap都使用原IP包。
–send-ip (在原IP層發送)
要求Nmap通過原IP套接字發送報文,而不是低層的以 太網幀。這是–send-eth選項的補充。
–privileged (假定用戶具有全部許可權)
告訴Nmap假定其具有足夠的許可權進行源套接字包發送、 報文捕獲和類似UNIX系統中根用戶操作的許可權。默認狀態下, 如果由getuid()請求的類似操作不為0,Nmap將退出。 –privileged在具有Linux內核性能的類似 系統中使用非常有效,這些系統配置允許非特權用戶可以進行 原報文掃描。需要明確的是,在其它選項之前使用這些需要權 限的選項(SYN掃描、作業系統檢測等)。Nmap-PRIVILEGED變數 設置等價於–privileged選項。
-V; –version (列印版本資訊)
列印Nmap版本號並退出。
-h; –help (列印幫助摘要面)
列印一個短的幫助螢幕,列出大部分常用的 命令選項,這個功能與不帶參數運行Nmap是相同的。
- 運行時的交互
v / V
增加 / 減少細節
d / D
提高 / 降低調試級別
p / P
打開/ 養老報文跟蹤
其它
列印的資訊類似於:
Stats: 0:00:08 elapsed; 111 hosts completed (5 up), 5 undergoing Service Scan
Service scan Timing: About 28.00% done; ETC: 16:18 (0:00:15 remaining)
- 實例
nmap -v scanme.nmap.org
這個選項掃描主機scanme.nmap.org中 所有的保留TCP埠。選項-v啟用細節模式。
nmap -sS -O scanme.nmap.org/24
進行秘密SYN掃描,對象為主機Saznme所在的“C類”網段 的255台主機。同時嘗試確定每台工作主機的作業系統類型。因為進行SYN掃描 和作業系統檢測,這個掃描需要有根許可權。
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
進行主機列舉和TCP掃描,對象為B類188.116網段中255個8位子網。這 個測試用於確定系統是否運行了sshd、DNS、imapd或4564埠。如果這些埠 打開,將使用版本檢測來確定哪種應用在運行。
nmap -v -iR 100000 -P0 -p 80
隨機選擇100000台主機掃描是否運行Web伺服器(80埠)。由起始階段 發送探測報文來確定主機是否工作非常浪費時間,而且只需探測主機的一個埠,因 此使用-P0禁止對主機列表。
nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
掃描4096個IP地址,查找Web伺服器(不ping),將結果以Grep和XML格式保存。
host -l company.com | cut -d -f 4 | nmap -v -iL –
進行DNS區域傳輸,以發現company.com中的主機,然後將IP地址提供給 Nmap。上述命令用於GNU/Linux — 其它系統進行區域傳輸時有不同的命令。