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/
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(用于调试和单元测试) |
使用示例
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操作
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)