Я потратил довольно много времени на реализацию своего собственного клиента 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 Запрос / Ответ.