SMB2 Protocol – 簡介(應用層協議主要用於在計算機間共享文件、打印機、串口等)


SMB2 Protocol – 簡介

SMB協議簡介:

服務器信息塊(SMB)協議是一個應用層協議主要用於在計算機間共享文件、打印機、串口等。

在介紹SMB協議的時候,一般提到使用的端口為139,445。 但是在Wiki里面是這樣描述端口信息的。這兒以后研究。

The Server Message Block protocol can run on top of the Session (and lower) network layers in several ways:

SMB 一種客戶機/服務器、請求/響應協議。通過 SMB 協議,客戶端應用程序可以在各種網絡環境下讀、寫服務器上的文件,以及對服務器程序提出服務請求。此外通過 SMB 協議,應用程序可以訪問遠程服務器端的文件、以及打印機、郵件槽(mailslot)、命名管道(named pipe)等資源。

在SMB協議中,每個特定的版本叫做一個dialect,在MS文檔中指出CIFS其實就是一個SMB的一個版本,這兒筆者理解的應該就是SMB2。SMB2是一個新的版本,是對老版本SMB進行了重新設計。雖然后面出現了3.0的版本,但是由於是基於SMB2進行的改動,所以很多時候,我們統一都叫做SMB2。那么如果區分這個小版本的信息呢,我們可以通過dialect來判斷。現在已經有了四個dialect:2.0,2.1, 3.0, 3.02 區分的方法會在學習Negotiation Protocol的時候詳細介紹。

SMB在TCP/IP Model中的位置:

image

SMB更多的介紹,可以參考Wikipedia, 本文中我們學習的SMB2協議。

SMB2協議的工作過程

1. Negotiate Protocol Request: 在在用戶輸入“\服務器名\”之后,首先要做的就是把服務器名解析為IP,可以通過DNS還是NetBIOS解析。得到IP地址后,客戶端就向服務器發送第一個SMB請求:“Negotiate Protocol Request”。這個請求包含了客戶端所支持的各種 SMB Dialect。

2. Negotiate Protocol Response: 服務器收到該請求后,選擇一個它支持的最新版本(比如NT LM 0.12),再通過“Negotiate Protocol Response”回復給客戶端

3. Session Setup Request: Negotiation 結束之后,,客戶端請求和服務器建立一個session,在客戶端發送的Session Setup Request里,包含了身份驗證請求(如Kerberos的AP_REQ)。

4. Session Setup Response: 服務器回復Session Setup Response,包含了驗證結果(如Kerberos的AP_REP)。關於認證協議Kerberos和NTLM,以后會再學習結束

5. Tree Connect Request: Session Setup通過后,客戶端就成功的連上了服務器。客戶端發送的Tree Connect Request來訪問具體的共享,如果前面沒有指定共享名(\服務器名),客戶端訪問的是命名管道$IPC , 如果指定了\服務器\共享名 ,那么這兒就是訪問共享名的部分了。

6. Tree Connect Response:,服務器在檢查過用戶對該路徑的權限后,回復Tree Connect Response。檢查用戶權限是這樣進行的:服務器從Session Setup Request中已經得到用戶所屬的組,再通過和該路徑上的ACL對比,即可得到用戶權限。至此,用戶就進入了共享文件夾。

7. 下面就是文件或文件夾操作的相關命令,如新建,打開,重命名,刪除,關閉。讀寫操作等。我們在以后的文章里詳細介紹。

SMB2的命令共有19個,如下。關於每個SMB2 數據包所用的命令,可以Packet Header里面的Command Flag里看到。

· 0x00 SMB2/NegotiateProtocol

· 0x01 SMB2/SessionSetup

· 0x02 SMB2/SessionLogoff

· 0x03 SMB2/TreeConnect

· 0x04 SMB2/TreeDisconnect

· 0x05 SMB2/Create

· 0x06 SMB2/Close

· 0x07 SMB2/Flush

· 0x08 SMB2/Read

· 0x09 SMB2/Write

· 0x0a SMB2/Lock

· 0x0b SMB2/Ioctl

· 0x0c SMB2/Cancel

· 0x0d SMB2/KeepAlive

· 0x0e SMB2/Find

· 0x0f SMB2/Notify

· 0x10 SMB2/GetInfo

· 0x11 SMB2/SetInfo

· 0x12 SMB2/Break

SMB2實驗:

實驗環境:

一台加入域的Windows 7機器A, 這台主機上,通過VMware建了一個Windows 8的虛擬機B。B訪問\A的時候,在B上抓取的數據包。SMB||SMB2的數據包如下。關於具體每個Command的分析,我會在以后的Blog中介紹。

image

References:

1. http://en.wikipedia.org/wiki/Server_Message_Block

2. http://wiki.wireshark.org/SMB2

3. Microsoft SMB Protocol and CIFS Protocol Overview: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365233(v=vs.85).aspx

4. [MS-SMB2]: Server Message Block (SMB) Version 2 Protocol Specification

5. Implementing CIFS http://ubiqx.org/cifs/Book.html

6. http://msdn.microsoft.com/en-us/library/cc246482.aspx

7. http://channel9.msdn.com/Blogs/Darryl/Troubleshooting-Windows-SMBSMB2-Issues 8

8. P神的Blog: http://blog.sina.com.cn/s/blog_70398db50100yzuf.html

9. Common Internet File System: http://technet.microsoft.com/en-us/library/cc939973.aspx

 

https://tonglol.wordpress.com/2014/08/17/smb2-protocol-%E7%AE%80%E4%BB%8B/

https://tonglol.wordpress.com/category/cifs/page/2/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM