此处介绍一下,在客户端与服务端之间MicrosoftSMB Protocol的交换过程,整个过程如下所示:
-
客户端与服务端建立一个NetBIOS会话.
-
客户端与服务端协商MicrosoftSMB 协议.
-
客户端登陆到服务端.
-
客户端访问服务端共享.
-
客户端打开共享下的文件.
-
客户端读取文件.
首先,客户端与服务端建立TCP连接.客户端通过TCP连接,创建并发送NetBIOS会话。如果数据包格式正确,服务期将返回一个表明会话已建立的应答消息.在此之后,客户端发送MicrosoftSMB协议数据包到服务端.
Packet1: SMB_COM_NEGOTIATE Direction: Clientto server Description: 客户端发送请求,与服务端协商MicrosoftSMB协议.Theclient requests that the server negotiate theMicrosoft SMB Protocol dialect. 客户端发送的数据包中包含一系列用于协商的字符串. |
Packet2: SMB_COM_NEGOTIATE Direction: Serverto client Description: 服务端响应客户端请求,以确认会话过程中的MicrosoftSMB协议。返回的数据包包括一个随即的8字节字符串,这个字符串将用于下一步验证客户端登录. |
Packet3: SMB_COM_SESSION_SETUP_ANDX Direction: Clientto server Description: 该数据包包含客户端的功能信息,就算服务端只有共享级安全,该包页会被发送。 Packet3: SMB_COM_SESSION_SETUP_ANDX Direction: Serverto client Description: 如果询问/应答被服务端接受,一个有效的UID会被包含于数据包中,返回给客户端。如果不接受,服务端则会返回一个错误代码,并拒绝客户端访问. |
Packet4: SMB_COM_TREE_CONNECT_ANDX Direction: Clientto server Description: 客户端发送共享访问请求.数据包会包含一个UNC格式的完整路径. |
Packet5: SMB_COM_TREE_CONNECT_ANDX Direction: Serverto client Description: 如果访问共享被授权,服务端会返回一个16比特位的treeID,此ID对应共享。如果共享不存在,或用户凭据不足以访问共享,服务端会返回一个包含错误代码的数据包,并拒绝访问. |
Packet6: SMB_COM_OPEN_ANDX Direction: Clientto server Description: 客户端向服务端请求打开可访问的共享文件,发送的数据包,包含要打开的文件名. |
Packet7: SMB_COM_OPEN_ANDX Direction: Serverto client Description: 如果访问共享文件被授权,服务器会返回被请求文件对应的文件ID.如果文件不存在,或用户凭据不足以访问该文件,服务器会返回一个包含错误代码的数据包,并拒绝访问. |
Packet8: SMB_COM_READ_ANDX Direction: Clientto server Description: 客户端向服务端发送请求,要求读取已打开文件的数据。客户端已获取的文件ID,是为了帮助服务端找到需要读取数据的文件. |
Packet9: SMB_COM_READ_ANDX Direction: Serverto client Description: 服务端返回包含文件数据的数据包.如果共享在[文件被打开]至[读取数据]之间,发生变化,那么就可能产生错误. |
http://richardkok.wordpress.com/2011/02/03/wireshark-determining-a-smb-and-ntlm-version-in-a-windows-environment/