選項概要
當Nmap不帶選項運行時,該選項概要會被輸出,它幫助人們記住最常用的選項,但不能替代本手冊其余深入的檔案,一些晦澀的選項甚至不在這里,
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0-255.0-255.1-254
-iL
-iR
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
-sL: List Scan - simply list targets to scan
-sP: Ping Scan - go no further than determining if host is online
-P0: Treat all hosts as online -- skip host discovery
-PS/PA/PU [portlist]: TCP SYN/ACK or UDP discovery probes to given ports
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-n/-R: Never do DNS resolution/Always resolve [default: sometimes resolve]
SCAN TECHNIQUES:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags
-sI <zombie host[:probeport]>: Idlescan
-sO: IP protocol scan
-b
PORT SPECIFICATION AND SCAN ORDER:
-p
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
-F: Fast - Scan only the ports listed in the nmap-services file)
-r: Scan ports consecutively - don't randomize
SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info
--version-light: Limit to most likely probes for faster identification
--version-all: Try every single probe for version detection
--version-trace: Show detailed version scan activity (for debugging)
OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
-T[0-6]: Set timing template (higher is faster)
--min-hostgroup/max-hostgroup
--min-parallelism/max-parallelism
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout
probe round trip time.
--host-timeout
--scan-delay/--max-scan-delay
FIREWALL/IDS EVASION AND SPOOFING:
-f; --mtu
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e
-g/--source-port
--data-length
--ttl
--spoof-mac <mac address, prefix, or vendor name>: Spoof your MAC address
OUTPUT:
-oN/-oX/-oS/-oG
and Grepable format, respectively, to the given filename.
-oA : Output in the three major formats at once
-v: Increase verbosity level (use twice for more effect)
-d[level]: Set or increase debugging level (Up to 9 is meaningful)
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--no-stylesheet: Prevent Nmap from associating XSL stylesheet w/XML output
MISC:
-6: Enable IPv6 scanning
-A: Enables OS detection and Version detection
--datadir
--send-eth/--send-ip: Send packets using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged
-V: Print version number
-h: Print this help summary page.
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sP 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -P0 -p 80
目標說明
除了選項,所有出現在Nmap命令列上的都被視為對目標主機的說明, 最簡單的情況是指定一個目標IP地址或主機名,
有時候您希望掃描整個網路的相鄰主機,為此,Nmap支持CIDR風格的地址,您可以附加 一個/
CIDR標志位很簡潔但有時候不夠靈活,例如,您也許想要掃描 192.168.0.0/16,但略過任何以.0或者.255 結束的IP地址,因為它們通常是廣播地址, Nmap通過八位位元組地址范圍支持這樣的掃描 您可以用逗號分開的數字或范圍串列為IP地址的每個八位位元組指定它的范圍, 例如,192.168.0-255.1-254 將略過在該范圍內以.0和.255結束的地址, 范圍不必限于最后的8位:0-255.0-255.13.37 將在整個互聯網范圍內掃描所有以13.37結束的地址, 這種大范圍的掃描對互聯網調查研究也許有用,
IPv6地址只能用規范的IPv6地址或主機名指定, CIDR 和八位位元組范圍不支持IPv6,因為它們對于IPv6幾乎沒什么用,
Nmap命令列接受多個主機說明,它們不必是相同型別,命令nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.0-255將和您預期的一樣執行,
雖然目標通常在命令列指定,下列選項也可用來控制目標的選擇:
-iL
從
-iR
對于互聯網范圍內的調查和研究, 您也許想隨機地選擇目標,
--exclude <host1[,host2][,host3],...> (排除主機/網路)
如果在您指定的掃描范圍有一些主機或網路不是您的目標, 那就用該選項加上以逗號分隔的串列排除它們,該串列用正常的Nmap語法, 因此它可以包括主機名,CIDR,八位位元組范圍等等, 當您希望掃描的網路包含執行關鍵任務的服務器,已知的對埠掃描反應強烈的 系統或者被其它人看管的子網時,這也許有用,
--excludefile
這和--exclude 選項的功能一樣,只是所排除的目標是用以 換行符,空格,或者制表符分隔的
主機發現
任何網路探測任務的最初幾個步驟之一就是把一組IP范圍(有時該范圍是巨大的)縮小為 一列活動的或者您感興趣的主機,掃描每個IP的每個埠很慢,通常也沒必要, 當然,什么樣的主機令您感興趣主要依賴于掃描的目的,網管也許只對運行特定服務的 主機感興趣,而從事安全的人士則可能對一個馬桶都感興趣,只要它有IP地址:-),一個系統管理員 也許僅僅使用Ping來定位內網上的主機,而一個外部入侵測驗人員則可能絞盡腦汁用各種方法試圖 突破防火墻的封鎖,
由于主機發現的需求五花八門,Nmap提供了一籮筐的選項來定制您的需求, 主機發現有時候也叫做ping掃描,但它遠遠超越用世人皆知的ping工具 發送簡單的ICMP回聲請求報文,用戶完全可以通過使用串列掃描(-sL)或者 通過關閉ping (-P0)跳過ping的步驟,也可以使用多個埠把TPC SYN/ACK,UDP和ICMP 任意組合起來玩一玩,這些探測的目的是獲得回應以顯示某個IP地址是否是活動的(正在被某 主機或者網路設備使用), 在許多網路上,在給定的時間,往往只有小部分的IP地址是活動的, 這種情況在基于RFC1918的私有地址空間如10.0.0.0/8尤其普遍, 那個網路有16,000,000個IP,但我見過一些使用它的公司連1000臺機器都沒有, 主機發現能夠找到零星分布于IP地址海洋上的那些機器,
如果沒有給出主機發現的選項,Nmap 就發送一個TCP ACK報文到80埠和一個ICMP回聲請求到每臺目標機器, 一個例外是ARP掃描用于局域網上的任何目標機器,對于非特權UNIX shell用戶,使用connect()系統呼叫會發送一個SYN報文而不是ACK 這些默認行為和使用-PA -PE選項的效果相同, 掃描局域網時,這種主機發現一般夠用了,但是對于安全審核,建議進行 更加全面的探測,
-P選項(用于選擇 ping的型別)可以被結合使用, 您可以通過使用不同的TCP埠/標志位和ICMP碼發送許多探測報文 來增加穿透防守嚴密的防火墻的機會,另外要注意的是即使您指定了其它 -P選項,ARP發現(-PR)對于局域網上的 目標而言是默認行為,因為它總是更快更有效,
下列選項控制主機發現,
-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掃描,
埠掃描基礎
雖然Nmap這些年來功能越來越多, 它也是從一個高效的埠掃描器開始的,并且那仍然是它的核心功能, nmap
這些狀態并非埠本身的性質,而是描述Nmap怎樣看待它們,例如, 對于同樣的目標機器的135/tcp埠,從同網路掃描顯示它是開放的,而跨網路作完全相同的掃描則可能顯示它是 filtered(被過濾的),
Nmap所識別的6個埠狀態,
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掃描中,
埠掃描技術
作為一個修車新手,我可能折騰幾個小時來摸索怎樣把基本工具(錘子,膠帶,扳子等) 用于手頭的任務,當我慘痛地失敗,把我的老爺車拖到一個真正的技師那兒的時候 ,他總是在他的工具箱里翻來翻去,直到拽出一個完美的工具然后似乎不費吹灰之力搞定它, 埠掃描的藝術和這個類似,專家理解成打的掃描技術,選擇最適合的一種 (或者組合)來完成給定的 任務, 另一方面,沒有經驗的用戶和剛入門者總是用默認的SYN掃描解決每個問題, 既然Nmap是免費的,掌握埠掃描的唯一障礙就是知識,這當然是汽車世界所不能比的, 在那里,可能需要高超的技巧才能確定您需要一個壓桿彈簧壓碩訓,接著您還得為它付數千美金,
大部分掃描型別只對特權用戶可用, 這是因為他們發送接收原始報文,這在Unix系統需要root權限, 在Windows上推薦使用administrator賬戶,但是當WinPcap已經被加載到作業系統時, 非特權用戶也可以正常使用Nmap,當Nmap在1997年發布時,需要root權限是一個嚴重的 局限,因為很多用戶只有共享的shell賬戶,現在,世界變了,計算機便宜了,更多人擁有互聯網連接 ,桌面UNIX系統 (包括Linux和MAC OS X)很普遍了,Windows版本的Nmap現在也有了,這使它可以運行在更多的桌面上, 由于所有這些原因,用戶不再需要用有限的共享shell賬戶運行Nmap, 這是很幸運的,因為特權選項讓Nmap強大得多也靈活得多,
雖然Nmap努力產生正確的結果,但請記住所有結果都是基于目標機器(或者它們前面的防火墻)回傳的報文的, ,這些主機也許是不值得信任的,它們可能回應以迷惑或誤導Nmap的報文, 更普遍的是非RFC兼容的主機以不正確的方式回應Nmap探測,FIN,Null和Xmas掃描 特別容易遇到這個問題,這些是特定掃描型別的問題,因此我們在個別掃描型別里討論它們,
這一節討論Nmap支持的大約十幾種掃描技術, 一般一次只用一種方法, 除了UDP掃描(-sU)可能和任何一種TCP掃描型別結合使用, 友情提示一下,埠掃描型別的選項格式是-s
-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機(必須運行并且符合一定的標準), 這種奇妙的掃描型別太復雜了,不能在此完全描述,所以我寫一篇非正式的論文, 發布在http://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協議的一個有趣特征(RFC 959) 是支持所謂代理ftp連接,它允許用戶連接到一臺FTP服務器,然后要求檔案送到一臺第三方服務器, 這個特性在很多層次上被濫用,所以許多服務器已經停止支持它了,其中一種就是導致FTP服務器對其它主機埠掃描, 只要請求FTP服務器輪流發送一個檔案到目標主機上的所感興趣的埠, 錯誤訊息會描述埠是開放還是關閉的, 這是繞過防火墻的好方法,因為FTP服務器常常被置于可以訪問比Web主機更多其它內部主機的位置, Nmap用-b選項支持ftp彈跳掃描,引數格式是
當Nmap1997年發布時,這個弱點被廣泛利用,但現在大部分已經被fix了, 脆弱的服務器仍然存在,所以如果其它都失敗了,這也值得一試, 如果您的目標是繞過防火墻,掃描目標網路上的開放的21埠(或者 甚至任何ftp服務,如果您用版本探測掃描所有埠), 然后對每個嘗試彈跳掃描,Nmap會告訴您該主機脆弱與否, 如果您只是試著玩Nmap,您不必(事實上,不應該)限制您自己, 在您隨機地在互聯網上尋找脆弱的FTP服務器時,考慮一下系統管理員不太喜歡您這樣濫用他們的服務器,
埠說明和掃描順序
除了所有前面討論的掃描方法, Nmap提供選項說明那些埠被掃描以及掃描是隨機還是順序進行, 默認情況下,Nmap用指定的協議對埠1到1024以及nmap-services 檔案中列出的更高的埠在掃描,
-p
該選項指明您想掃描的埠,覆寫默認值, 單個埠和用連字符表示的埠范圍(如 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來順序埠掃描,
服務和版本探測
把Nmap指向一個遠程機器,它可能告訴您 埠25/tcp,80/tcp,和53/udp是開放的,使用包含大約2,200個著名的服務的 nmap-services資料庫, Nmap可以報告那些埠可能分別對應于一個郵件服務器 (SMTP),web服務器(HTTP),和域名服務器(DNS), 這種查詢通常是正確的 -- 事實上,絕大多數在TCP埠25監聽的守護行程是郵件 服務器,然而,您不應該把賭注押在這上面! 人們完全可以在一些奇怪的埠上運行服務,
即使Nmap是對的,假設運行服務的確實是 SMTP,HTTP和DNS,那也不是特別多的資訊, 當為您的公司或者客戶作安全評估(或者甚至簡單的網路明細清單)時, 您確實想知道正在運行什么郵件和域名服務器以及它們的版本, 有一個精確的版本號對了解服務器有什么漏洞有巨大幫助, 版本探測可以幫您獲得該資訊,
在用某種其它型別的掃描方法發現TCP 和/或者UDP埠后, 版本探測會詢問這些埠,確定到底什么服務正在運行, nmap-service-probes 資料庫包含查詢不同服務的探測報文 和決議識別回應的匹配運算式, Nmap試圖確定服務協議 (如 ftp,ssh,telnet,http),應用程式名(如ISC Bind,Apache httpd,Solaris telnetd),版本號, 主機名,設備型別(如 列印機,路由器),作業系統家族 (如Windows,Linux)以及其它的細節,如 如是否可以連接X server,SSH協議版本 ,或者KaZaA用戶名),當然,并非所有服務都提供所有這些資訊, 如果Nmap被編譯成支持OpenSSL, 它將連接到SSL服務器,推測什么服務在加密層后面監聽, 當發現RPC服務時, Nmap RPC grinder (-sR)會自動被用于確定RPC程式和它的版本號, 如果在掃描某個UDP埠后仍然無法確定該埠是開放的還是被過濾的,那么該埠狀態就 被標記為open|filtered, 版本探測將試圖從這些埠引發一個回應(就像它對開放埠做的一樣), 如果成功,就把狀態改為開放, open|filtered TCP埠用同樣的方法對待, 注意Nmap -A選項在其它情況下打開版本探測, 有一篇關于版本探測的原理,使用和定制的文章在 http://www.insecure.org/nmap/vscan/,
當Nmap從某個服務收到回應,但不能在資料庫中找到匹配時, 它就列印一個特殊的fingerprint和一個URL給您提交,如果您確實知道什么服務運行在埠, 請花兩分鐘提交您的發現,讓每個人受益,由于這些提交, Nmap有350種以上協議如smtp,ftp,http等的大約3,000條模式匹配,
用下列的選項打開和控制版本探測,
-sV (版本探測)
打開版本探測, 您也可以用-A同時打開作業系統探測和版本探測,
--allports (不為版本探測排除任何埠)
默認情況下,Nmap版本探測會跳過9100 TCP埠,因為一些列印機簡單地列印送到該埠的 任何資料,這回導致數十頁HTTP get請求,二進制 SSL會話請求等等被列印出來,這一行為可以通過修改或洗掉nmap-service-probes 中的Exclude指示符改變, 您也可以不理會任何Exclude指示符,指定--allports掃描所有埠
--version-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很少被需要,
作業系統探測
Nmap最著名的功能之一是用TCP/IP協議堆疊fingerprinting進行遠程作業系統探測, Nmap發送一系列TCP和UDP報文到遠程主機,檢查回應中的每一個位元, 在進行一打測驗如TCP ISN采樣,TCP選項支持和排序,IPID采樣,和初始視窗大小檢查之后, Nmap把結果和資料庫nmap-os-fingerprints中超過 1500個已知的作業系統的fingerprints進行比較,如果有匹配,就列印出作業系統的詳細資訊, 每個fingerprint包括一個自由格式的關于OS的描述文本, 和一個分類資訊,它提供供應商名稱(如Sun),下面的作業系統(如Solaris),OS版本(如10), 和設備型別(通用設備,路由器,switch,游戲控制臺, 等),
如果Nmap不能猜出作業系統,并且有些好的已知條件(如 至少發現了一個開放埠和一個關閉埠),Nmap會提供一個 URL,如果您確知運行的作業系統,您可以把fingerprint提交到那個URL, 這樣您就擴大了Nmap的作業系統知識庫,從而讓每個Nmap用戶都受益,
作業系統檢測可以進行其它一些測驗,這些測驗可以利用處理 程序中收集到的資訊,例如運行時間檢測,使用TCP時間戳選項(RFC 1323) 來估計主機上次重啟的時間,這僅適用于提供這類資訊的主機,另一種 是TCP序列號預測分類,用于測驗針對遠程主機建立一個偽造的TCP連接 的可能難度,這對于利用基于源IP地址的可信關系(rlogin,防火墻過濾等) 或者隱含源地址的攻擊非常重要,這一類哄騙攻擊現在很少見,但一些 主機仍然存在這方面的漏洞,實際的難度值基于統計采樣,因此可能會有 一些波動,通常采用英國的分類較好,如“worthy challenge”或者 “trivial joke”,在詳細模式(-v)下只以 普通的方式輸出,如果同時使用-O,還報告IPID序列產生號, 很多主機的序列號是“增加”類別,即在每個發送包的IP頭中 增加ID域值, 這對一些先進的資訊收集和哄騙攻擊來說是個漏洞,
http://nmap.org/book/osdetect.html 檔案使用多種語言描述了版本檢測的方式、使用和定制,
采用下列選項啟用和控制作業系統檢測:
-O (啟用作業系統檢測)
也可以使用-A來同時啟用作業系統檢測和版本檢測,
--osscan-limit (針對指定的目標進行作業系統檢測)
如果發現一個打開和關閉的TCP埠時,作業系統檢測會更有效, 采用這個選項,Nmap只對滿足這個條件的主機進行作業系統檢測,這樣可以 節約時間,特別在使用-P0掃描多個主機時,這個選項僅在使用 -O或-A 進行作業系統檢測時起作用,
--osscan-guess; --fuzzy (推測作業系統檢測結果)
當Nmap無法確定所檢測的作業系統時,會盡可能地提供最相近的匹配,Nmap默認 進行這種匹配,使用上述任一個選項使得Nmap的推測更加有效,
時間和性能
Nmap開發的最高優先級是性能,在本地網路對一個主機的默認掃描(nmap
改善掃描時間的技術有:忽略非關鍵的檢測、升級最新版本的Nmap(性能增強不斷改善), 優化時間引數也會帶來實質性的變化,這些引數如下,
--min-hostgroup
Nmap具有并行掃描多主機埠或版本的能力,Nmap將多個目標IP地址 空間分成組,然后在同一時間對一個組進行掃描,通常,大的組更有效,缺 點是只有當整個組掃描結束后才會提供主機的掃描結果,如果組的大小定義 為50,則只有當前50個主機掃描結束后才能得到報告(詳細模式中的補充資訊 除外),
默認方式下,Nmap采取折衷的方法,開始掃描時的組較小, 最小為5,這樣便于盡快產生結果;隨后增長組的大小,最大為1024,確切的 大小依賴于所給定的選項,為保證效率,針對UDP或少量埠的TCP掃描,Nmap 使用大的組,
--max-hostgroup選項用于說明使用最大的組,Nmap不 會超出這個大小,--min-hostgroup選項說明最小的組,Nmap 會保持組大于這個值,如果在指定的介面上沒有足夠的目標主機來滿足所 指定的最小值,Nmap可能會采用比所指定的值小的組,這兩個引數雖然很少使用, 但都用于保持組的大小在一個指定的范圍之內,
這些選項的主要用途是說明一個最小組的大小,使得整個掃描更加快速,通常 選擇256來掃描C類網段,對于埠數較多的掃描,超出該值沒有意義,對于 埠數較少的掃描,2048或更大的組大小是有幫助的,
--min-parallelism
這些選項控制用于主機組的探測報文數量,可用于埠掃描和主機發現,默認狀態下, Nmap基于網路性能計算一個理想的并行度,這個值經常改變,如果報文被丟棄, Nmap降低速度,探測報文數量減少,隨著網路性能的改善,理想的探測報文數量會緩慢增加, 這些選項確定這個變數的大小范圍,默認狀態下,當網路不可靠時,理想的并行度值 可能為1,在好的條件下,可能會增長至幾百,
最常見的應用是--min-parallelism值大于1,以加快 性能不佳的主機或網路的掃描,這個選項具有風險,如果過高則影響準確度,同時 也會降低Nmap基于網路條件動態控制并行度的能力,這個值設為10較為合適, 這個值的調整往往作為最后的手段,
--max-parallelism選項通常設為1,以防止Nmap在同一時間 向主機發送多個探測報文,和選擇--scan-delay同時使用非常有用,雖然 這個選項本身的用途已經很好,
--min-rtt-timeout
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
由于性能較差或不可靠的網路硬體或軟體、帶寬限制、嚴格的防火墻等原因, 一些主機需要很長的時間掃描,這些極少數的主機掃描往往占 據了大部分的掃描時間,因此,最好的辦法是減少時間消耗并且忽略這些主機,使用 --host-timeout選項來說明等待的時間(毫秒),通常使用1800000 來保證Nmap不會在單個主機上使用超過半小時的時間,需要注意的是,Nmap在這半小時中可以 同時掃描其它主機,因此并不是完全放棄掃描,超時的主機被忽略,因此也沒有針對該主機的 埠表、作業系統檢測或版本檢測結果的輸出,
--scan-delay
這個選項用于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躲避和哄騙
很多Internet先驅們設想了一個全球開放的網路,使用全域的IP 地址空間,使得任何兩個節點之間都有虛擬連接,這使得主機間可以作為真 正的對等體,相互間提供服務和獲取資訊,人們可以在作業時訪問家里所 有的系統、調節空調溫度、為提前到來的客人開門,隨后,這些全球連接的設想 受到了地址空間短缺和安全考慮的限制,在90年代早期,各種機構開始部 署防火墻來實作減少連接的目的,大型網路通過代理、NAT和包過濾器與未 過濾的Internet隔離,不受限的資訊流被嚴格控制的可信通信通道資訊流所替代,
類似防火墻的網路隔離使得對網路的搜索更加困難,隨意的搜 索變得不再簡單,然而,Nmap提供了很多特性用于理解這些復雜的網 絡,并且檢驗這些過濾器是否正常作業,此外,Nmap提供了繞過某些較弱的 防范機制的手段,檢驗網路安全狀態最有效的方法之一是嘗試哄騙網路,將 自己想象成一個攻擊者,使用本節提供的技術來攻擊自己的網路,如使用FTP bounce掃描、Idle掃描、分片攻擊或嘗試穿透自己的代理,
除限止網路的行為外,使用入侵檢測系統(IDS)的公司也不斷增加,由于Nmap 常用于攻擊前期的掃描,因此所有主流的IDS都包含了檢測Nmap掃描的規則, 現在,這些產品變形為入侵預防系統(IPS),可以主 動地阻止可疑的惡意行為,不幸的是,網路管理員和IDS廠商通過分析報文 來檢測惡意行為是一個艱苦的作業,有耐心和技術的攻擊者,在特定Nmap選項 的幫助下,常常可以不被IDS檢測到,同時,管理員必須應付大量的誤報結果, 正常的行為被誤判而被改變或阻止,
有時,人們建議Nmap不應該提供躲閉防火墻規則或哄騙IDS的功能, 這些功能可能會被攻擊者濫用,然而管理員卻可以利用這些功能來增強安全性, 實際上,攻擊的方法仍可被攻擊者利用,他們可以發現其它工具或Nmap的補丁程 序,同時,管理員發現攻擊者的作業更加困難,相比較采取措施來預防執 行FTP Bounce攻擊的工具而言,部署先進的、打過補丁的FTP服務器更 加有效,
Nmap不提供檢測和破壞防火墻及IDS系統的魔彈(或Nmap選項),它使用 的是技術和經驗,這超出了本參考手冊的范圍,下面描述了相關的選項和 完成的作業,
-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
告訴Nmap使用哪個介面發送和接收報文,Nmap可以進行自動檢測, 如果檢測不出會給出提示,
--source-port
僅依賴于源埠號就信任資料流是一種常見的錯誤配置,這個問題非常 好理解,例如一個管理員部署了一個新的防火墻,但招來了很多用戶的不滿,因為 他們的應用停止作業了,可能是由于外部的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
正常情況下,Nmap發送最少的報文,只含一個包頭,因此TCP包通常 是40位元組,ICMP ECHO請求只有28位元組,這個選項告訴Nmap在發送的報文上 附加指定數量的隨機位元組,作業系統檢測(-O)包不受影響, 但大部分ping和埠掃描包受影響,這會使處理變慢,但對掃描的影響較小,
--ttl
設定IPv4報文的time-to-live域為指定的值,
--randomize-hosts (對目標主機的順序隨機排列)
告訴Nmap在掃描主機前對每個組中的主機隨機排列,最多可達 8096個主機,這會使得掃描針對不同的網路監控系統來說變得不是很 明顯,特別是配合值較小的時間選項時更有效,如果需要對一個較大 的組進行隨機排列,需要增大nmap.h檔案中 PING-GROUP-SZ的值,并重新編譯,另一種方法是使用串列掃描 (-sL -n -oN
--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.
輸出
任何安全工具只有在輸出結果時才是有價值的,如果沒有通過組織和 易于理解的方式來表達,復雜的測驗和演算法幾乎沒有意義,Nmap提供了一些 方式供用戶和其它軟體使用,實際上,沒有一種方式可以使所有人滿意, 因此Nmap提供了一些格式,包含了方便直接查看的互動方式和方便軟體處理 的XML格式,
除了提供輸出格式外,Nmap還提供了選項來控制輸出的細節以及除錯 資訊,輸出內容可發送給標準輸出或命名檔案,可以追加或覆寫,輸出檔案還可 被用于繼續中斷的掃描,
Nmap提供5種不同的輸出格式,默認的方式是interactive output, 發送給標準輸出(stdout),normal output方式類似于 interactive,但顯示較少的運行時間資訊 和告警資訊,這是由于這些資訊是在掃描完全結束后用于分析,而不是互動式的,
XML輸出是最重要的輸出型別,可被轉換成HTML,對于程式處理非常方便, 如用于Nmap圖形用戶介面或匯入資料庫,
另兩種輸出型別比較簡單,grepable output格式,在一行中包含目標主機最多的資訊;sCRiPt KiDDi3 0utPUt 格式,用于考慮自己的用戶 |<-r4d,
互動式輸出是默認方式,沒有相應的命令列選項,其它四種格式選項 使用相同的語法,采用一個引數,即存放結果的檔案名,多種格式可同時 使用,但一種格式只能使用一次,例如,在標準輸出用于查看的同時,可將結 果保存到XML檔案用于程式分析,這時可以使用選項-oX myscan.xml -oN myscan.nmap, 為便于描述的簡化,本章使用類似于myscan.xml的簡單檔案名, 建議采用更具有描述性的檔案名,檔案名的選擇與個人喜好有關,建議增加 掃描日期以及一到兩個單詞來描述,并放置于一個目錄中,
在將結果輸出到檔案的同時,Nmap仍將結果發送給標準輸出,例如, 命令nmap -oX myscan.xml target將 輸出XML至myscan.xml,并在stdout 上列印相同的互動式結果,而此時-oX選項沒有采用,可以 使用連字符作為選項來改變,這使得Nmap禁止互動式輸出,而是將結果列印到 所指定的標準輸出流中,因此,命令nmap -oX - target只 輸出XML至標準輸出stdout,嚴重錯誤仍然是輸出到標準錯誤流stderr中,
與其它Nmap引數不同,日志檔案選項的空格(如-oX)和 檔案名或連字符是必需的,如果省略了標記,例如-oG-或 -oXscan.xml,Nmap的向后兼容特點將建立 標準格式的輸出檔案,相應的檔案名為G-和 Xscan.xml,
Nmap還提供了控制掃描細節以及輸出檔案的添加或覆寫的選項,這些選項 如下所述,
Nmap輸出格式
-oN
要求將標準輸出直接寫入指定 的檔案,如上所述,這個格式與互動式輸出 略有不同,
-oX
要求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
腳本小子輸出類似于互動工具輸出,這是一個事后處理,適合于 'l33t HaXXorZ, 由于原來全都是大寫的Nmap輸出,這個選項和腳本小子開了玩笑,看上去似乎是為了 “幫助他們”,
-oG
這種方式最后介紹,因為不建議使用,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 (輸出至所有格式)
為使用方便,利用-oA選項 可將掃描結果以標準格式、XML格式和Grep格式一次性輸出,分別存放在 .nmap,.xml和 .gnmap檔案中,也可以在檔案名前 指定目錄名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:\hacking\sco 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
一些擴展的Nmap運行需要很長的時間 -- 以天計算,這類掃描 往往不會結束,可以進行一些限制,禁止Nmap在作業時間運行,導致 網路中斷、運行Nmap的主機計劃或非計劃地重啟、或者Nmap自己中斷, 運行Nmap的管理員可以因其它原因取消運行,按下ctrl-C 即可,從頭開始啟動掃描可能令人不快,幸運的是,如果標準掃描 (-oN)或Grep掃描(-oG)日志 被保留,用戶可以要求Nmap恢復終止的掃描,只需要簡單地使用選項 --resume并說明標準/Grep掃描輸出檔案,不允許 使用其它引數,Nmap會決議輸出檔案并使用原來的格式輸出,使用方式 如nmap --resume
--stylesheet
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
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選項,
--interactive (在互動模式中啟動)
在互動模式中啟動Nmap,提供互動式的Nmap提示,便于 進行多個掃描(同步或后臺方式),對于從多用戶系統中掃描 的用戶非常有效,這些用戶常需要測驗他們的安全性,但不希望 系統中的其它用戶知道他們掃描哪些系統,使用--interactive 激活這種方式,然后輸入h可 獲得幫助資訊,由于需要對正確的shell程式和整個功能非常熟悉, 這個選項很少使用,這個選項包含了一個!運算子,用于執行shell命令, 這是不安裝Nmap setuid root的多個原因之一,
-V; --version (列印版本資訊)
列印Nmap版本號并退出,
-h; --help (列印幫助摘要面)
列印一個短的幫助螢屏,列出大部分常用的 命令選項,這個功能與不帶引數運行Nmap是相同的,
實體
下面給出一些實體,簡單的、復雜的到深奧的,為更具體,一 些例子使用了實際的IP地址和域名,在這些位置,可以使用你自己網路 的地址/域名替換,注意,掃描其它網路不一定合法,一些網路管理員不愿看到 未申請過的掃描,會產生報怨,因此,先獲得允許是最好的辦法,
如果是為了測驗,scanme.nmap.org 允許被掃描,但僅允許使用Nmap掃描并禁止測驗漏洞或進行DoS攻擊,為 保證帶寬,對該主機的掃描每天不要超過12次,如果這個免費掃描服務被 濫用,系統將崩潰而且Nmap將報告決議 指定的主機名/IP地址失敗:scanme.nmap.org,這些免 費掃描要求也適用于scanme2.nmap.org、 scanme3.nmap.org等等,雖然這些 主機目前還不存在,
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 -- 其它系統進行區域傳輸時有不同的命令,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445500.html
標籤:其他
