日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nmap官方文档

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nmap官方文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

發到自己主頁,方便查看

?

主機發現


任何網絡探測任務的最初幾個步驟之一就是把一組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 <target>這個簡單的命令掃描主機<target>上的超過 1660個TCP端口。 。許多傳統的端口掃描器只列出所有端口是開放還是關閉的, Nmap的信息粒度比它們要細得多。 它把端口分成六個狀態: open(開放的), closed(關閉的),filtered(被過濾的), unfiltered(未被過濾的), open|filtered(開放或者被過濾的),或者 closed|filtered(關閉或者被過濾的)。

這些狀態并非端口本身的性質,而是描述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(開放或者被過濾的)
當無法確定端口是開放還是被過濾的,Namp就把該端口劃分成 這種狀態。開放的端口不響應就是一個例子。沒有響應也可能意味著報文過濾器丟棄 了探測報文或者它引發的任何響應。因此Nmap無法確定該端口是開放的還是被過濾的。 UDP,IP協議, FIN,Null,和Xmas掃描可能把端口歸入此類。

closed|filtered(關閉或者被過濾的)
該狀態用于Nmap不能確定端口是關閉的還是被過濾的。 它只可能出現在IPID Idle掃描中。

?

端口掃描技術
作為一個修車新手,我可能折騰幾個小時來摸索怎樣把基本工具(錘子,膠帶,扳子等) 用于手頭的任務。當我慘痛地失敗,把我的老爺車拖到一個真正的技師那兒的時候,他總是在他的工具箱里翻來翻去,直到拽出一個完美的工具然后似乎不費吹灰之力搞定它。端口掃描的藝術和這個類似。專家理解成打的掃描技術,選擇最適合的一種 (或者組合)來完成給定的任務。 另一方面,沒有經驗的用戶和剛入門者總是用默認的SYN掃描解決每個問題。既然Nmap是免費的,掌握端口掃描的唯一障礙就是知識。這當然是汽車世界所不能比的,在那里,可能需要高超的技巧才能確定您需要一個壓桿彈簧壓縮機,接著您還得為它付數千美金。

大部分掃描類型只對特權用戶可用。這是因為他們發送接收原始報文,這在Unix系統需要root權限。在Windows上推薦使用administrator賬戶,但是當WinPcap已經被加載到操作系統時,非特權用戶也可以正常使用Nmap。當Namp在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<C>,其中<C> 是個顯眼的字符,通常是第一個字符。一個例外是deprecated FTP bounce掃描(-b)。默認情況下,Nmap執行一個 SYN掃描,但是如果用戶沒有權限發送原始報文(在UNIX上需要root權限)或者如果指定的是IPv6目標,Nmap調用connect()。本節列出的掃描中,非特權用戶只能執行connect()和ftp bounce掃描。

-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 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服務器時,考慮一下系統管理員不太喜歡您這樣濫用他們的服務器。

?

端口說明和掃描順序
除了所有前面討論的掃描方法, Nmap提供選項說明那些端口被掃描以及掃描是隨機還是順序進行。 默認情況下,Nmap用指定的協議對端口1到1024以及nmap-services 文件中列出的更高的端口在掃描。

-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來順序端口掃描。

服務和版本探測
把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 <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 <hostname>)需要1/5秒。而僅僅眨眼的時間,就需要掃描上萬甚至幾十萬的主機。此外,一些特定的掃描選項會明顯增加掃描時間,如UDP掃描和版本檢測。同樣,防火墻配置以及特殊的響應速度限制也會增加時間。Nmap使用了并行算法和許多先進的算法來加速掃描,用戶對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僅將超時時間降至最小值,這個情況是不正常的,需要向namp-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躲避和哄騙
很多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 <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.

輸出
任何安全工具只有在輸出結果時才是有價值的,如果沒有通過組織和 易于理解的方式來表達,復雜的測試和算法幾乎沒有意義。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 <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:\hacking\sco on Windows。

細節和調試選項

-v (提高輸出信息的詳細度)
通過提高詳細度,Nmap可以輸出掃描過程的更多信息。 輸出發現的打開端口,若Nmap認為掃描需要更多時間會顯示估計 的結束時間。這個選項使用兩次,會提供更詳細的信息。這個選 項使用兩次以上不起作用。

大部分的變化僅影響交互式輸出,也有一些影響標準和腳本 小子輸出。其它輸出類型由機器處理,此時Nmap默認提供詳細的信 息,不需要人工干預。然而,其它模式也會有一些變化,省略一些 細節可以減小輸出大小。例如,Grep輸出中的注釋行提供所有掃描 端口列表,但由于這些信息過長,因此只能在細節模式中輸出。

-d [level] (提高或設置調試級別)
當詳細模式也不能為用戶提供足夠的數據時,使用調試可以得到更多的信息。使用細節選項(-v)時,可啟用命令行參數 (-d),多次使用可提高調試級別。也可在-d 后面使用參數設置調試級別。例如,-d9設定級別9。這是最高的級別,將會產生上千行的輸出,除非只對很少的端口和目標進行簡單掃描。

如果Nmap因為Bug而掛起或者對Namp的工作及原理有疑問,調試輸出非常有效。主要是開發人員用這個選項,調試行不具備自我解釋的特點。例如,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選項。

--interactive (在交互模式中啟動)
在交互模式中啟動Nmap,提供交互式的Nmap提示,便于 進行多個掃描(同步或后臺方式)。對于從多用戶系統中掃描 的用戶非常有效,這些用戶常需要測試他們的安全性,但不希望 系統中的其它用戶知道他們掃描哪些系統。使用--interactive 激活這種方式,然后輸入h可 獲得幫助信息。由于需要對正確的shell程序和整個功能非常熟悉, 這個選項很少使用。這個選項包含了一個!操作符,用于執行shell命令, 這是不安裝Nmap setuid root的多個原因之一。

-V; --version (打印版本信息)
打印Nmap版本號并退出。

-h; --help (打印幫助摘要面)
打印一個短的幫助屏幕,列出大部分常用的 命令選項,這個功能與不帶參數運行Nmap是相同的。

?

運行時的交互
Nmap目前還不具有這個功能,本節內容可能會增加或刪除。

在執行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)

?

實例
下面給出一些實例,簡單的、復雜的到深奧的。為更具體,一 些例子使用了實際的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 -- 其它系統進行區域傳輸時有不同的命令。

?

Bugs
和作者一樣,Nmap也不是完美的,但可以通過發送Bug報告甚至編寫 補丁使其更加完善。如果Nmap不能滿足要求,首先從http://www.insecure.org/nmap/ 升級最新版本。如果總問題仍然存在,需要進行調查以確定問題是否 已經被解決。在http://seclists.org/嘗試搜索出錯消息或 瀏覽Nmap-dev檔案,以及仔細閱讀使用手冊。如果問題還是不能解決,發送 Bug報告至<nmap-dev@insecure.org>。在報告中包含所有 有關問題的信息,以及所使用的Nmap版本、操作系統版本。問題報告以及 Nmap的使用問題發送給nmap-dev@insecure.org比直接發送給Gyodor能更好回答。

解決Bug的代碼補丁比Bug報告更受歡迎,在http://www.insecure.org/nmap/data/HACKING 可獲得建立補丁文件的基本指令。補丁可發送給nmap-dev(建議) 或直接發給Fyodor。


?

轉載于:https://blog.51cto.com/katoso/622265

總結

以上是生活随笔為你收集整理的nmap官方文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久99深爱久久99精品 | 亚洲AV第二区国产精品 | 韩国一二三区 | 吞精囗交69激情欧美 | 精品人妻在线视频 | 夜夜爽网站 | v在线| 日韩欧美成人一区二区三区 | 少妇高潮大叫好爽喷水 | 亚洲精品无码成人 | 国产亚洲精品久久 | 国产夫妻在线观看 | 亚洲视频欧美 | 日韩av成人网 | 日日骑| 88久久精品无码一区二区毛片 | 欧美伦理片网站 | 中文字幕在线1 | 在线视频一二区 | 久久午夜无码鲁丝片 | 国产精品久久久久久久免费看 | 久久不卡影院 | 美女福利视频在线 | 久久精品国产欧美亚洲人人爽 | 亚洲黄在线观看 | 欧美精品v国产精品v日韩精品 | 欧美成人天堂 | 好吊色欧美一区二区三区视频 | 黄色免费网站观看 | 国产 第1190页 | 欧美另类在线观看 | 最新国产精品视频 | 亚洲日本精品视频 | 黑人操亚洲女 | 欧美毛片在线 | 尤物一区二区 | 午夜网站视频 | 黄色中文视频 | 福利资源在线观看 | 69pao| 国产youjizz | 美女免费网站 | 精品亚洲成人 | 3d毛片 | 日韩极品在线观看 | 国产 日韩 欧美 制服丝袜 | 亚洲v日韩v综合v精品v | 国产绿帽一区二区三区 | 亚洲操操操 | 玉足调教丨vk24分钟 | 91av俱乐部 | 国产美女在线观看 | 狠狠干免费视频 | 日韩电影中文字幕 | 特级丰满少妇一级aaa爱毛片 | 亚洲激情图 | 成人av免费网站 | 欧美成人激情在线 | 国产富婆一区二区三区 | 国产日韩免费视频 | 被各种性器调教到哭vk | 欧美性生活 | 狗爬女子的视频 | 国产只有精品 | 先锋影音av在线 | 久久92 | 国产日皮视频 | 久久人人爽人人爽人人片av高清 | 国产色综合天天综合网 | 欧美视频一区在线观看 | 男人看的网站 | 日韩大尺度在线观看 | 亚洲免费毛片 | 欧美性精品 | 精品成人久久久 | 亚洲呦呦| 精品少妇白浆小泬60P | 中文字幕第80页 | 亚洲97| 在线不欧美 | 清清草视频 | 91嫩草精品 | 午夜亚洲AV永久无码精品蜜芽 | 国产青草视频在线观看 | 日本少妇全体裸体洗澡 | 久久久精品人妻av一区二区三区 | 人人草人人澡 | 欧美激情一级精品国产 | 91一起草 | 舔花蒂 | 久久免费资源 | 黄网站色视频 | 人人草人人干 | 19禁大尺度做爰无遮挡电影 | 九九精品视频在线 | 国产精品美女久久久久av超清 | 国产精品色呦呦 | 日本少妇三级 | 无码人妻精品一区二区三区66 |