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)