Поддержка SMB / Samba на iOS? - PullRequest
       86

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

9 голосов
/ 07 ноября 2011

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

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

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

Ответы [ 4 ]

7 голосов
/ 16 января 2012

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

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

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

Правила WireShark!

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

Затем реализуйте следующие команды:

  • SMB_COM_NEGOTIATE
    SMB_COM_SESSION_SETUP_ANDX
    SMB_COM_TREE_CONNECT_* SMB_COM_NT_CREATE_ANDX
    SMB_COM_READ_ANDX
    SMB_COM_WRITE_ANDX
    SMB_COM_CLOSE
  • всеsponses for выше "

Единственное, что я могу добавить, это то, что вам также нужно реализовать TRANS2_FIND_FIRST2 запрос / ответ для запроса файлов в папке и, если вы хотите найтисколько общих папок предоставляет сервер, чтобы реализовать NetShareEnum Запрос / Ответ.

7 голосов
/ 30 марта 2013

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

1 голос
/ 27 марта 2014

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

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

1 голос
/ 07 ноября 2011

iOS не дает вам доступа к файловой системе, к которой вы, возможно, привыкли.Вы можете читать и писать файлы в приватной области вашего собственного приложения, но это все.Вы могли бы потенциально реализовать другую файловую систему в своем приложении, но вы не сможете использовать обычные файловые операции.

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

...