Rust ClamAV Client
A simple ClamAV client to send files, in-memory data, and byte streams to clamd for antivirus scanning. Supports Tokio and async-std.
Please note: The functions ping_socket, scan_file_socket, scan_buffer_socket, and scan_stream_socket are only available on Unix platforms.
Check out the examples below, the integration tests, or the documentation on docs.rs for more information on how to use this library.
Installation
Add this to your Cargo.toml:
[]
= "0.4.3"
To use the async functions in clamav_client::tokio, add this to your Cargo.toml:
[]
= { = "0.4.3", = ["tokio"] }
To scan Tokio streams, enable the tokio-stream feature instead and add this to your Cargo.toml:
[]
= { = "0.4.3", = ["tokio-stream"] }
Support for async-std is also available by enabling the async-std feature:
[]
= { = "0.4.3", = ["async-std"] }
Examples
Usage
let clamd_host_address = "localhost:3310";
// Ping clamd to make sure the server is available and accepting TCP connections
let clamd_available = match ping_tcp ;
if !clamd_available
// Scan file for viruses
let file_path = "tests/data/eicar.txt";
let scan_file_response = scan_file_tcp.unwrap;
let file_clean = clean.unwrap;
if file_clean else
// Scan in-memory data for viruses
let buffer = br#"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"#;
let scan_buffer_response = scan_buffer_tcp.unwrap;
let data_clean = clean.unwrap;
if data_clean else
Usage - Async with Tokio
async
More examples can be found in the tests.
Links
Development
Testing locally
For the tests to pass, you should start clamd as follows:
clamd -F --config-file=clamd/clamd.conf --datadir=clamd/database
and then run cargo test --all-features to cover all tests.
It doesn't really matter how you start clamd, as long as the options from clamd.conf are the same for your configuration.