Поддержка SMB / samba на iOS?

Я проверяю документ iOS, а также google на некоторое время и получаю впечатление, что iOS не поддерживает samba (хотя есть приложение samba для джейлбрейка iPhone).

но тогда как сделать приложение FileBrowser добивается этого? Означает ли это, что они реализовали поддержку samba самостоятельно ?

Я также считаю, есть библиотека с открытым исходным кодом под названием танго это обеспечивает ограниченную поддержку samba. Поэтому мой вопрос в том, что лучшая поддержка samba I может достать ?

4 ответов


Я использовал libsmbclient из пакета samba (http://www.samba.org) для операций SMB на iOS. Вы можете посмотреть на мой проект https://github.com/kolyvan/kxsmb (обертка objective-c на libsmbclient). На данный момент он поддерживает ограниченный набор операций SMB. Он в основном был предназначен для просмотра локальной сети и извлечения файлов из общих ресурсов SMB.


Я потратил довольно много времени на реализацию моего собственного клиента SMB, поэтому я хотел бы поделиться некоторым опытом здесь.

во-первых, не используйте tango в своем производственном коде, потому что, как только вы познакомитесь с SMB, вы поймете, что его реализация проблематична, например, он не поддерживает unicode, и в некоторых случаях он неправильно заполняется, поэтому вы не можете получить доступ к папке. И я также слышал, что люди сказали, что они не могут подключить окно 7 с ним.

во-вторых, суммируйте мой опыт, который я нахожу ребята jcifs сказали лучшее: "любой, кто хочет реализовать CIFS, должен знать одну очень важную вещь - "официальная" документация CIFS не является точной и не отражает реальность. Нет никакой спецификации. Не верьте ничему, что Вы читаете в проекте IETF или документе SNIA (тот же документ отличается форматированием). Используйте его только как подсказку. Окончательная ссылка-это все, что вы видите на проводе.

помощью Wireshark Правила!

... посмотрите на JCIFS для вдохновения дизайна, например, как он помещает запрос и ответ в карту по середине и кодирует и декодирует кадры.

затем выполните следующие команды:

  • 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 не дает вам доступ к файловой системе, к которой вы можете привыкнуть. Вы можете читать и писать файлы в частной области своего приложения, но это все. Вы можете реализовать другую файловую систему в своем приложении, но не сможете использовать обычные файловые операции.

Я бы поспорил, что FileBrowser реализует протокол внутри своего приложения и реализует файловую систему, такую как layer поверх этого для доступа. Я бы предположил, что вы можете попытаться перенести существующую библиотеку samba или сворачивай свой.


iOS не имеет API для работы с SMB. Тем не менее, SMB в настоящее время документирован Microsoft и реализовать его не невозможно (хотя и не легко). Я создал бесплатный проект, который содержит большую часть того, что вам нужно для обработки SMB. См.

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