我已經開始爲舊的基於Z80的機器開發SMB服務器。這臺機器運行一個非常簡單的MS-DOS操作系統(沒有多任務,沒有用戶概念,只有FAT文件系統,沒有unicode,只有8.3文件名),並且內存有限,因此我的第一個想法是隻實現SMB核心協議。我將使用TCP傳輸。Windows 7實際上是否支持SMB核心協議?
至於現在,我只是一個非常短的測試代碼,只是回覆SMB_COM_NEGOTIATE命令,表明核心協議(「PC NETWORK PROGRAM 1.0」)是所需的方言。爲了測試它,我嘗試通過打開瀏覽器窗口並在地址欄中輸入"\\<server IP>"
從Windows 7機器進行連接。我用Wireshark驗證過,服務器接收到協商命令併發送(顯然)正確的響應。
問題:只要Windows客戶端接收響應,它顯示了一個通用的「無法訪問資源」錯誤消息(錯誤代碼0x80004005的),然後什麼也沒有發生(沒有進一步的SMB發送消息) 。我期待收到SMB_COM_TREE_CONNECT或類似的命令。我以爲Windows 7可能不支持核心協議(它很舊,它缺少任何安全功能),但是爲什麼它在協商請求中列出核心方言名稱?也許我錯過了一些步驟?協商響應後,服務器是否必須發送任何附加數據包?
客戶端操作系統是Windows 7旗艦版64位,這裏的請求,並在情況下,任何人的響應可以發現什麼不對的過程中雙方的Wireshark的轉儲:
請求:
響應:
更新:如果我選擇NT LM 0.12方言而不是核心方言,則會從客戶端收到SESSION_SETUP_AND_REQUESTX命令。顯然,Windows 7似乎確實不支持核心協議。無論如何,任何額外的信息將不勝感激。