一、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每个字段占用的字节图:

用wireshark抓包,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协议解析一概述的更多相关文章

  1. SMB/CIFS协议解析

    1.SMB协议与CIFS协议的区别     139端口是一种TCP端口,该端口在通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用.445端口也是一种TCP端口,该端口在 Windows 2 ...

  2. SMB/CIFS协议解析二

    一.拷贝文件(远程-->本地) 1.SMB_COM_NT_CREATE_ANDX (0xa2)       打开文件,获取文件名,获得读取文件的  总长度. 2.SMB_COM_READ     ...

  3. CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议

    目录 一.关于 Samba 1. SMB 2. Samba 二.yum 安装 Samba 1. 安装 Samba 2. 查看版本 3. 查看配置文件 4. 启动服务 5. 本地客户端验证 6. Win ...

  4. SMB/CIFS协议简介

    1. 简介:(ServerMessage Block)服务消息块通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议.SMB从I ...

  5. smbclient - 类似FTP操作方式的访问SMB/CIFS服务器资源的客户端

    总览 SYNOPSIS smbclient {servicename} [password] [-b <buffer size>] [-d debuglevel] [-D Director ...

  6. Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)

    Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...

  7. smbd - 向客户提供SMB/CIFS服务的服务器

    总览 SYNOPSIS smbd [-D] [-F] [-S] [-i] [-h] [-V] [-b] [-d <debug level>] [-l <log directory&g ...

  8. ts 协议解析

    pes : http://wenku.baidu.com/link?url=KjcA0qXqZ1bWVQTa8i1YOmygofldSQL7Pjj-zGRw1e_6_LFmVLo5DIWF0SNwVn ...

  9. 使用openfiler设置SMB/CIFS共享总是不通过的一例与解决办法

    最近使用openfiler进行空闲存储的集中化管理与多主机节点共享,等设置到了SMB/CIFS的时候总是通过不了,前提需要开启的LDAP内建在openfiler也都开启并设置好了,但就是无法通过&qu ...

随机推荐

  1. MySQL锁系列3 MDL锁

    http://www.cnblogs.com/xpchild/p/3790139.html   MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构 ...

  2. 使用asp.net动态添加html元素

    HtmlGenericControl gen = new HtmlGenericControl("div");        gen.InnerText = "HtmlG ...

  3. ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)

    大家好,今天跟大家谈谈Intent的用法. Intent在安卓中主要用于打开另外一个页面,这个页面可能是一个activity也可能是一个应用,也可能是     其它…… 且看下面介绍,总结摘抄网友一些 ...

  4. PHP.11-PHP实例(二)-面向对象实例(图形计算器)

    面向对象实例(图形计算器) [PHP语法详解] 1.实现外观 #不同的动作,输出不同的表单 ###关于PHP中,无法使用localhost访问.php文件[http://www.360doc.com/ ...

  5. Number Game poj1143

    Description Christine and Matt are playing an exciting game they just invented: the Number Game. The ...

  6. 装饰者模式--《Head First DesignPattern》

    装饰者模式动态地将责任附加到对象杭,若要拓展功能,装设置提供了比继承更有弹性的替代方案. 星巴兹有多种咖啡,它们具有不同的价格.在购买咖啡时,也可以要求在其中加入各种调料,例如豆浆.摩卡.奶泡等等.需 ...

  7. 实验教学管理系统 c语言程序代写源码下载

    问题描述:实验室基本业务活动包括:实验室.班级信息录入.查询与删除:实验室预定等.试设计一个实验教学管理系统,将上述业务活动借助计算机系统完成. 基本要求: 1.必须存储的信息 (1)实验室信息:编号 ...

  8. Adobe Edge Animate--关于全局变量和全局方法的定义

    Adobe Edge Animate--关于全局变量和全局方法的定义 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. BY:sonicxsxs 前文中有关音 ...

  9. Python_sklearn机器学习库学习笔记(五)k-means(聚类)

    # K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...

  10. Sublime text3 安装

    Sublime是一款跨平台的前端开发神器,国外的一款共享软件,虽然是未注册的但不影响使用. 一.下载最新版的安装包 官网地址:http://www.sublimetext.com/3 --portab ...