当前位置: 首页 > article >正文

smb协议讲解_SMB协议(使用说明+过程详解+抓包分析)

一、SMB概述

SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (ApplicationProgram Interface,简称API),一般端口使用为139,445。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(CommonInternet File System),并且加入了许多新的特色。

SMB协议是一个很重要的协议,目前绝大多数的PC上都在运行这一协议,windows系统都充当着SMB协议的客户端和服务器,所以SMB是一个遵循客户机服务器模式的协议。SMB服务器负责通过网络提供可用的共享资源给SMB客户机,服务器和客户机之间通过TCP/IP协议、或者IPX协议、或者是NetBEUI进行连接。

SMB是应用层(和表示层)协议,使用C/S架构,其工作的端口与其使用的协议有关。

当远程连接计算机访问共享资源时有两种方式:

★共享计算机地址\共IP享资源路径

★共享计算机名\共享资源路径

其中,使用计算机名访问时,SMB服务工作在NetBIOS协议之上,用的是TCP的139端口;使用IP地址访问时,用的是TCP的445端口。

二、SMB工作原理首先客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回0XFFFFH,结束通信。

协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。

当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。

连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

三、抓包分析SMB服务的具体过程

环境搭建

服务端:Windows7虚拟机一台(账户名:SoisMoooo;密码:111)

客户端:Windows10计算机一台(安装Wireshark)

windows7的IP:192.168.135.130

Windows10的IP:192.168.135.1

A.开启SMB协议

1、服务端(windows7)开启SMB协议,并建立一个共享文件夹:

2、客户端(windows10)开启SMB协议:

3、输入:\\192.168.135.130\共享文件夹

填写Windows7账户名和密码

B.抓包分析工作

1、TCP三次握手建立连接

2、SMB协商过程:

首先客户端发送一个SMB negotiate protocol request请求数据报,并列出它所支持的所有SMB协议版本

0x0202   SMB 2.002

0x0210   SMB 2.10

0x0300   SMB 3.0

0x0302   SMB 3.02

0x0311   SMB 3.11

3、通过上图Response包可以看到,希望服务端使用的版本是SMB 2.10

协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送session setup request请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器。

4、然后服务器通过发送一个Session setup response应答数据报来允许或拒绝本次连接。

5、当客户端和服务器完成了磋商和认证之后,它会发送一个Tree connect rerquest SMB数据报并列出它想访问网络资源的名称。

之后服务器会发送一个tree connect response应答数据报以表示此次连接是否被接受或拒绝

6、最后就可以进行读写操作

http://www.lryc.cn/news/2412691.html

相关文章:

  • Java占位符%s
  • 学习SpringCloud-基础入门
  • AutoHotKey自动热键(三)热键的<有条件生效>与<无条件生效>
  • 规则引擎groovy
  • 大学四年,自学编程常用的10个学习网站_w3school和菜鸟教程哪个好
  • 常用网络命令:ipconfig和ifconfig
  • tcpdump参数解析及使用详解
  • 使用机器学习进行NSFW内容检测
  • 试用了NotePad++,果断抛弃用了十年的EditPlus
  • rsync命令详解
  • Validate表单验证
  • 探索OpenSSH版本升级
  • Restful的使用
  • CPP----C++常识100例
  • css的animation动画
  • NoC(Network on Chip)学习笔记(1)
  • Angular系列教程之生命周期钩子
  • 硬件基础-电容
  • 玩转企业云计算平台系列(一):OpenStack 基础入门
  • Linux中mariadb的安装及使用
  • NVIDIA显卡驱动更新,NVIDIA Driver、CUDA Toolkit、cuDNN安装指南
  • EasyUI(前端框架)
  • 正弦定理和余弦定理
  • static关键字的理解
  • TRIM的用法
  • 开发编辑器vim的使用、用户和组操作
  • VLC media player 使用
  • Flex弹性盒子布局和Grid网格布局详解
  • labview基础
  • 电商术语PV、UV、GMV和转化率