ClamAV使用

1. docker安装

docker run -d --name clamav -p 3310:3310 clamav/clamav:stable

su clamav freshclam

2. 扫描

2.1 clamscan

以下是 clamscan 命令选项的表格化整理:

选项与参数
长选项 短选项 描述
--help -h 显示帮助信息
--version -V 打印版本号
--verbose -v 显示详细输出 ,直接扫描当前目录下的文件
--archive-verbose -a 显示扫描的压缩包内文件名
--debug 启用 libclamav 的调试消息
--quiet 仅输出错误消息
--stdout 将输出写入 stdout(不影响调试消息)
--no-summary 禁用扫描结束时的摘要
--infected -i 仅显示感染文件
--suppress-ok-results -o 跳过显示"OK"文件
--bell 病毒检测时发出提示音
文件与目录控制
长选项 参数格式 描述
--tempdir DIRECTORY 指定临时文件目录
--leave-temps [yes/no(*)] 保留临时文件(默认 no
--force-to-disk [yes/no(*)] 强制将嵌套文件扫描写入临时文件(默认 no
--gen-json [yes/no(*)] 生成 JSON 元数据(仅限测试/开发)
--database FILE/DIR 指定病毒数据库文件或目录
--official-db-only [yes/no(*)] 仅加载官方签名(默认 no
--fail-if-cvd-older-than days 数据库过期时返回非零错误码
--log FILE 保存扫描报告到文件
--recursive [yes/no(*)] 递归扫描子目录(默认 yes
扫描行为控制
长选项 参数格式 描述
--allmatch [yes/no(*)] 匹配后继续扫描文件(默认 no
--cross-fs [yes(*)/no] 扫描其他文件系统的文件(默认 yes
--follow-dir-symlinks [0/1(*)/2] 跟踪目录符号链接(0=从不,1=直接,2=总是)
--follow-file-symlinks [0/1(*)/2] 跟踪文件符号链接(0=从不,1=直接,2=总是)
--file-list FILE 从文件中读取待扫描文件列表
--remove [yes/no(*)] 删除感染文件(默认 no
--move DIRECTORY 移动感染文件到指定目录
--copy DIRECTORY 复制感染文件到指定目录
--exclude REGEX 排除匹配正则表达式的文件
--exclude-dir REGEX 排除匹配正则表达式的目录
--include REGEX 仅扫描匹配正则表达式的文件
--include-dir REGEX 仅扫描匹配正则表达式的目录
高级功能
长选项 参数格式 描述
--bytecode [yes(*)/no] 加载字节码(默认 yes
--bytecode-unsigned [yes/no(*)] 加载未签名字节码(默认 no
--bytecode-timeout N 设置字节码超时(毫秒)
--statistics [none(*)/...] 收集并打印执行统计信息
--detect-pua [yes/no(*)] 检测潜在有害程序(默认 yes
--exclude-pua CAT 排除指定类别的 PUA
--include-pua CAT 仅加载指定类别的 PUA
文件类型扫描
长选项 参数格式 描述
--scan-pe [yes(*)/no] 扫描 PE 文件(默认 yes
--scan-elf [yes(*)/no] 扫描 ELF 文件(默认 yes
--scan-ole2 [yes(*)/no] 扫描 OLE2 容器(默认 yes
--scan-pdf [yes(*)/no] 扫描 PDF 文件(默认 yes
--scan-swf [yes(*)/no] 扫描 SWF 文件(默认 yes

注:(*) 表示默认值。

执行代码

异常文件生成

https://www.eicar.org/download-anti-malware-testfile/

bash 复制代码
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar_test.txt
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar_test2.txt
  • 一次性扫描
    clamscan /home
  • 扫描当前文件夹内所有文件
    clamscan --recursive .
  • 扫描当前文件夹内所有文件(只输出异常的
    clamscan -o --recursive .
  • 仅显示感染文件
    只展示了感染,ok除外后结果为感染的文件
    clamscan -i --recursive .
  • 保存扫描结果(json)
    clamscan --gen-json=yes --debug --leave-temps --tempdir=/home/tmp/ /home/eicar/
    --leave-temps表示开启文件保存
    --tempdir表示生成临时文件的地址
    json文件中有Viruses的是感染类型:

    正常文件则没有Viruses:

结果参考

复制代码
----------- SCAN SUMMARY -----------
Known viruses: 8707456
Engine version: 1.4.2
Scanned directories: 1
Scanned files: 1
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 31.761 sec (0 m 31 s)
Start Date: 2025:05:27 09:54:24
End Date:   2025:05:27 09:54:56

结果描述

原字段 含义
Known viruses 已知病毒
Engine version 引擎版本
Scanned directories 扫描目录
Scanned files 扫描文件
Infected files 感染的文件
Data scanned 扫描数据
Data read 数据读取
Time 时间
Start Date 起始日期
End Date 结束日期

2.2 clamdscan

以下是 clamdscan 命令的中英文对照表格,整理为清晰的双栏格式:

clamdscan 命令选项对照表

英文选项 缩写/参数 中文说明
--help -h 显示帮助信息
--version -V 打印版本号并退出
--verbose -v 详细模式(输出更多信息)
--quiet 静默模式(仅输出错误信息)
--stdout 将结果输出到标准输出(不影响调试信息)
--log=FILE -l FILE 将扫描报告保存到指定文件
--file-list=FILE -f FILE 从指定文件中读取待扫描的文件列表
--ping -p A[:I] 检测 clamd 服务是否响应,可指定尝试次数 [A] 和间隔时间 [I]
--wait -w 等待 clamd 启动(最长 30 秒),可与 --ping 配合设置检测参数
--remove 删除受感染文件(谨慎使用)
--move=DIRECTORY 将受感染文件移动到指定目录
--copy=DIRECTORY 将受感染文件复制到指定目录
--config-file=FILE -c FILE 从指定配置文件读取配置
--allmatch -z 发现匹配后继续扫描文件
--multiscan -m 强制启用多文件扫描模式
--infected -i 仅输出受感染文件信息
--no-summary 禁用扫描结束时的汇总信息
--reload 请求 clamd 重新加载病毒数据库
--fdpass 将文件描述符传递给 clamd(适用于 clamd 以不同用户运行的情况)
--stream 强制以流模式传输文件到 clamd(用于调试和单元测试)

使用示例

bash 复制代码
# 扫描指定目录并输出详细信息
clamdscan -v /path/to/directory

# 扫描文件列表并将报告保存到日志
clamdscan -f file_list.txt -l scan.log

# 删除受感染文件(谨慎操作)
clamdscan --remove /path/to/file

区别clamdscan 与 clamscan

特性 clamdscan clamscan
工作模式 客户端模式(连接 clamd 守护进程) 独立模式(直接调用扫描引擎)
性能 更快(无需每次加载引擎和数据库) 较慢(每次运行都需初始化)
资源占用 低(共享已运行的 clamd 资源) 高(每次启动都加载完整引擎和数据库)
适用场景 生产环境、频繁扫描 临时扫描、调试
多线程支持 由 clamd 控制 自身支持(--multiscan 参数)
配置来源 使用 clamd 的配置 使用命令行参数或 clamscan 配置

关键差异说明

  • 性能与资源clamdscan 依赖后台守护进程 clamd,避免了重复加载引擎的开销,适合高频率扫描;clamscan 每次独立运行,灵活性高但资源消耗大。
  • 多线程clamscan 通过 --multiscan 启用多线程扫描,而 clamdscan 的多线程由 clamd 的配置决定。
  • 配置方式clamdscan 的扫描行为(如最大文件大小、扫描压缩文件等)由 clamd.conf 控制,而 clamscan 通过命令行参数调整。

2.3 pyclamd操作

bash 复制代码
import pyclamd

cd = pyclamd.ClamdNetworkSocket(host='192.168.65.1',port=3310,timeout=15)
print("ClamAV version:", cd.version())
result = cd.multiscan_file('/home')

print(result)
相关推荐
雷神乐乐3 小时前
Oracle正则表达式学习
数据库·sql·oracle·正则表达式
江沉晚呤时4 小时前
SQL Server 事务详解:概念、特性、隔离级别与实践
java·数据库·oracle·c#·.netcore
斯特凡今天也很帅4 小时前
clickhouse如何查看操作记录,从日志来查看写入是否成功
数据库·clickhouse
菜菜小蒙5 小时前
【MySQL】MVCC与Read View
数据库·mysql
不辉放弃5 小时前
HiveSQL语法全解析与实战指南
数据库·hive·大数据开发
Elastic 中国社区官方博客6 小时前
Elastic 和 AWS 合作将 GenAI 引入 DevOps、安全和搜索领域
大数据·数据库·elasticsearch·搜索引擎·云计算·全文检索·aws
20242817李臻6 小时前
李臻20242817_安全文件传输系统项目报告_第14周
数据库·安全
MyikJ6 小时前
Java求职面试:从Spring到微服务的技术挑战
java·数据库·spring boot·spring cloud·微服务·orm·面试技巧
betazhou6 小时前
oracle goldengate同步SQL server到SQL server的实时数据同步
数据库·mysql·oracle
alex18017 小时前
ubuntu磁盘挂载
linux·数据库·ubuntu