当前位置: 首页 > news >正文

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病毒检测时发出提示音
文件与目录控制
长选项参数格式描述
--tempdirDIRECTORY指定临时文件目录
--leave-temps[yes/no(*)]保留临时文件(默认 no
--force-to-disk[yes/no(*)]强制将嵌套文件扫描写入临时文件(默认 no
--gen-json[yes/no(*)]生成 JSON 元数据(仅限测试/开发)
--databaseFILE/DIR指定病毒数据库文件或目录
--official-db-only[yes/no(*)]仅加载官方签名(默认 no
--fail-if-cvd-older-thandays数据库过期时返回非零错误码
--logFILE保存扫描报告到文件
--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-listFILE从文件中读取待扫描文件列表
--remove[yes/no(*)]删除感染文件(默认 no
--moveDIRECTORY移动感染文件到指定目录
--copyDIRECTORY复制感染文件到指定目录
--excludeREGEX排除匹配正则表达式的文件
--exclude-dirREGEX排除匹配正则表达式的目录
--includeREGEX仅扫描匹配正则表达式的文件
--include-dirREGEX仅扫描匹配正则表达式的目录
高级功能
长选项参数格式描述
--bytecode[yes(*)/no]加载字节码(默认 yes
--bytecode-unsigned[yes/no(*)]加载未签名字节码(默认 no
--bytecode-timeoutN设置字节码超时(毫秒)
--statistics[none(*)/...]收集并打印执行统计信息
--detect-pua[yes/no(*)]检测潜在有害程序(默认 yes
--exclude-puaCAT排除指定类别的 PUA
--include-puaCAT仅加载指定类别的 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 .
    在这里插入图片描述

结果


----------- 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

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

关键差异说明

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

2.3 pyclamd操作

import pyclamdcd = pyclamd.ClamdNetworkSocket(host='192.168.65.1',port=3310,timeout=15)
print("ClamAV version:", cd.version())
result = cd.multiscan_file('/home')print(result)
http://www.xdnf.cn/news/696043.html

相关文章:

  • spring sentinel
  • 运营商地址和ip属地一样吗?怎么样更改ip属地地址
  • 4. Qt对话框(1)
  • zynq 级联多个ssd方案设计(ECAM BUG修改)
  • Springboot 项目一启动就获取HttpSession
  • QT6 关于使用MSVC2019,UI设计师自定义控件的制作和QT Cretor里面调用
  • Redis 用的 Gossip 协议有哪些具体消息?
  • 瓶装燃气送气工如何规范服务?
  • 浅析AI数据采集和标注在运动健康领域的落地应用
  • AD-PCB--元件库介绍及电阻电容模型的创建 DAY4
  • 可变参数函数
  • 74道Node.js高频题整理(附答案背诵版)
  • 记一次 Qwen3-0.6B 微调 内容提取
  • 让爱延续,共筑养老服务产业的美好未来
  • 二重积分 面积微元 微小矩形 dxdy 微小扇形 r * drdθ
  • 动静态库的制作
  • c++ 拷贝构造函数
  • JVM——Truffle:语言实现框架
  • 【机器学习基础】机器学习入门核心算法:朴素贝叶斯(Naive Bayes)
  • Spring AI 1.0 GA 深度解析:构建企业级AI应用的全栈实践指南
  • Linux的基本指令
  • vscode 终端 PATH 和python pip 不对
  • CSS (mask)实现服装动态换色:创意与技术的完美融合
  • HIS换代升级辅助脚手架:数据清洗、人员信息标准化、电子病历接口标准化、多模态影像接口标准化
  • 三级联动获取省市区
  • 8种常见数据结构及其特点简介
  • 排查Oracle文件打开数过多
  • JAVA 笔记
  • 【超详细教程】零基础本地部署DeepSeek-Coder-v2 16B!Ollama+GPU加速,100%跑通!
  • CCLINKIE转PROFINET:让执行器“丝滑”入网!