iOS上的SMB/samba支持?

Qiu*_*ang 9 filesystems iphone smb samba cifs

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

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

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

Qiu*_*ang 7

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


小智 7

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