nmap參數原理抓包分析
實驗環境:
Nmap7.70
實驗步驟:
1.主機發現
2.端口掃描
3.服務版本探測
一、主機發現
主機發現,如果主機活躍,掃描1000個常用的tcp端口
1、Nmap ip #預設進行主機發現、端口掃描、服務版本探測等
1.1先以一個不存在的ip為例:nmap 1.2.3.4 抓包分析
可以看到如果沒有給出主機發現選項,nmap預設使用以下四種方式來确認目标機器是否活躍(隻有以下四種方式任意一個得到目标的響應就可以說明目标主機存活)
1.nmap就發送一個ICMP 回聲請求到每台目标機器,
2.TCP ACK 封包到80端口,
3.TCP ACK 封包到443端口,
4.還有一個基于時間的ICMP請求到每台目标機器

從上圖可以看到,nmap不帶參數預設使用上面的四種方式來确定目标機器是否存活
1.2再以一個存在的ip為例:nmap 121.194.14.84 抓包分析
可以看到獲得掃描成功的結果
分析抓包的資料,可以看到目标機器對ICMP回應要求響應了,對基于時間的icmp請求響應了,對TCP ACK 封包到80端口和TCP ACK 封包到443端口響應了
得到主機存活之後,就開始了掃描1000個常用的端口(預設掃描的端口)
2、nmap -sP ip #ping掃描 隻主機發現 #須注意,目标必須是公網ip,區域網路ip本參數無效,因為區域網路掃描時,預設使用ARP掃描目标(-PR參數)
該選項告訴Nmap僅僅進行ping掃描 (主機發現),然後列印出對掃描做出響應的那些主機 。 沒有進一步的測試 (如端口掃描或者作業系統探測)
2.1以一個存在的IP為例: nmap -sP 121.194.14.84 抓包分析
可以看到隻進行主機發現,沒有進一步的測試
可以看到抓取的資料包隻有關于主機發現的資料,得到目标主機存活之後也沒有進行下一步測試(因為nmap -sP參數的限制)
要注意的是即使 您指定了其它 -P*選項,ARP發現(-PR)對于區域網路上的 目标而言是預設行為,因為它總是更快更有效。
2.2下面以nmap -sP 192.168.43.200 為例掃描一個區域網路IP,抓包分析 #注意目标IP是區域網路IP
下圖可以看到,區域網路掃描可以獲得目标主機的MAC位址
可以看到下圖的抓包,雖然使用的是-sP參數,但因為是在區域網路内掃描目标IP,預設使用ARP掃描
3.nmap -P0 ip #無ping 跳過主機發現 把目标ip看成是活躍的直接進行高強度掃描(端口掃描、服務版本探測或作業系統版本探測等)
該選項完全跳過 Nmap發現階段。通常nmap在進行高強度的掃描時用它确定正在運作的機器
3.1以一個存在的IP為例: nmap -sP 121.194.14.84 抓包分析
運作的結果如下:
通過檢視下圖抓取的資料包,可以看到沒有進行主機發現,直接進行高強度的掃描
4.nmap -PS ip #TCP SYN 掃描 主機發現隻連接配接目标的tcp 80端口,不使用ICMP
隻要目标主機響應TCP SYN 就說明目标主機是活躍的,無論響應的是哪種資料包(RST或者SYN/ACK)
該選項發送一個設定了 SYN 标志位的空 TCP 封包, 預設目的端口為80, 但不同的端口也可以作為選項指定。甚至可以指定一個以逗号分隔的端口清單(如 -PS22,23,25,80,113,1050,35000),在這種情況下,每個端口會被并發地掃描。
SYN 标志位告訴對方您正試圖建立一個連接配接。通常目标端口是關閉的,一個RST(複位) 包會發回來。 如果碰巧端口是開放的,目标會進行 TCP 三步握手的第二步,回應 一個 SYN/ACKTCP封包。然後運作 Nmap 的機器則會扼殺這個正在建立的連接配接,發送一個 RST 而非 ACK封包,否則,一個完全的連接配接将會建立。 RST 封包是運作 Nmap 的機器而不是 Nmap 本身響應的,因為它對收到 的 SYN/ACK感到很意外。
Nmap 并不關心端口開放還是關閉。 無論 RST 還是 SYN/ACK響應都告訴 Nmap 該主機正 在運作。
4.1以一個存在的IP為例: nmap -PS 121.194.14.84 抓包分析
可以看到目标響應一個SYN/ACK包,說明目标ip是活躍的,然後便進行預設端口掃描
4.2 nmap -PS ip 也可以指定端口(不指定預設1000個常用的端口)
下面以nmap -PS 192.168.43.200 -p 80,443,53為例,抓包分析
分析下圖的資料包可以看到掃描53端口的過程:nmap發送TCP SYN包到目标IP,目标IP響應SYN/ACK包,nmap不進行第三次握手(ACK包),就直接發送RST包。這就是-PS參數的特點。
5.nmap -PA ip #TCP ACK 掃描
TCPACK ping 和剛才讨論的 SYN ping相當類似。差別就是設定 TCP 的 ACK标志位而不是 SYN 标志位。-PA選項使用和 SYN 探測(-PS)相同的預設端口(80)
ACK封包表示确認一個建立連接配接的嘗試,但該連接配接尚未完全建立。 是以遠端主機應該總是回應一個 RST 封包, 因為它們并沒有發出過連接配接請 求到運作 Nmap 的機器,如果它們正在運作的話。
由于沒頭沒腦的 ACK 封包通常會被識别成僞造的而丢棄。解決這個兩難的方法是通過即指定 -PS 又指定-PA來即發送 SYN又發送 ACK。
5.1以一個存在的IP為例: nmap -PS 121.194.14.84 抓包分析
分析抓取到的資料,可以看到主機發現的過程(預設以80端口作為主機發現):namp直接發送一個ACK的封包到目标IP,目标IP響應RST封包,說明主機存活
5.2帶端口的跟不帶端口的原理一樣,這裡不進行測試了。
5.3由于沒頭沒腦的 ACK 封包通常會被識别成僞造的而丢棄。解決這個兩難的方法是通過即指定 -PS 又指定-PA來即發送 SYN又發送 ACK。
以一個存在的IP為例: nmap -PS -PA 121.194.14.84 抓包分析
可以看到同時應用了-PS和-PA參數就構造成了一個完整的資料包,不會輕易被防火牆攔截丢棄
6.namp -PU ip #UDP掃描
它發送一個空的(除非指定了--data-length)UDP封包到給定的端口。端口清單的格式和前面讨論過的-PS 和-PA選項還是一樣。如果不指定端口,預設是31338。
如果目标機器的端口是關閉的,UDP 探測應該馬上得到一個 ICMP 端口無法到達的回應報 文。 這對于 Nmap 意味着該機器正在運作。
一個存在的IP為例: nmap -PU 121.194.14.84 抓包分析
分析抓取的資料包,可以發現nmap給目标機器的端口31338(預設的UDP端口),得到響應的是目标不可達,說明目标機器是存活的。(因為31338端口是一個關閉的端口)
二、端口掃描
1.Nmap -sS ip #半連接配接 2/3 預設用-sP去發現主機,如果沒結果請嘗試改成-PS或者-PU 或者-P0
SYN 掃描作為預設的也是最受歡迎的掃描選項, SYN 掃描相對來說不張揚,不易被注意到,因為它從來不完成 TCP連接配接
它常常被稱為半開放掃描,因為它不打開一個完全的TCP連接配接
一個存在的IP為例: nmap -sS 121.194.14.84 抓包分析
下面以80端口為例,分析-sS參數的過程,namp發送一個SYN封包到目标IP,目标IP響應一個SYN/ACK封包,然後nmap就不回複了。
2.Nmap -sT ip #全連接配接3/3 預設用-sP去發現主機,如果沒結果請嘗試改成-PS或者-PU 或者-P0
一個存在的IP為例: nmap -sT 121.194.14.84 抓包分析
下面以443端口為例,分析-sS參數的過程: namp發送一個SYN封包到目标IP,目标IP響應一個SYN/ACK封包,然後nmap回複ACK。
三、服務版本探測
一個存在的IP為例: nmap -sV 121.194.14.84