繁体   English   中英

iOS上的SMB / samba支持?

[英]SMB/samba support on iOS?

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

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

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

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

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

首先不要在生产代码中使用tango,因为一旦熟悉了SMB,你就会发现它的实现有问题,例如它不支持unicode,在某些情况下它没有正确填充,因此你无法访问该文件夹。 我也听到有人说他们无法连接窗口7。

其次,总结一下我的经验,我发现jcifs的人说得最好 :“任何想要实现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请求/响应。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM