iOS上的SMB / samba支持?

时间:2011-11-07 02:57:50

标签: iphone filesystems samba smb cifs

我检查iOS文档并稍微谷歌并得到iOS不支持samba的印象(尽管有越狱iPhone的samba应用程序)。

但是,应用程序FileBrowser如何实现这一目标?这是否意味着他们自己实施了samba支持?

我还发现有一个名为tango的开源库,它为samba提供有限的支持。所以我的问题是我能得到最好的桑巴支持吗?

4 个答案:

答案 0 :(得分:7)

我花了很多时间来实现自己的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 请求/响应。

答案 1 :(得分:7)

我使用samba包(http://www.samba.org)中的libsmbclient进行iOS上的SMB操作。 您可以查看我的项目https://github.com/kolyvan/kxsmb(libsmbclient上的objective-c包装器)。目前它支持一组有限的SMB操作。它主要用于浏览本地网络并从SMB共享中检索文件。

答案 2 :(得分:1)

iOS不会授予您访问您可能习惯的文件系统的权限。您可以在自己应用程序的私有区域内读取和写入文件,但这就是全部。您可以在应用程序中实现另一个文件系统,但是您无法使用正常的文件操作。

我认为FileBrowser在他们的应用程序中实现协议,并在其上实现一个文件系统,就像访问一样。我猜您可以尝试移植现有的samba库,也可以自己移动。

答案 3 :(得分:1)

iOS没有任何API可与SMB配合使用。但是,SMB目前由Microsoft记录并实施它并非不可能(尽管也不容易)。我创建了一个免费软件项目,其中包含处理SMB所需的大部分内容。见

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