標籤:request ip地址
一、掃描思路
二、常見用法
1、使用nslookup 解析出網域名稱的IP地址
2、使用 nmap -sL 查詢該IP網段中包含的ip地址(不檢測存活狀態,僅列表)
3、使用nmap -sn 查詢網段中關注主機或者整個網段的IP存活狀態
nmap -sn
nmap針對區域網路和廣域網路(會根據源目的是否在同一網段進行判斷)有兩種不同的掃描方式
當目標主機與源主機不在同一網段時:
Nmap會發送四種不同類型的資料包來探測目標主機是否線上。
1) ICMP echo request
2) a TCP SYN packet to port 443
3) a TCP ACK packet to port 80
4) an ICMP timestamp request
舉例:以掃描某個公網IP為例
nmap -sn IP
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/58/7A/wKiom1SyTPDi0qFgAAEj-hp6hYA982.jpg" title="2015-01-11 18:13:35的螢幕.png" alt="wKiom1SyTPDi0qFgAAEj-hp6hYA982.jpg" />
當目標主機與源主機在同一網段時
nmap -sn 192.168.1.103
Nmap 將通過發送arp請求,來檢查ip是否線上
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/58/77/wKioL1SyTnSh3AdtAACaEJVn9ho932.jpg" title="2015-01-11 18:16:01的螢幕.png" alt="wKioL1SyTnSh3AdtAACaEJVn9ho932.jpg" />
4、掃描感興趣主機的連接埠
需要注意,nmap在連接埠掃描前,首先會自動對ip的存活狀態掃描,如果發現目標ip不存活,將不再進行連接埠掃描。在進行ip存活掃描時(同-sn時的掃描,不過是nmap自動的),會發送2次掃描,以判斷ip的存活。
下面是對未存活ip的掃描抓包,使用的nmap -sS -p 80 [ip] 來掃描80連接埠,但實際nmap先進行了ip存活的掃描
nmap -sS -p 80 [ip] #掃描TCP 80連接埠
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/58/7A/wKiom1SyVHuz54I1AAIbdzZnVQQ682.jpg" title="2015-01-11 18:46:04的螢幕.png" alt="wKiom1SyVHuz54I1AAIbdzZnVQQ682.jpg" />
這是返回的結果,針對這種未存活的ip,nmap建議 使用 -Pn ,即不進行主機存活判斷,直接掃描連接埠。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/58/77/wKioL1SyVbbC8LGEAAENMJCqGOM511.jpg" title="2015-01-11 18:47:35的螢幕.png" alt="wKioL1SyVbbC8LGEAAENMJCqGOM511.jpg" />
是使用-Pn 選項來掃描80連接埠
nmap -Pn -sS -p 80 113.11.*.*
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/58/7A/wKiom1SyVuDxjN-9AAE39qn6sys024.jpg" title="2015-01-11 18:56:18的螢幕.png" alt="wKiom1SyVuDxjN-9AAE39qn6sys024.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/58/77/wKioL1SyV9LyURtSAABfkcm4D2U042.jpg" title="2015-01-11 18:57:05的螢幕.png" alt="wKioL1SyV9LyURtSAABfkcm4D2U042.jpg" />
從nmap的掃描結果看,該連接埠被過濾,即不確定是否存活,但該主機是存活的。
但從抓包來看,該主機沒有任何回包,說明該連接埠被過濾或未開啟,同時,也無該ip的其他回包資訊,所以,判斷nmap的主機存活結論是錯誤的(個人認為)。從抓包來看,nmap當未受到資料包時,預設都發送2次請求包。
nmap連接埠掃描結果的說明:
Nmap通過探測將連接埠劃分為6個狀態:open: 連接埠是開放的。closed: 連接埠是關閉的。filtered: 連接埠被防火牆IDS/IPS屏蔽,無法確定其狀態。unfiltered: 連接埠沒有被屏蔽,但是否開放需要進一步確定。open|filtered: 連接埠是開放的或被屏蔽。closed|filtered : 連接埠是關閉的或被屏蔽。
nmap常見的連接埠掃描方式有以下幾種:
-P 指定連接埠號碼,如果不指定連接埠,預設是掃描1000個常用的tcp或udp連接埠(根據掃描項) -F 快速模式,當不指定連接埠時,僅掃描TOP 100的連接埠 -sS TCP連接埠掃描,使用SYN 方式掃描,不建立TCP串連 -sT TCP連接埠掃描,tcp connect 通過3次握手,建立tcp串連 -sU UDP連接埠掃描 其他連接埠掃描方式: -sA/sW/sM:指定使用 ACK/Window/Maimon scans的方式來對目標主機進行掃描。 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協助探測對方的TCP連接埠狀態。 --scanflags <flags>: 定製TCP包的flags。 -sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標主機(前提需要找到合適的zombie host) -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議連接埠的開放的情況。 -sO: 使用IP protocol 掃描確定目標機支援的協議類型。 -b <FTP relay host>: 使用FTP bounce scan掃描方式
連接埠掃描原理
TCP SYN scanning
這是Nmap預設的掃描方式,通常被稱作半開放掃描(Half-open scanning)。該方式發送SYN到目標連接埠,如果收到SYN/ACK回複,那麼判斷連接埠是開放的;如果收到RST包,說明該連接埠是關閉的。如果沒有收到回複,那麼判斷該連接埠被屏蔽(Filtered)。因為該方式僅發送SYN包對目標主機的特定連接埠,但不建立的完整的TCP串連,所以相對比較隱蔽,而且效率比較高,適用範圍廣。
TCP SYN探測到連接埠關閉:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106252_9646.jpg" style="border:none;" />
TCP SYN探測到連接埠開放:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106266_3589.jpg" style="border:none;" />
TCP connect scanning
TCP connect方式使用系統網路API connect向目標主機的連接埠發起串連,如果無法串連,說明該連接埠關閉。該方式掃描速度比較慢,而且由於建立完整的TCP串連會在目標機上留下記錄資訊,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮選擇的方式。
TCP connect探測到連接埠關閉:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106280_8116.jpg" style="border:none;" />
TCP connect探測到連接埠開放:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106296_3110.jpg" style="border:none;" />
TCP ACK scanning
向目標主機的連接埠發送ACK包,如果收到RST包,說明該連接埠沒有被防火牆屏蔽;沒有收到RST包,說明被屏蔽。該方式只能用於確定防火牆是否屏蔽某個連接埠,可以輔助TCP SYN的方式來判斷目標主機防火牆的狀況。
TCP ACK探測到連接埠被屏蔽:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106327_8291.jpg" style="border:none;" />
TCP ACK探測到連接埠未被屏蔽:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106346_8325.jpg" style="border:none;" />
TCP FIN/Xmas/NULL scanning
這三種掃描方式被稱為秘密掃描(Stealthy Scan),因為相對比較隱蔽。FIN掃描向目標主機的連接埠發送的TCP FIN包或Xmas tree包/Null包,如果收到對方RST回複包,那麼說明該連接埠是關閉的;沒有收到RST包說明連接埠可能是開放的或被屏蔽的(open|filtered)。
其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有flags都為0的TCP包。
TCP FIN探測到主機連接埠是關閉的:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106363_1149.jpg" style="border:none;" />
TCP FIN探測到主機連接埠是開放或屏蔽的:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106375_7898.jpg" style="border:none;" />
UDP scanning
UDP掃描方式用於判斷UDP連接埠的情況。向目標主機的UDP連接埠發送探測包,如果收到回複“ICMP port unreachable”就說明該連接埠是關閉的;如果沒有收到回複,那說明UDP連接埠可能是開放的或屏蔽的。因此,通過反向排除法的方式來斷定哪些UDP連接埠是可能出於開放狀態。
UDP連接埠關閉:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106392_8631.jpg" style="border:none;" />
UDP連接埠開放或被屏蔽:
650) this.width=650;" src="http://my.csdn.net/uploads/201207/01/1341106404_7106.jpg" style="border:none;" />
隱藏自身IP的掃描
使用idle scan方式藉助殭屍主機(zombie host,也被稱為idle host,該主機處於空閑狀態並且它的IPID方式為遞增。詳細實現原理參見:http://nmap.org/book/idlescan.html)來掃描目標在主機,達到隱蔽自己的目的;
或者使用FTP bounce scan,藉助FTP允許的代理服務掃描其他的主機,同樣達到隱藏自己的身份的目的。
5、版本偵測
版本偵測,用於確定目標主機開放連接埠上啟動並執行具體的應用程式及版本資訊。
Nmap提供的版本偵測具有如下的優點:
高速。並行地進行通訊端操作,實現一組高效的探測匹配定義文法。
儘可能地確定應用程式名稱字與版本名字。
支援TCP/UDP協議,支援文字格式設定與二進位格式。
支援多種平台服務的偵測,包括Linux/Windows/Mac OS/FreeBSD等系統。
如果檢測到SSL,會調用openSSL繼續偵測運行在SSL上的具體協議(如HTTPS/POP3S/IMAPS)。
如果檢測到SunRPC服務,那麼會調用brute-force RPC grinder進一步確定RPC程式編號、名字、版本號碼。
支援完整的IPv6功能,包括TCP/UDP,基於TCP的SSL。
通用平台枚舉功能(CPE)
廣泛的應用程式資料庫(nmap-services-probes)。目前Nmap可以識別幾千種服務的簽名,包含了180多種不同的協議。
5.1 版本偵測原理
簡要的介紹版本的偵測原理。
版本偵測主要分為以下幾個步驟:
首先檢查open與open|filtered狀態的連接埠是否在排除連接埠列表內。如果在排除清單,將該連接埠剔除。
如果是TCP連接埠,嘗試建立TCP串連。嘗試等待片刻(通常6秒或更多,具體時間可以查詢檔案nmap-services-probes中Probe TCP NULL q||對應的totalwaitms)。通常在等待時間內,會接收到目標機發送的“WelcomeBanner”資訊。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。尋找對應應用程式的名字與版本資訊。
如果通過“Welcome Banner”無法確定應用程式版本,那麼nmap再嘗試發送其他的探測包(即從nmap-services-probes中挑選合適的probe),將probe得到回複包與資料庫中的簽名進行對比。如果反覆探測都無法得出具體應用,那麼列印出應用返回報文,讓使用者自行進一步判定。
如果是UDP連接埠,那麼直接使用nmap-services-probes中探測包進行探測匹配。根據結果對比分析出UDP應用服務類型。
如果探測到應用程式是SSL,那麼調用openSSL進一步的偵查運行在SSL之上的具體的應用類型。
如果探測到應用程式是SunRPC,那麼調用brute-force RPC grinder進一步探測具體服務。
5.2 版本偵測的用法
版本偵測方面的命令列選項比較簡單
-sV: 指定讓Nmap進行版本偵測--version-intensity <level>: 指定版本偵測強度(0-9),預設為7。數值越高,探測出的服務越準確,但是已耗用時間會比較長。--version-light: 指定使用輕量偵測方式 (intensity 2)--version-all: 嘗試使用所有的probes進行偵測 (intensity 9)--version-trace: 顯示出詳細的版本偵測過程資訊。
下面以掃描80連接埠的版本為例,顯示snmp的掃描結果和抓包結果
snmp -sV -p 80 113.11.*.* #指定掃描80連接埠
從抓包可以看出,在未指定 -Pn 參數時,預設限制性的ip存活性檢測,只有當確認主機存活後才進行版本檢測。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/58/7C/wKiom1SyamXSR0VCAAHlPHpC2ZU724.jpg" title="2015-01-11 20:19:25的螢幕.png" alt="wKiom1SyamXSR0VCAAHlPHpC2ZU724.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/58/79/wKioL1Syau-RSckpAAS2NVWHrO4984.jpg" title="2015-01-11 20:17:41的螢幕.png" alt="wKioL1Syau-RSckpAAS2NVWHrO4984.jpg" />
使用snmp -sV 113.11.*.* 時,預設檢查存活狀態,根據存活狀態再掃描TCP常見的1000連接埠,根據連接埠狀態再掃描版本(在http版本確認中,首先建立了tcp串連,然後關閉tcp串連,再建立串連3次握手,並發出get請求後進行4次揮手)
nmap軟體使用思路及常見用法