SMBClient

Test

Swift SMB 客户端库和 iOS/macOS 文件浏览器应用程序。此库为 SMB 协议提供了一个高级接口,并允许您访问远程 SMB 服务器上的文件。使用 Swift 编写,不依赖于外部库。

用法

SMBClient 类隐藏了底层 SMB 协议,并为常见用例提供了更高级别的接口。以下示例演示了如何在远程 SMB 服务器上的共享驱动器中列出文件。

import SMBClient

let client = SMBClient(host: "198.51.100.50")

try await client.login(username: "alice", password: "secret")
try await client.connectShare("Public")

let files = try await client.listDirectory("")
print(files.map { $0.fileName })

try await client.disconnectShare()
try await client.logoff()

如果您想直接使用底层 SMB 协议,可以使用 Session 类。Session 类提供了一组与 SMB 消息对应的函数。您可以获得对 SMB 协议更精细的控制。

import SMBClient

let session = Session(host: "198.51.100.50")

try await session.connect()
try await session.negotiate()

try await session.sessionSetup(username: "alice", password: "secret")
try await session.treeConnect(path: "Public")

let files = try await session.queryDirectory(path: "", pattern: "*")
print(files.map { $0.fileName })

try await session.treeDisconnect()
try await session.logoff()

登录到远程 SMB 服务器

let client = SMBClient(host: "198.51.100.50")
try await client.login(username: "alice", password: "secret")

列出共享驱动器

let shares = try await client.listShares()
print(shares.map { $0.name })

连接到共享驱动器

try await client.connectShare("Public")

列出目录中的文件

let files = try await client.listDirectory("Documents/Presentations")
print(files.map { $0.fileName })

下载文件

let data = try await client.download(path: "Pictures/IMG_0001.jpg")

上传文件/目录

try await client.upload(data: data, path: "Documents/Presentations/Keynote.key")

示例应用程序

macOS 网络文件浏览器

macOS File Browser App

iOS 网络文件浏览器

iOS File Browser App iOS File Browser App

visionOS 网络文件浏览器

visionOS File Browser App

安装

将以下行添加到您的 Package.swift 文件中的依赖项中

dependencies: [
  .package(url: "https://github.com/kishikawakatsumi/SMBClient.git", .upToNextMajor(from: "0.1.0"))
]

支持的平台

支持的协议版本

支持 SMB 2.0 (又名 SMB2)。请参阅 Header 以了解协议支持,该支持遵循 SMB2 数据包头开放规范

支持的 SMB 消息

FAQ(常见问题解答)

如何连接到 macOS 文件共享?

要连接到 macOS 文件共享,您需要在“文件共享”部分的“共享”系统设置中启用“Windows 文件共享”。这将会在您的 macOS 上启用 NTLM v2 身份验证。

macOS File Sharing settings

与 SMB1 和 AFP 的兼容性

此库不支持 SMB1,并且在不久的将来也不会支持 SMB 1.0,这是因为 SMB1 和 SMB2 不兼容,并且具有完全不同的数据包结构。

相关地,不支持使用先于 SMB 的 Apple 文件协议 (AFP) 连接到 macOS 服务器。

OS X 10.9 Mavericks 及更高版本支持 SMB 作为主要的文件共享协议。

支持者和赞助商

开源项目依靠像您这样的人的慷慨和支持而蓬勃发展。如果您认为这个项目有价值,请考虑扩展您的支持。为项目做出贡献不仅可以维持其增长,还可以帮助推动创新和改进其功能。

要支持这个项目,您可以通过 GitHub Sponsors 成为赞助商。您的贡献将不胜感激,并将有助于保持项目的活力和蓬勃发展。感谢您的考虑!❤️