【问题标题】:SMB/samba support on iOS?iOS 上的 SMB/samba 支持?
【发布时间】:2011-12-23 08:33:29
【问题描述】:

我查看了 iOS 文档并在谷歌上搜索了一段时间,并得到 iOS 不支持 samba 的印象(尽管有一个用于越狱 iPhone 的 samba 应用程序)。

但是,FileBrowser 应用程序是如何做到这一点的呢?这是否意味着他们自己实现了 samba 支持?

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

【问题讨论】:

    标签: iphone filesystems samba smb cifs


    【解决方案1】:

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

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

    【讨论】:

    • 只实现现在过时的 samba v1(例如与 windows xp 兼容)
    • @Nick Frolov 我如何获取带有 PC 名称的 IP 地址。我发现了很多东西,但没有得到任何成功。请帮我。谢谢
    【解决方案2】:

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

    【讨论】:

    • 不错的图书馆。我遇到了无法继续使用rake 命令的问题。我在您的 github 中的 issue 中找到了 solution。基本上我需要通过执行以下操作来安装 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 我把这个信息放在这里以防链接腐烂:)
    【解决方案3】:

    我花了很多时间来实现自己的 SMB 客户端,所以我想在这里分享一些经验。

    首先不要在您的生产代码中使用 tango,因为一旦您熟悉了 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 请求/响应。

    【讨论】:

    • 只是好奇,您的实现是否支持 NTLMv2?
    • 没有。忘了提到身份验证是另一个需要相当长的时间来实现的部分。我目前只实现 NTLM。
    【解决方案4】:

    iOS 无法让您访问您可能习惯使用的文件系统。您可以在自己的应用程序的私有区域内读取和写入文件,仅此而已。您可能会在您的应用程序中实现另一个文件系统,但您将无法使用正常的文件操作。

    我敢打赌 FileBrowser 在他们的应用程序中实现了协议,并在其之上实现了一个文件系统,例如用于访问的层。我猜你可以尝试移植一个现有的 samba 库或者自己开发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 2011-04-09
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2015-05-07
      • 1970-01-01
      相关资源
      最近更新 更多