Documentation
¶
Index ¶
Constants ¶
View Source
const ( ProtocolSMB = "\xFFSMB" ProtocolSMB2 = "\xFESMB" )
SMB协议版本头
View Source
const ( SecurityModeSigningEnabled uint16 SecurityModeSigningRequired )
SMB签名 开启/关闭
View Source
const ( SMB2_NEGOTIATE = 0x0000 SMB2_SESSION_SETUP = 0x0001 SMB2_LOGOFF = 0x0002 SMB2_TREE_CONNECT = 0x0003 SMB2_TREE_DISCONNECT = 0x0004 SMB2_CREATE = 0x0005 SMB2_CLOSE = 0x0006 SMB2_FLUSH = 0x0007 SMB2_READ = 0x0008 SMB2_WRITE = 0x0009 SMB2_LOCK = 0x000A SMB2_IOCTL = 0x000B SMB2_CANCEL = 0x000C SMB2_ECHO = 0x000D SMB2_QUERY_DIRECTORY = 0x000E SMB2_CHANGE_NOTIFY = 0x000F SMB2_QUERY_INFO = 0x0010 SMB2_SET_INFO = 0x0011 SMB2_OPLOCK_BREAK = 0x0012 )
SMB2 Command代码
View Source
const ( SMB2_0_2_Dialect = 0x0202 SMB2_1_Dialect = 0x0210 SMB3_0_Dialect = 0x0300 SMB3_0_2_Dialect = 0x0302 SMB3_1_1_Dialect = 0x0311 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type SMB2NegotiateRequestStruct ¶
type SMB2NegotiateRequestStruct struct { SMB2PacketStruct StructureSize uint16 //2字节,客户端必须设置36 DialectCount uint16 `smb:"count:Dialects"` //2字节,必须大于0 SecurityMode uint16 //2字节,设置是否启用SMB签名 Reserved uint16 //2字节,必须设置0 Capabilities uint32 //4字节,如果客户端使用SMB3.x,必须使用SMB2_GLOBAL_CAP_*构造,否则设置为0 ClientGuid []byte `smb:"fixed:16"` //16字节,客户端自身生成 ClientStartTime uint64 //8字节,保留字段,归零 Dialects []uint16 //16位整数数组 }
SMB2 Negotiate 请求头结构
type SMB2NegotiateResponseStruct ¶
type SMB2NegotiateResponseStruct struct { SMB2PacketStruct StructureSize uint16 //2字节,客户端必须设置36 SecurityMode uint16 //2字节,设置是否启用SMB签名 DialectRevision uint16 //2字节,SMB协议号 Reserved uint16 //2字节,保留字段,归零 ServerGuid []byte `smb:"fixed:16"` //16字节,服务器标识符 Capabilities uint32 //4字节,服务器协议作用 MaxTransactSize uint32 //4字节,客户端set_info请求缓冲区大小 MaxReadSize uint32 //4字节,服务器接受smb read请求最大长度 MaxWriteSize uint32 //4字节,服务器接受smb write请求最大长度 SystemTime uint64 //8字节,处理协商请求服务器系统时间 ServerStartTime uint64 //8字节,服务器启动时间 SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"` //2字节,smb2表头开始到安全缓存区的偏移量 SecurityBufferLength uint16 `smb:"len:SecurityBlob"` //2字节,安全缓冲区长度 Reserved2 uint32 //4字节,协商上下文偏移量 SecurityBlob *gss.NegTokenInit //服务器返回二进制安全对象,遵循RFC2743标准 }
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/63abf97c-0d09-47e2-88d6-6bfa552949a5 SMB2 Negotiate 响应头结构
type SMB2PacketStruct ¶
type SMB2PacketStruct struct { ProtocolId []byte `smb:"fixed:4"` //4字节,协议标识符,必须设置为 0x424D53FE StructureSize uint16 //2字节,协议结构大小,必修设置为64 CreditCharge uint16 //2字节,smb2.0.2发送方必须设置为0 Status uint32 //4字节,客户端设置0,服务端返回 Command uint16 //2字节,需要包含smb2有效命令 CreditRequestResponse uint16 //2字节,标识客户端请求信用数 Flags uint32 //4字节,标识如何处理请求 NextCommand uint32 //4字节,复合请求使用,不用归零 MessageId uint64 //8字节,消息唯一标识符 Reserved uint32 //2字节,保留字段,归零 TreeId uint32 //4字节,标识树连接,必须设置0 SessionId uint64 //8字节,会话唯一标识符,必须设置0 Signature []byte `smb:"fixed:16"` //16字节,消息未签名则设0 }
SMB2标准头结构
type SMB2SessionSetup2RequestStruct ¶
type SMB2SessionSetup2RequestStruct struct { SMB2PacketStruct StructureSize uint16 Flags byte SecurityMode byte Capabilities uint32 Channel uint32 //4字节,保留字段,归零 SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"` SecurityBufferLength uint16 `smb:"len:SecurityBlob"` PreviousSessionID uint64 //8字节,会话标识符。服务端用来标识客户端会话 SecurityBlob *gss.NegTokenResp }
质询请求认证结构体、需要带上响应
type SMB2SessionSetupRequestStruct ¶
type SMB2SessionSetupRequestStruct struct { SMB2PacketStruct StructureSize uint16 Flags byte SecurityMode byte Capabilities uint32 Channel uint32 //4字节,保留字段,归零 SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"` SecurityBufferLength uint16 `smb:"len:SecurityBlob"` PreviousSessionID uint64 //8字节,会话标识符。服务端用来标识客户端会话 SecurityBlob *gss.NegTokenInit }
type SMB2SessionSetupResponseStruct ¶
type SMB2SessionSetupResponseStruct struct { SMB2PacketStruct StructureSize uint16 Flags uint16 SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"` SecurityBufferLength uint16 `smb:"len:SecurityBlob"` SecurityBlob *gss.NegTokenResp }
Click to show internal directories.
Click to hide internal directories.