如何解决SMB 协议,将请求链接到响应
我正在实现一个 SMB 协议解码器。
我不明白在读取文件/命名管道时,客户端如何理解响应与许多打开的文件/命名管道之一相关联。
客户端发送文件描述符(file id),但服务器没有在响应中发回。服务器不会发送任何将请求链接到响应的数据。
您可以通过阅读有关 SMB 操作的信息来验证这一点,例如:SMB_COM_READ、TRANS_READ_NMPIPE 在 MS-CIFS 标准中。
如果有多个读取请求甚至多个文件/命名管道打开,那么客户端如何了解服务器响应了哪个请求?
解决方法
可以使用file_id作为key的map绑定请求,同时每个请求都被加入到队列中,每个响应的解码都基于这个队列。
(绑定请求)每个请求都会以file_id这个key放在map中,当后续收到文件的请求时,可以查到之前的所有请求。
(绑定请求和响应) 另外,每个请求都放在一个队列中,并为其分配一个file_id,对一个文件的请求的file_ids是相等的,当收到响应时,队列的顶部元素将是检索并从中获得一个file_id。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。