2011-11-07 230 views
8

我查了一下iOS文檔,並將它google了一段時間,並得到了iOS不支持samba的印象(雖然有一個適用於越獄iPhone的samba應用程序)。iOS上的SMB/samba支持?

但是,那麼應用程序FileBrowser如何實現?這是否意味着他們自己實施了samba支持?

我還發現有一個名爲tango的開源庫,它爲samba提供了有限的支持。所以我的問題是,我可以得到最好的samba支持嗎?

回答

6

我花了相當一段時間來實現自己的SMB客戶端,所以我想在這裏分享一些經驗。

首先不要在您的生產代碼中使用探戈,因爲一旦您熟悉SMB,您就會意識到它的實現是有問題的,例如,它不支持unicode,並且在某些情況下,它不能正確填充,因此您無法訪問該文件夾。而且我也聽到有人說他們無法連接窗口7。

其次,要總結一下我的經驗,我發現jcifs guys had said the best:「誰想要實現CIFS需要知道一個很重要的事情 - ‘官方’CIFS文件是不準確的 ,並不能反映現實中沒有規範。不要相信任何你在IETF草案或SNIA文檔(同一文檔不同的格式)讀取。使用它只是作爲一個提示,最權威的參考就是不管你在電線上看到的。

Wireshark的規則!

...看看JCIFS的設計靈感,比如它如何放置通過MID查詢和響應地圖並對幀進行編碼和解碼。

然後執行以下命令:

  • SMB_COM_NEGOTIATE
    SMB_COM_SESSION_SETUP_ANDX
    SMB_COM_TREE_CONNECT_ANDX
    SMB_COM_NT_CREATE_ANDX
    SMB_COM_READ_ANDX
    SMB_COM_WRITE_ANDX
    SMB_COM_CLOSE
  • 以上 所有響應「

我可以補充一點的是,你還需要實現TRANS2_FIND_FIRST2請求/響應查詢一個文件夾內,如果你要的文件,以找出服務器多少共享文件夾暴露你需要實施NetShareEnum請求/響應。

+0

只是好奇,你的實現是否支持NTLMv2? – user523234

+0

No.忘了提及認證是需要相當一段時間才能實現的另一部分。我目前只實現NTLM。 – Qiulang

1

iOS不允許您訪問您可能習慣的文件系統。您可以在自己的應用程序的專用區域內讀寫文件,但僅此而已。您可能會在您的應用程序中實現另一個文件系統,但是您將無法使用正常的文件操作。

我敢打賭,FileBrowser在他們的應用程序內部實現了協議,並實現了像訪問頂層的文件系統。我猜你可以嘗試移植一個現有的samba庫或推出自己的。

7

對於iOS上的SMB操作,我使用了samba包中的libsmbclient(http://www.samba.org)。 你可以看看我的項目https://github.com/kolyvan/kxsmb(libsmbclient上的objective-c包裝)。目前它支持一組有限的SMB操作。它主要用於瀏覽本地網絡和從SMB共享中檢索文件。

+1

不錯的圖書館。我遇到了無法繼續使用'rake'命令的問題。我在[issue](https://github.com/)中找到[解決方案](http://www.jattcode.com/installing-autoconf-automake-libtool-on-mac-osx-mountain-lion/) kolyvan/kxsmb/issues/14)在你的github中。基本上我需要通過下面的方法安裝autoconf:(1)'curl -OL http:// ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz'(2)'tar -xzf autoconf-2.69.tar.gz '(3)'cd autoconf-2.69'(4)'./configure && make && sudo make install'我把這個信息放在這裏以防鏈接腐爛:) – Keale

1

iOS沒有任何API可以與SMB一起使用。但是,SMB目前由Microsoft記錄並實施它並非不可能(儘管不太容易)。我創建了一個免費軟件項目,其中包含大部分處理SMB所需的內容。見

https://sourceforge.net/projects/smb4ios/

+0

只實現現在已經過時的samba v1(例如windows xp compatible ) – bernstein

+0

@Nick Frolov如何獲得IP地址與PC名稱。我發現很多東西,但沒有取得任何成功。請幫幫我。謝謝 –