ファイル共有プロトコル、SMBとCIFSの違いを正しく理解できていますか?(前編)
[URL] http://www.atmarkit.co.jp/ait/articles/1501/19/news092.html
以下の MS さんのブログを見ると、“CIFS-The ancient version of SMB that was part of Microsoft Windows NT 4.0 in 1996. SMB1 supersedes this version. ” “SMB 1.0 (or SMB1)-The version used in Windows 2000, Windows XP, Windows Server 2003 and Windows Server 2003 R2 ” と書いあります。これを見て ??? と感じた方は、@IT さんの私の記事を見てみてください。
Windows Server 2012 R2: Which version of the SMB protocol (SMB 1.0, SMB 2.0, SMB 2.1, SMB 3.0 or SMB 3.02) are you using?
[URL] http://blogs.technet.com/b/josebda/archive/2013/10/02/windows-server-2012-r2-which-version-of-the-smb-protocol-smb-1-0-smb-2-0-smb-2-1-smb-3-0-or-smb-3-02-you-are-using.aspx
ところで、今月、cURL の新バージョン 7.40.0 がリリースされました。cURL (カール)は、HTTP や HTTPS、FTP などのプロトコルでファイル転送を行うための、Linux や BSD ではお馴染みのコマンドライン ツールです。新バージョン 7.40.0 では、SMB/CIFS プロトコルのサポートが追加されたそうです。
cURL
[URL] http://curl.haxx.se/
openSUSE 13.2 で cURL 7.40.0 の smb:// への対応を確認しました。(Windows 版の cURL 7.40.0 だと、smb:// を使えないかも)
この cURL の SMB/CIFS プロトコルのサポートが言っている SMB/CIFS は何かというと、SMB ダイレクト NT LM 0.12 の SMB 1.0/CIFS のことでした。現在の SMB/CIFS の解釈に従った正しい表現です。以下のキャプチャを見るとわかるように、NT LM 0.12 より古いダイアレクトと、SMB 2.0 以降の新しいダイアレクトには対応していません。使用する TCP ポートは、Microsoft-DS (445/TCP) でした。
static CURLcode smb_send_negotiate(struct connectdata *conn)
{
const char *msg = "\x00\x0c\x00\x02NT LM 0.12";
return smb_send_message(conn, SMB_COM_NEGOTIATE, msg, 15);
}
ソースコード (urldata.h) を見ると、NetBIOS Session (139/TCP) にも対応していないのがわかります。
#define PORT_SMB 445
cURL の TODO リスト を見ると、現在は、NTLMv1 にのみ対応し、NTLMv2 への対応は今後の予定だそうな。
追記)
Windows 版 (Win64 - Generic) の cURL 7.40.0 では smb:// を使えないようですが、Windows だと普通に SMB (SMB 1.0/CIFS より速い SMB 2.x 以降を含む) が使えるので、意図的に無効化されているのかもです。
手前味噌ですが、記事に関連して Linux 用の LLMNR レスポンダーとして xllmnrd というものを作って公開しております。現在は AD 設定を有効にしていない Samba サーバーへの Windows からのアクセスが IPv4 から IPv6 になる程度の効果しかありませんが、もし機会があれば紹介していただけるとありがたいです。
返信削除cURL の現時点での実装だとMicrosoft-DS(445/TCP) オンリーなので、NbNSは使えず、DNSによる名前解決またはIPアドレスの直接指定でないと smb:// は使えないということ。LLMNR が使えれるなら、ローカルのネットワーク内なら名前指定で接続 (IPv6) できそうですね。
返信削除