不少工具都提供遠程對操做系統進行檢測的功能,你可使用Nmap在網絡上找到那些已通過時的系統或未經受權的系統。
可是並無一種工具能夠提供絕對精準的遠程操做系統信息。幾乎全部的工具都使用猜解的方法,經過向目標發送探針,而後根據目標的迴應來進行猜想系統。這個探針大多都是以TCP和UDP數據包的形式,檢查的細節包括初始序列號(ISN),TCO選項,IP標識符(ID),數字時間戳等。每一個系統都會對這些探針作出不一樣的響應,這些工具就提取這些響應中的特徵部分,而後記錄在一個數據庫中,Nmap也是如此。
在Nmap中操做系統檢測還提供了關於系統運行時間和TCP序列可預測性信息的分類,使用-O參數經過端口掃描來完成對操做系統的掃描。數據庫
nmap -O 192.168.126.1
這個命令將會使用Nmap默認的SYN的掃描方式進行端口檢測,不過操做系統檢測選項能夠和別的檢測技術結合使用。使用--osscan-limit參數的時候,Nmap只會對知足「同時具備狀態open和closed的端口」條件的主機進行操做系統檢測。windows
遠程判斷目標計算機操做系統的方法能夠分爲兩類。安全
主動式方法:指客戶端主動向遠程主機發送信息,遠程主機通常要對這些信息做出反應,會回覆一些信息,發送者對這些信息進行分析,就有可能會得知遠程主機的操做系統類型。網絡
被動式方法:並不向目標操做系統發送任何數據包,而是經過各類抓包工具來蒐集流經網絡的數據報文,再從這些報文中獲得目標計算機的操做系統信息。ide
Nmap並不使用被動方式,Nmap的主動方式中採用多達15個探針的操做系統指紋掃描包。指紋是計算機做爲身份認證的一種機制,每種操做系統都有不同的特徵,經過向計算機發送探針來查看目標主機的響應數據,這個過程就是操做系統指紋分析的過程。探針利用了TCP,UDP,ICMP等協議。這些通過巧妙設計的探針能夠發現目標操做系統細微的差異。
在Nmap中咱們能夠搭配使用-O參數工具
nmap -O -F 192.168.126.1
隨着咱們不斷增長參數,可能會爲系統帶來更大的負擔,同時也會泄露咱們更多信息,更容易被IPS/IDS檢測出來。測試
nmap一樣能夠做爲網絡管理者的一個利器。利用這款工具,網絡管理者能夠節省大量的時間和精力,咱們使用下面這個指令來看一下有什麼效果。大數據
nmap -sV -F --fuzzy --osscan-guess 192.168.0.103
這裏我是掃描的是我本身的物理機,開着防火牆的狀況下,檢測出個人虛擬機版本是vmware15。網站
我再用這個指令來試一下虛擬機,掃描的結果是沒毛病的嗷操作系統
若是咱們但願經過nmap準確檢測遠程操做系統是比較困難的,全部這裏咱們使用到了-osscan-guess這個具備猜想功能的參數,它會猜想最爲接近目標的操做系統類型,咱們能夠利用這條指令就能夠簡單的發現目標網絡中那些不安全的系統,還能夠快速獲取目標上不安全的應用,咱們作爲維護者可使用這個儘早來完善系統的安全性。
咱們一直在說nmap沒法百分之百的肯定目標系統,只能依靠猜想。在nmap沒法肯定目標操做系統的時候,nmap會輸出系統的TCP/IP指紋文件,並給出各個系統類型的可能性。nmap也但願咱們能夠提交這個指紋文件和最終驗證的該系統的真實類型,從而幫助nmap更新操做系統指紋數據庫。這裏咱們就不掃描網站了,仍是使用本身的虛擬機。
經過掃描結果咱們發現,在此次掃描中,並無獲得目標系統的準確值,可是能夠看出結果給出了一個TCP/IP fingerprint的值,也就是OS後面的內容。
這個輸出結果並不是一次的掃描結果,而是屢次掃描的結果,這些掃描包括SCAN、SEQ、OPS、WIN、ECN、T1~T七、U1和IE。每次的掃描結果都是用%做爲分隔符,有的掃描結果可能爲空(RD=0,就表明RD的結果沒有獲得什麼實際內容),測試結果必須徹底匹配操做系統指紋的定義,這樣才能與指紋數據庫中的條目進行匹配。例如 T1(R =N)則表明此次測試沒有任何返回結果。
咱們將第一個SCAN的結果拿出來分析一下
SCAN(V=7.80%E=4%D=11/3%OT=80%CT=7%CU=40895%PV=Y%DS=1%DC=D%G=Y%M=000C29%TM=5DBE8A64%P=i686-pc-windows-windows)
這一行表明當前進行掃描使用的nmap版本以及一些其餘的相關本地信息。
V=7.80表示當前使用的nmap版本
D=11/3表示的掃描的日期
OT=80%CT=7表示在指紋識別過程當中使用的TCP端口
CU=40895表示在指紋識別過程當中使用的UDP端口
PV=Y表示目標IP地址是否屬於私有IP地址(Y=yes N=no)
DS=1表示從nmap所在主機到目標主機的距離跳數
G=Y表示此次掃描結果較好,能夠提交給iNSEcure.Org(也就是nmap的網站)
TM=5DBE8A64表示掃描所消耗的時間
p=i686-pc-windows-windows指出nmap所在主機的操做系統類型
下面的這些測試結果(SEQ、OPS、WIN、T1),這些測試的結果是經過向目標上開放的TCP端口發送一組很是巧妙的探針獲得的。
SEQ(SP=FD%GCD=1%ISR=10D%TI=I%CI=I%II=I%SS=S%TS=U)
SP=FD表示TCP的初始序列號(ISN)
GCD=1表示TCP的增量
ISR=10D表示ISN的速率
TI=I表示SEQ探針迴應數據包中IP頭部的ID值
II=I表示ICMP探針迴應數據包中的IP頭部的ID值
TS=U表示TCP數據包的時間戳信息
OPS測試結果
OPS(O1=M5B4NW8NNS%O2=M5B4NW8NNS%O3=M5B4NW8%O4=M5B4NW8NNS%O5=M5B4NW8NNS%O6=M5B4NNS)
O1=M5B4表示TCP數據包每次可以傳輸的最大數據分段
ST11表示ACK的可選信息和數據包的時間戳內容
N表示爲空操做
w0指出了窗口大小
O二、O3....O6的意義均和O1相同。
WIN測試結果
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)
這個測試結果給出了6個探針返回值的初始窗口大小
W1=2DA0
W2=2DA0
W3=2DA0
W4=2DA0
W5=2DA0
W6=2DA0
ECN測試結果
ECN(R=Y%DF=Y%T=40%W=FFFF%O=M5B4NW8NNS%CC=N%Q=)
R=Y表示目標是否對咱們進行了響應
DF=Y表示IP數據包的分段標誌位是否被設置
T=40表示迴應數據包IP中的TT1值 W=FFFF表示TCP初始化窗口的大小信息
O=M5B4NNS表示TCP選項的信息
CC=Y表示目標的擁塞控制控制能力。Y表示目標支持ECN
第一個探針迴應。第二個探針是一個設置了DF位內容的爲空的數據包,這個數據包的窗口大小爲128。
第三個探針是一個設置了FIN、URG、PSH以及SYN標識的數據包,這個數據包的大小爲256。第四個探針是一個設置了ACK位的TCP數據包,這個包一樣設置了DF位,大小爲1024。第五個探針是一個窗口大小爲31337的數據包。第六個數據包是一個窗口大小爲32768,這個數據包一般是發往關閉的端口。第七個數據包設置了FIN、URG、PSH標誌位,這個探針一樣發往一個關閉端口,窗口大小爲65535。
U1的結果是根據UDP數據包探針返的結果,這個探針的數據部分是300個C字符
IE探針基於ICMP協議,由兩個探針組成。
新的操做系統指紋信息提交地址 http://iNSEcure.org/Nmap/submit/
Nmap提供更精確的服務及版本檢測選項,可經過添加選項-sV進行服務和版本檢測。服務和版本檢測還有更多的選項。
--allports(掃描所有端口)
一般咱們在使用nmap進行版本探測的時候不會對目標的所有端口進行掃描,而是會跳過一些端口。若是確實有必要的話能夠對所有端口進行掃描。
-version-intensity 0-9(設置版本掃描強度)
當進行版本掃描-sV的時候,nmap發送一系列的報文,每一個報文都被賦予一個1-9之間的值。數字越高,服務越有可能被正確識別。強度越高掃描時間也越長。強度值在0-9之間,默認是7。
--version-light(輕量級模式)
--versiom-light其實至關於上面說的強度值爲2的掃描。這種輕量級模式掃描速度更快,不過使用這種模式對服務進行掃描的成功概率也小了許多。
--version-trace(跟蹤版本掃描活動)
這將會是nmap打印出關於正在進行掃描的詳細調試信息。它是用--packet-trace所獲得的信息的子集。