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中的位置:

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 – 简介(应用层协议主要用于在计算机间共享文件、打印机、串口等)的更多相关文章

  1. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  2. UNIX/Linux网络编程基础:应用层协议简介

    目录 1.HTTP协议 2.FTP协议 3.TELNET协议 4.NFS协议 1.HTTP协议 应用层协议HTTP协议是Web的核心.HTTP协议在Web的客户程序和服务器程序中得以实现,运行在不同系 ...

  3. 应用层协议——DHCP

    常见协议分层 网洛层协议:包括:IP协议.ICMP协议.ARP协议.RARP协议. 传输层协议:TCP协议.UDP协议. 应用层协议:FTP.Telnet.SMTP.HTTP.RIP.NFS.DNS ...

  4. UDS(ISO14229-2006) 汉译(No.7 应用层协议)【未完,待续】

    7.1定义 应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请求都将有由服务器端产生的与之相对的响应. 唯一的例外在于:例如使用了功能寻址方式,或者该请求/指示没有指定生成响应/确定的少数 ...

  5. 常用应用层协议HTTP、RTSP、RTMP比较

    HTTP(超文本传输协议).RTSP(Real Time Streaming Protocol实时流传输协议).RTMP(Routing Table Maintenance Protocol路由选择表 ...

  6. Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  7. UDS(ISO14229-2006) 汉译(No.7 应用层协议)

    标签:cte   amp   通信   pac   condition   man   没有   参数错误   family 7.1定义 应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请 ...

  8. 第五章Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  9. TCP/IP笔记(八)应用层协议

    TCP/IP的应用层涵盖了OSI参考模型中第5.第6.第7层的所有功能,不仅包含了管理通信连接的会话层功能.转换数据格式的标识层功能,还包括与对端主机交互的应用层功能在内的所有功能. 利用网络的应用程 ...

随机推荐

  1. Mysql的相关命令

    1.登录服务器 mysql -h host -u user -p mysql -h host -u user -p 数据库 2.使用SHOW语句找出服务器上当前存在什么数据库:mysql> SH ...

  2. Windows平台下Python2.7中pip的安装方法

    本文允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 文件下载 需要下载并运行ez_se ...

  3. 对C++中高内聚,低耦合原则的理解

    1.C语言是面向过程的语言,采用模块化的设计思想,每个功能划分为一个模块,是以函数为单位的. 2.C++是面向对象的语言,采用类设计的思想,因此C++中的模块是以类为基本单位的. 高内聚,低耦合能够使 ...

  4. java 参数化类型

    package com.gxf.collection; import java.util.LinkedList; public class TestForT<T> { private Li ...

  5. How to insert a character into a NSString

    How do I insert a space to a NSString. I need to add a space at index 5 into: NString * dir = @" ...

  6. java笔试题(2)

    简述构造器的运行机制 首先要注意的是的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个 ...

  7. Entity Framework走马观花之把握全局

    在深入学习某项技术之前,应该努力形成对此技术的总体印象,并了解其基本原理,本文的目的就在于此. 一.理解EF数据模型 EF本质上是一个ORM框架,它需要把对象映射到底层数据库中的表,为此,它使用了三个 ...

  8. Byte measurements

  9. maven插件:tomcat插件和jetty插件的区别

    在程序是多模块结构的时候,使用tomcat的maven插件和jetty的maven插件有细微差别: 1.tomcat7-maven-plugin   可以直接在parent的邮件直接运行:tomcat ...

  10. js+CSS实现模拟华丽的select控件下拉菜单效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...