Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
smb-rs: The SMB2 Client in Rust
This project is the first rust implementation of SMB2 & 3 client -- the protocol that powers Windows file sharing and remote services. The project is designed to be a library, but also includes a CLI tool for basic operations.
While most current implementations are mostly bindings to C libraries (such as libsmb2, samba, or windows' own libraries), this project is a full implementation in Rust, with no dependencies on C libraries!
Getting started
Running the project is as simple as:
Check out the info and the copy sub-commands for more information.
For advanced usage, and crate usage, see the Advanced Usage section.
Features
General
- ✅ Full SMB 2.X & 3.X support.
- ✅ Async + Multi-threaded + Single-threaded backends.
- ✅ Compression + Encryption support.
- ✅ SMB over QUIC support.
- ✅ Cross-platform (Windows, Linux, MacOS).
You are welcome to see the project's roadmap in the GitHub Project.
Algorithm Support
| Type | Algorithm | Feature Name | |
|---|---|---|---|
| Signing | * | sign |
|
| Signing | HMAC_SHA256 | ✅ | sign_hmac |
| Signing | AES-128-GCM | ✅ | sign_gmac |
| Signing | AES-128-CCM | ✅ | sign_cmac |
| Encryption | * | encrypt |
|
| Encryption | AES-128-CCM | ✅ | encrypt_aes128ccm |
| Encryption | AES-128-GCM | ✅ | encrypt_aes128gcm |
| Encryption | AES-256-CCM | ✅ | encrypt_aes256ccm |
| Encryption | AES-256-GCM | ✅ | encrypt_aes256gcm |
| Compression | * | compress |
|
| Compression | LZ4 | ✅ | compress_lz4 |
| Compression | Pattern_V1 | 🟡 | compress_pattern_v1* |
| Compression | LZNT1 | ❌ | |
| Compression | LZ77 | ❌ | |
| Compression | LZ77+Huffman | ❌ |
[!NOTE] Some of SMB's suported compression algorithms are missing, since no proper crates are available for them.
Advanced Usage
Using the library
Check out the Connection struct, exported from the smb crate, to initiate a connection to an SMB server:
use Connection;
let connection = build;
connection.connect.await?;
let session = connection.authenticate.await?;
let tree = session.tree_connect.await?;
let file = tree.create.await?;
Switch Threading model
The project supports async, multi-threaded, and single-threaded backends. The async backend is the default one, but you can enable the other backends by using the following features:
async: Enables the async backend (default)single_threaded: Enables the single-threaded backend. Must disable default features.multi_threaded: Enables the multi-threaded backend. Must disable default features.
For example, to enable the multi-threaded backend, you can run:
If you're using the crate, you can enable the features in your Cargo.toml file:
[]
= { = "0.1", = ["multi_threaded", "sign", ...], = true }