古いZ80ベースのマシン用のSMBサーバーの開発を開始しました。このマシンは非常にシンプルなMS-DOSのようなオペレーティングシステム(マルチタスクなし、ユーザーの概念なし、FATファイルシステムのみ、ユニコードなし、8.3ファイル名のみ)を実行し、メモリが限られているため、私の最初のアイデアはSMBコアプロトコルのみを実装することです。TCPトランスポートを使用します。
今のところ、SMB_COM_NEGOTIATEコマンドに応答する非常に短いテストコードがあり、コアプロトコル(「PCネットワークプログラム1.0」)が目的の方言であることを示しています。"\\<server IP>"
それをテストするために、エクスプローラーウィンドウを開き、アドレスバーに入力して、Windows7マシンから接続しようとします。サーバーがnegotiateコマンドを受信し、(明らかに)正しい応答を送信することをWiresharkで確認しました。
問題: Windowsクライアントが応答を受信するとすぐに、一般的な「リソースにアクセスできません」エラーメッセージ(エラーコード0x80004005)が表示され、その後何も起こりません(それ以上のSMBメッセージは送信されません)。SMB_COM_TREE_CONNECTまたは同様のコマンドを受け取ることを期待していました。
Windows 7はコアプロトコルをサポートしていないのではないかと思っていましたが(非常に古く、セキュリティ機能がまったくありません)、ネゴシエートリクエストにコアダイアレクト名が表示されるのはなぜですか?多分私はいくつかのステップを逃していますか?サーバーは、ネゴシエート応答の後に追加のパケットを送信する必要がありますか?
クライアントOSはWindows7Ultimate 64ビットであり、プロセスで誰かが何か問題を発見した場合に備えて、要求と応答の両方のWiresharkダンプを次に示します。
リクエスト:
応答:
更新:コアダイアレクトの代わりにNT LM 0.12ダイアレクトを選択すると、クライアントからSESSION_SETUP_AND_REQUESTXコマンドを受け取ります。したがって、明らかに、コアプロトコルはWindows 7ではサポートされていないようです。とにかく、追加情報があれば幸いです。