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:
- directly over TCP, port 445;[4]
- via the NetBIOS API, which in turn can run on several transports:[5]
- on UDP ports 137, 138 & TCP ports 137, 139 – see NetBIOS over TCP/IP;
- on several legacy protocols such as NBF (incorrectly referred to as NetBEUI).
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中的位置:
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中介绍。
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/
SMB2 Protocol – 简介(应用层协议主要用于在计算机间共享文件、打印机、串口等)的更多相关文章
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- UNIX/Linux网络编程基础:应用层协议简介
目录 1.HTTP协议 2.FTP协议 3.TELNET协议 4.NFS协议 1.HTTP协议 应用层协议HTTP协议是Web的核心.HTTP协议在Web的客户程序和服务器程序中得以实现,运行在不同系 ...
- 应用层协议——DHCP
常见协议分层 网洛层协议:包括:IP协议.ICMP协议.ARP协议.RARP协议. 传输层协议:TCP协议.UDP协议. 应用层协议:FTP.Telnet.SMTP.HTTP.RIP.NFS.DNS ...
- UDS(ISO14229-2006) 汉译(No.7 应用层协议)【未完,待续】
7.1定义 应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请求都将有由服务器端产生的与之相对的响应. 唯一的例外在于:例如使用了功能寻址方式,或者该请求/指示没有指定生成响应/确定的少数 ...
- 常用应用层协议HTTP、RTSP、RTMP比较
HTTP(超文本传输协议).RTSP(Real Time Streaming Protocol实时流传输协议).RTMP(Routing Table Maintenance Protocol路由选择表 ...
- Web应用与应用层协议
Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...
- UDS(ISO14229-2006) 汉译(No.7 应用层协议)
标签:cte amp 通信 pac condition man 没有 参数错误 family 7.1定义 应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请 ...
- 第五章Web应用与应用层协议
Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...
- TCP/IP笔记(八)应用层协议
TCP/IP的应用层涵盖了OSI参考模型中第5.第6.第7层的所有功能,不仅包含了管理通信连接的会话层功能.转换数据格式的标识层功能,还包括与对端主机交互的应用层功能在内的所有功能. 利用网络的应用程 ...
随机推荐
- com.ibatis.sqlmap.client.SqlMapException: There is already a statement named search in this SqlMap.
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeExcep ...
- DF与EF的区别
DF:专有文件 EF:基本文件 1.EF没有文件名,只有FID(文件标识符) 2.DF有文件名,又有FID,因此COS可以根据文件名来访问DF
- c++实例化对象
今天看到c++实例化对象,有点懵了.Activity_Log the_log (theLogPtr, Tree->GetBranch());这是那一段小代码,开始没看懂.java看习惯了总喜欢n ...
- 【Integer To Roman】cpp
题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...
- UBOOT分析
U-Boot是一个通用的Boootloader,它是在系统上电后执行的第一段程序,先初始化硬件设备,再准备软件环境,最后引导系统内核. 一般来说Bootloader的启动过程来说一般分两个阶段: 第一 ...
- Mac下safari、chrome打开开发者工具快捷键
mac下safari和chrome打开开发者工具的快捷键相同,都是option(alt)+command+i 这个是我的默认配置,没有更改过的.
- HDU 5564 Clarke and digits 状压dp+矩阵加速
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5564 题意: 求长度在[L,R]范围,并且能整除7的整数的总数. 题解: 考虑最原始的想法: dp[ ...
- linux用户配置和用户权限
一.查看用户: (1)在终端里.输入:cat /etc/passwd,查看/etc/passwd文件就行了.(2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 查看当前在线用户 ...
- 快速编写HTML,CSS代码的有力工具Emmet插件
Emmet 是一个编辑器插件,它以一种简写的语法规则可用于快速编写html或css文档内容,它支持多种编辑器. 从官网:http://emmet.io/ 可下载各个编辑器的插件.notepad++ 插 ...
- ASP.NET 处理get/post数据方式
1.GET方式 NameValueCollection coding; coding = HttpUtility.ParseQueryString(Request.Url.Query, Encodin ...