go-clamav是一个用Go语言编写的库和工具集,旨在与ClamAV防病毒软件进行无缝集成。它提供了一个简洁易用的REST API,用于调用ClamAV扫描、获取统计信息、版本信息等功能。同时,go-clamav 还包含一个命令行工具clamd-ctl,用于与 Clamd守护进程通信并执行各种操作。
go-clamav 提供了丰富的核心功能来与 ClamAV 服务器进行交互。这些功能包括但不限于:
- Ping: 检查 ClamAV 服务器是否可达。
- Version: 获取 ClamAV 版本信息。
- VersionCommands: 获取 ClamAV 版本和支持的命令列表。
- Stats: 获取 ClamAV 的统计信息。
- Scan: 扫描单个文件或目录。
- ContScan: 连续扫描文件或目录。
- MultiScan: 并行扫描多个文件或目录。
- AllMatchScan: 扫描文件或目录,并在找到匹配时继续扫描。
- Instream: 通过流方式扫描数据。
- Reload: 重新加载病毒数据库。
- Shutdown: 关闭 ClamAV 服务器。
- 安装clamav
使用 APT(Debian/Ubuntu)
sudo apt-get update
sudo apt-get install -y clamav clamav-daemon
首先,你需要安装Go编译器并设置好开发环境。然后你可以通过以下命令获取 go-clamav
go get -u github.com/hq0101/go-clamav
下面是一些简单的示例,演示如何使用 go-clamav 库连接到 ClamAV 服务器并执行基本的操作。
package main
import (
"fmt"
"github.com/hq0101/go-clamav/pkg/clamav"
"time"
)
func main() {
client := clamav.NewClamClient("tcp", "192.168.127.131:3310", 10*time.Second, 30*time.Second)
response, err := client.Ping()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Response from ClamAV:", response)
version, err := client.Version()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("ClamAV Version:", version)
}
编译并运行你的程序
go run main.go
package main
import (
"fmt"
"github.com/hq0101/go-clamav/pkg/clamav"
"time"
)
func main() {
client := clamav.NewClamClient("unix", "/var/run/clamav/clamd.ctl", 10*time.Second, 30*time.Second)
// Ping ClamAV server
response, err := client.Ping()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Ping Response from ClamAV:", response)
// Get ClamAV version
version, err := client.Version()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("ClamAV Version:", version)
}
编译并运行你的程序
go run main.go
go-clamav 使用 Swagger 进行了文档化,方便开发者查阅和测试。
- 启动clamd-api 服务
make run
浏览器打开swagger http://127.0.0.1:8080/swagger/index.html
clamd-ctl是一个Go语言编写的命令行工具,用于与ClamAV服务器进行通信,并执行各种操作。
- 帮助手册
clamd-ctl-v0.1.0.linux-amd64 -h
- 使用TCP连接clamd
clamd-ctl-v0.1.0.linux-amd64 ping -a 192.168.127.131:3310 -n tcp
- 使用UNIX套接字连接clamd
clamd-ctl-v0.1.0.linux-amd64 ping -a /var/run/clamav/clamd.ctl -n unix
- 使用配置文件
创建一个配置文件,例如 clamd-ctl.yaml
clamd_network_type: "tcp" # 连接类型,可以是 "tcp" 或 "unix"
clamd_address: "127.0.0.1:3310" # clamd 服务器地址(对于 TCP)或套接字路径(对于 UNIX)/var/run/clamav/clamd.ctl
clamd_conn_timeout: "10s" # 连接超时时间
clamd_read_timeout: "30s" # 读取超时时间
使用此配置文件运行命令
clamd-ctl-v0.1.0.linux-amd64 ping -f ./configs/clamav-cli.yaml
- 获取 ClamAV 版本
clamd-ctl-v0.1.0.linux-amd64 version -a 192.168.127.131:3310 -n tcp
clamd-ctl-v0.1.0.linux-amd64 versioncommands -a 192.168.127.131:3310 -n tcp
- 获取 ClamAV 统计信息
clamd-ctl-v0.1.0.linux-amd64 stats -a 192.168.127.131:3310 -n tcp
- 扫描单个文件或目录
clamd-ctl-v0.1.0.linux-amd64 /path/to/file -a 192.168.127.131:3310 -n tcp
- 连续扫描文件或目录
clamd-ctl-v0.1.0.linux-amd64 contscan /path/to/file -a 192.168.127.131:3310 -n tcp
- 并行扫描多个文件或目录
clamd-ctl-v0.1.0.linux-amd64 multiscan /path/to/file -a 192.168.127.131:3310 -n tcp
- 扫描文件或目录并在找到匹配时继续扫描
clamd-ctl-v0.1.0.linux-amd64 allmatchscan /path/to/file -a 192.168.127.131:3310 -n tcp
- 重新加载病毒数据库
clamd-ctl-v0.1.0.linux-amd64 reload -a 192.168.127.131:3310 -n tcp
- 关闭 ClamAV 服务器
clamd-ctl-v0.1.0.linux-amd64 shutdown -a 192.168.127.131:3310 -n tcp
- 流方式扫描数据
clamd-ctl-v0.1.0.linux-amd64 instream "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" -a 192.168.127.131:3310 -n tcp
通过以上命令,你可以方便地与 ClamAV 服务器进行互动,并利用其强大的防病毒功能来保护你的系统。 希望这些内容能帮助你快速上手 go-clamav 项目。如果有任何问题或建议,欢迎提交issue或 pull request!