一、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协议讲解_SMB/CIFS协议解析(一)相关推荐

  1. windows smb更改端口_SMB协议(使用说明+过程详解+抓包分析)

    一.SMB概述 SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议.SMB 是 ...

  2. [转]应用SMB/CIFS协议

    第一节 本文的目的    Microsoft公开了CIFS协议的所有细节,这使得我们可以了解这个协议并且编写基于这个协议的应用程序. SMB/CIFS协议在Windows系统中的被广泛的应用,这要求我 ...

  3. 文件共享之SMB/CIFS协议及Samba的使用

    1 SMB/CIFS协议及Samba的介绍 1.1 SMB/CIFS协议  SMB(Server Message Block)又称CIFS(Common Internet File System),一 ...

  4. Linux中的CIFS协议与SMB协议

    SMB协议Server Message Block SMB 一种客户机/服务器.请求/响应协议.通过 SMB 协议,客户端应用程序可以在各种网络环境下读.写服务器上的文件,以及对服务器程序提出服务请求 ...

  5. PPPoE协议讲解以及拨号过程Wireshark抓包解析

    文章目录 前言 一.PPPoE的简单介绍 1.PPPoE客户端 2.PPPoE服务器 3.一些典型用例 4.PPPoE帧格式 二.PPPoE会话建立过程 三.PPPoE抓包详解 1.PADI 2.PA ...

  6. Camera DVP协议讲解

    Camera DVP协议讲解 该文章写于2016年,一直未发表.近期工作中又涉及到了Camera相关的内容,重新温习了下相关知识.决定把这篇文章发表出来,大家共同学习.   DVP(Digital V ...

  7. NFS、FTP、SMB、WebDav、DLNA协议

    随着智能化互联时代的来临,家中的智能设备越来越多:电视机.平板.游戏主机.电脑.手机等遍及家中各个角落,同时设备之间共享数据的需求变的越来越强烈.比如同步.备份手机上的照片和视频,在电视机上观看电脑中 ...

  8. 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析

    基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...

  9. 7层每次有哪些最基本的协议讲解

    OSI七层模型的每一层都有哪些协议 lisa890608 2012-11-27 20:13:07 45385 收藏 18 展开 TCP/IP: 数据链路层:ARP,RARP 网络层: IP,ICMP, ...

  10. iic总线从机仲裁_IIC协议底层原理超详细解析!示波器,逻辑分析仪多图预警

    1. 协议基础 1.1.     协议简介 IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发.主要是用来方便微控制 ...

最新文章

  1. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
  2. Angular中使用HttpClientModule模块实现get请求数据和post提交数据
  3. 操作系统lab2实验总结——Part1
  4. 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
  5. PowerDesigner逆向工程导入MYSQL数据库总结
  6. jpanel把原本内容覆盖掉_暖冬遇上倒春寒,花被大雪覆盖,小心一夜回到解放前...
  7. 心电图数据结构化标准_自己实现一个类 JSON 数据结构
  8. 第十二届蓝桥杯大赛软件赛决赛题解
  9. 如何运行自动 Mac 清理
  10. C/C++/Java 基本数据类型总结
  11. 荣耀安装google谷歌服务框架_荣耀V20怎么下载安装谷歌服务助手,GMS框架安装教程...
  12. Java小游戏象棋开发1-界面设计
  13. electron实现屏幕录制
  14. 服务器 稳定 重要性,云服务器 重要性
  15. 个性化lightswitch登录屏幕(附源码)
  16. Vue调用摄像头录制视频和音频并上传给后端或下载到本地
  17. 学科语文调剂信息汇总
  18. java新建android_Android Studio项目的创建及Java基础知识
  19. GB28181协议实现系列之----IPC音视频PS封装(5)
  20. ps软件报错:暂存盘已满

热门文章

  1. 关于无线网卡驱动安装正确,但灯不亮的问题
  2. 飞鸽传书2011下载(飞鸽传书)
  3. 冰点还原精灵手工强制删除方法
  4. java jdom_java中JDOM的基本使用方法
  5. HTML,CSS 样式模板大全
  6. 36个精美完整网站网页完整源码HTML+CSS+JS
  7. python毕业论文答辩ppt_如何制作优秀的毕业论文答辩 PPT?
  8. 使用 Php Artisan Tinker 来调试你的 Laravel 时间 2016-06-19 22:58:13 Laravel学院 原文 http://laravelacademy.org/
  9. 【杭电5053】the Sum of Cube
  10. 对Kalman(卡尔曼)滤波器的理解