SMB/CIFS協議解析(一)
一、SMB/CIFS協議的區別
在NetBIOS出現之後,Microsoft就使用NetBIOS實現了一個網路檔案/列印服務系統,這個系統基於NetBIOS設定了一套檔案共享協 議,Microsoft稱之為SMB(Server Message Block)協議。這個協議被Microsoft用於它們Lan Manager和Windows NT伺服器系統中,而Windows系統均包括這個協議的客戶軟體,因而這個協議在區域網系統中影響很大。
隨著Internet的流行,Microsoft希望將這個協議擴充套件到Internet上去,成為Internet上計算機之間相互共享資料的一種標 準。因此它將原有的幾乎沒有多少技術文件的SMB協議進行整理,重新命名為CIFS(Common Internet File System),並打算將它與NetBIOS相脫離,試圖使它成為Internet上的一個標準協議。
SMB(Server Message Block)協議在NT/2000中用來作檔案共享,在NT中,SMB執行於NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)埠。 在2000中,SMB可以直接執行在tcp/ip上,而沒有額外的NBT層,使用TCP 445埠。因此在2000上應該比NT稍微變化多一些。可以在“網路連線/屬性/TCPIP協議/屬性/高階/WINS中設定啟用或者禁用
NBT(NetBIOS over TCP/IP)。 當2000使用網路共享的時候,就面臨著選擇139或者445埠了。下面的情況確定會話使用的埠:
1、如果客戶端啟用了 NBT,那麼連線的時候將同時訪問139和445埠,如果從445埠得到回應,那麼客戶端將傳送RST到139埠,終止這個埠的連線,接著就從 445埠進行SMB的會話了;如果沒有從445埠而是從139得到回應,那麼就從139埠進行會話;如果沒有得到任何回應,那麼SMB會話失敗。
2、如果客戶端禁用了NBT,他就將只從445埠進行連線。當然如果伺服器(開共享端)沒有445埠進行SMB會話的話,那麼就會訪問失敗了,所以禁用445埠後,對訪問NT機器的共享會失敗。
3、如果伺服器端啟用NBT,那麼就同時監聽UDP 137、138埠和TCP139,445。如果禁用NBT,那麼就只監聽445埠了。 所以對於2000來說,共享問題就不僅僅是139埠,445埠同樣能夠完成。
二、SMB包頭部分:
其中SMB Header的長度為32個byte,NETBIOS Header的長度為4個byte,TCP Header為20個byte,SMB Command Header的長度不是固定的,不同的命令有不同的長度。
三、SMB Header
typedef unsigned char UCHAR; // 8 unsigned bits
typedef unsigned short USHORT; // 16 unsigned bits
typedef unsigned long ULONG; // 32 unsigned bits
typedef struct {
ULONG LowPart;
LONG HighPart;
} LARGE_INTEGER; // 64 bits of data
typedef struct {
UCHAR Protocol[4]; // Contains 0xFF,'SMB'
UCHAR Command; // Command code
union {
struct {
UCHAR ErrorClass; // Error class
UCHAR Reserved; // Reserved for future use
USHORT Error; // Error code
} DosError;
ULONG Status; // 32-bit error code
} Status;
UCHAR Flags; // Flags
USHORT Flags2; // More flags
union {
USHORT Pad[6]; // Ensure section is 12 bytes long
struct {
USHORT PidHigh; // High part of PID
ULONG Unused; // Not used
ULONG Unused2;
} Extra;
};
USHORT Tid; // Tree identifier
USHORT Pid; // Caller's process id
USHORT Uid; // Unauthenticated user id
USHORT Mid; // multiplex id
} SMB_HEADER;
下圖為SMB Header每個欄位佔用的位元組圖:
SMB Command:SMB命令
NT Status:SMB命令的狀態,0x00000000為成功
四、SMB Command
1、SMB_COM_NEGOTIATE(0x72)
協商命令
Must be the first message sent by client to the server. Includes a list of SMB dialects supported by the client. Server response indicates which SMB dialect should be used.
2、SMB_COM_SESSION_SETUP_ANDX (0x73)
建立會話,成功以後,使用者正確登入。可以得到使用者名稱和登入的主機名等資訊
Transmits the user's name and credentials to the server for verification. Successful server response has Uid field set in SMB header used for subsequent SMBs on behalf of this user.
3、SMB_COM_TREE_CONNECT (0x75)
遍歷共享資料夾的目錄及檔案
Transmits the name of the disk share the client wants to access. Successful server response has Tid field set in SMB header used for subsequent SMBs referring to this resource.
4、SMB_COM_NT_CREATE_ANDX (0xa2)
開啟或者建立檔案(夾),可以獲取檔名及其目錄,可以判斷開啟的是檔案還是資料夾,獲得讀取檔案的總長度。
5、 SMB_COM_OPEN (0x2d)
讀取檔案,與read命令很相似。獲得檔案內容。
Transmits the name of the file, relative to Tid, the client wants to open. Successful server response includes a file id (Fid) the client should supply for subsequent operations on this file.
6、SMB_COM_READ (0x2e)
讀取檔案,獲得讀取檔案內容。
Client supplies Tid, Fid, file offset, and number of bytes to read. Successful server response includes the requested file data.
7、SMB_COM_WRITE (0x2f)
寫入檔案,獲得寫入的檔案內容
8、 SMB_COM_CLOSE (0x04)
Client closes the file represented by Tid and Fid. Server responds with success code.
9、 SMB_COM_TREE_DISCONNECT (0x71)
Client disconnects from resource represented by Tid.
相關文章
- 檔案共享之SMB/CIFS協議及Samba的使用協議Samba
- SMB與CIFS 445埠
- ARP(地址解析協議)和RARP(逆地址解析協議)協議
- ARP 地址解析協議協議
- HTTP 協議完全解析HTTP協議
- Java中使用jcifs庫操作SMB協議進行檔案操作Java協議
- 一個私有協議檔案DB 的解析.協議
- consul 原始碼解析(一)raft 協議實現原始碼Raft協議
- WebSocket的Frame協議解析Web協議
- HDFS原始碼解析系列一——HDFS通訊協議原始碼協議
- 如何在本地區域網中透過SMB協議加密共享檔案協議加密
- Mac 透過 SMB 協議使用 Ubuntu 做時間機器備份盤Mac協議Ubuntu
- 超詳細 DNS 協議解析DNS協議
- ARP協議 地址解析協議:IP地址轉換為MAC地址協議Mac
- 認識流媒體協議,從 RTSP 協議解析開始!協議
- CAP一致性協議及應用解析協議
- 博文推薦|深入解析 BookKeeper 多副本協議(一)協議
- Protobuf協議逆向解析-APP爬蟲協議APP爬蟲
- CIFS
- LVM FS NFS CIFS NAS 等儲存概念解析LVMNFS
- OpenVPN 協議解析-握手資料包分析協議
- ARP地址解析協議-個人總結協議
- 除錯備忘錄-SWD協議解析除錯協議
- syslog協議及rsyslog服務全解析協議
- dubbo原始碼解析(三十)遠端呼叫——rest協議原始碼REST協議
- 訊息佇列面試解析 - 傳輸協議佇列面試協議
- 抖音協議直播間彈幕資訊解析協議
- Raft協議和ZAB協議Raft協議
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE
- Free自由協議鎖倉分紅系統NFT丨Free自由協議開發原始碼解析協議原始碼
- BGP路由協議學習一路由協議
- 深入理解 tcp 協議(一)TCP協議
- OSPF 路由協議詳解(一)路由協議
- 一、USB PD協議簡介協議
- Win11 24H2 使用Rclone將SMB協議連結轉為本地磁碟驅動器協議
- 是時候說再見了,微軟宣佈 Win 11 即將禁用 SMB1 傳輸協議微軟協議
- okhttp 原始碼解析 – http 協議的實現 – 重定向HTTP原始碼協議
- dubbo原始碼解析(三十一)遠端呼叫——rmi協議原始碼協議
- dubbo原始碼解析(三十二)遠端呼叫——thrift協議原始碼協議