docker部署ClamAV集成java和python实现文件病毒扫描

在这里插入图片描述

介绍

官方文档:https://docs.clamav.net/manual/Signatures/DatabaseInfo.html

ClamAV 是一个开源的反病毒引擎,它由多个模块组成,负责不同的任务处理。以下是 ClamAV 的主要模块和它们的功能:

  1. clamd:clamd 是 ClamAV 的守护进程,它在后台运行,监听端口并等待其他进程发送文件以进行扫描。clamd 可以同时处理多个连接,并且可以在多个 CPU 核心上并行扫描文件。
  2. clamdscan:clamdscan 是一个命令行工具,它与 clamd 守护进程通信,将文件发送给 clamd 进行扫描。clamdscan 可以扫描单个文件或目录中的所有文件。
  3. lamscan:clamscan 是一个命令行工具,它直接扫描文件,而不依赖于 clamd 守护进程。clamscan 可以扫描单个文件或目录中的所有文件。
  4. freshclam:freshclam 是一个命令行工具,它用于更新 ClamAV 的病毒数据库。freshclam 可以自动定期检查并下载最新的病毒数据库。

核心概念

● freshclam 用来更新 clamav 病毒数据库。数据库放置在 /var/lib/clamav/,且文件的用户和用户组都是 clamav。
● clamd 是 clamav daemon 进程,它会读取配置文件 /etc/clamav/clamd.conf。clamd 不会自动查毒。
● clamdtop 是 clamd 进程的监控程序。查看 clamd 线程池。
● clamdscan 通知 clamd 进程进行查毒。通常执行 clamdscan --fdpass <文件或目录>。
● clamscan 与 clamd 无关,直接根据当前命令参数执行查毒,因此也不会读取配置文件 /etc/clamav/clamd.conf。通常执行 sudo clamscan -ri /。
● clamconf 显示或生成 clamav 的配置文件。
● clamonacc 是 on-access 扫描服务,当文件变化会立刻扫描。依赖 clamd。配置文件 /etc/clamav/clamd.conf 里以 OnAccess 开头的都是相关配置项。

病毒签名

category
Follow with the category.
Options for this field in official signatures include:
Adware 广告, Backdoor 后门, Coinminer 挖矿, Countermeasure, Downloader 下载器, Dropper 滴管, Exploit 蠕虫, File, Filetype, Infostealer, Ircbot, Joke, Keylogger, Loader 木马, Macro, Malware, Packed 木马, Packer, Phishing, Proxy, Ransomware, Revoked, Rootkit 恶意软件, Spyware间谍, Test 测试

Docker运行

docker run -it --rm \
--name "clam_container_01" \
--mount type=bind,source=/var/lib/docker/data/clamav/dbs/,target=/var/lib/clamav \
--publish 13310:3310 \--publish 17357:7357 \clamav/clamav:1.2

病毒扫描

下载病毒文件

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

命令行测试

mkdir eicar && cd eicar
curl -O https://secure.eicar.org/eicar.com \-O https://secure.eicar.org/eicar.com.txt \-O https://secure.eicar.org/eicar_com.zip \-O https://secure.eicar.org/eicarcom2.zip

在这里插入图片描述

Java API

@Slf4j
@RestController
@RequestMapping("/scan")
public class ClamAvScanTestController {@Autowiredprivate ClamAVClient clamAVClient;@GetMapping("")public String test() throws IOException {boolean pong = clamAVClient.ping();if (pong){System.out.println("服务器连接成功");return "服务器连接成功";}System.out.println("服务器连接失败");return "服务器连接失败";}@PostMapping(value = "/uploadFile")public ResultUtil<?> uploadFile(@RequestParam("file") MultipartFile file) {// 判断文件是否存在病毒try {InputStream inputStream = file.getInputStream();byte[] scan = clamAVClient.scan(inputStream);String res = new String(scan, StandardCharsets.UTF_8);log.info("检测结果:{}",res);if(ClamAVEnum.OK.getCode().equals(res)){System.out.println(ClamAVEnum.OK.getDesc());}else if(ClamAVEnum.ALLOCATE_MEMORY.getCode().equals(res)){return ResultUtil.error(ClamAVEnum.ALLOCATE_MEMORY.getDesc());}else {return ResultUtil.error(ClamAVEnum.INFECTED.getDesc());}} catch (IOException e) {try {clamAVClient.ping();} catch (IOException ioException) {return ResultUtil.error("连接杀毒服务失败!");}return ResultUtil.error("连接杀毒服务异常或上传文件超过杀毒软件最大文件限制!");}return ResultUtil.ok("ok");}
}

Python API

import pyclamdcd = pyclamd.ClamdNetworkSocket(host='192.168.1.115',port=13310,timeout=15)
cd.ping()result = cd.scan_stream(cd.EICAR())print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h>int main() {// 设置环境变量 MY_VAR 的值为 "hello_world"if (setenv("MY_VAR", "hello_world", 1) ! 0…

【数据挖掘】机器学习中相似性度量方法-闵可夫斯基距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Android简单登录界面布局设计

<ImageView android:id“id/yxlg” android:layout_marginTop“12dp” android:layout_marginLeft“80dp” android:layout_width“30dp” android:layout_height“30dp” android:background“drawable/net” /> <TextView android:paddingTop“5dp” andr…

Go 语言学习笔记之数组与切片

大家好&#xff0c;我是码农先森。 数组与切片的区别 在 Go 语言中&#xff0c;数组和切片是两种不同的数据结构&#xff0c;它们之间有以下主要区别。 参数长度&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;数组的长度是固定的&#xff0c;在创建时就需要指…

图片覆盖攻击

点击劫持的本质是一种视觉欺骗。顺着这个思路&#xff0c;还有一些攻击方法也可以起到类似的作 用&#xff0c;比如图片覆盖。 一名叫 sven.vetsch 的安全研究者最先提出了这种 Cross Site Image Overlaying 攻击&#xff0c;简称 XSIO。sven.vetsch 通过调整图片的 style 使得…

DVWA-XSS(Stored)-beef

用Low Level来测试beef的使用 beef配置 如果kali没有beef的&#xff0c;进行下载 apt install beef-xss使用 beef-xss # 命令方式启动 beef-xss-stop # 命令方式关闭 systemctl start beef-xss.service #开启beefsystemctl stop beef-xss.service #关闭…

前端 CSS 经典:backface-visibility 属性

前言&#xff1a;backface-visibility 属性可以使反转 180deg 的元素隐藏&#xff0c;使用这个属性实现卡片翻转效果 效果 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-…

记MySQL事务+消息队列引起的问题

问题描述&#xff1a; 先说一下流程&#xff1a;后端保存前端提交的图表信息&#xff0c;然后发送异步消息到消息队列&#xff0c;由下游服务去处理图表信息。 部署项目到服务器&#xff0c;验证项目功能的时候&#xff0c;出现了以下错误&#xff1a;数据库存在数据。下游服…

Spring Boot+vue社区养老系统(智慧养老平台)

使用技术&#xff1a; springbootvueMySQL 主要功能&#xff1a; 管理员 登录个人资料密码管理, 用户管理:床位类型管理,床位管理,护工管理,老人管理 咨询登记管理&#xff0c;预约登记管理,老人健康信 息管理,费用管理等功能.护工角色包含以下功能: 护工登录&#xff0c;个…

Elastaticsearch与SpringBoot集成的互联网的实战分享

以前有过类似的文章&#xff0c;今天升级版分享重磅内容&#xff0c;Elastaticsearch与SpringBoot集成的互联网的实战。 一、需求分析&#xff1a; 起因是这样的&#xff0c;产品有这样一个需求&#xff1a;数据中的标题、内容、关键词等实现结构化搜索和半结构化搜索、数据时…

自2008年金融危机以来首次,欧洲AAA级CMBS投资者面临亏损

在欧洲预期损失之前&#xff0c;美国AAA级CMBS投资者已经遭受了打击。即便是最高信用等级的投资也不再安全&#xff0c;全球金融系统可能存在一些严重的问题。 历史罕见&#xff0c;最安全的AAA级债权人&#xff0c;在没有发生经济危机的情况下&#xff0c;出现了损失&#xff…

外排序(C语言实现)

前言 本篇博客讲解一下外排序&#xff0c;看这篇排序你的先去看一下&#xff1a;八大经典排序算法-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;排序_普通young man的博客-CSDN博客 若有问题 评论区见&#x1f4dd; &#x1f3…

【数据结构】带头双向循环链表的实现及链表顺序表的区别

目录 一、带头双向循环链表接口实现 连接关系&#xff1a; 创建哨兵位&#xff08;表头&#xff09;&#xff1a; 头插——头删&#xff1a; 尾插——尾删&#xff1a; 查找——打印&#xff1a; 指定位置pos前插入&#xff0c;删除pos位置&#xff1a; 链表销毁&#x…

setInterval 定时任务执行时间不准验证

一般在处理定时任务的时候都使用setInterval间隔定时调用任务。 setInterval(() > {console.log("interval"); }, 2 * 1000);我们定义的是两秒执行一次&#xff0c;但是浏览器实际执行的间隔时间只多不少。这是由于浏览器执行 JS 是单线程模式&#xff0c;使用se…

解决ArcGIS导出的svg格式的图片插入Word后的字体问题

背景 在ArcGIS中设置字体为Times New Roman&#xff0c;但导入Word后字体转为等线。 ArcGIS中的Layout 导入Word​​​​​​ 原因分析 Word无法识别嵌入进SVG格式文件中的字体。 解决方案 在Export Layer窗口中&#xff0c;将Embed fonts取消勾选&#xff0c;Convert cha…

【深度学习】 探讨Stable Diffusion模型的训练及其偏向性

探讨Stable Diffusion模型的训练及其偏向性 近年来&#xff0c;生成式模型在图像生成领域取得了显著进展&#xff0c;特别是Stable Diffusion模型。作为一种基于扩散过程的生成模型&#xff0c;Stable Diffusion模型展现了生成高质量图像的巨大潜力。然而&#xff0c;与所有机…

本地离线模型搭建指南-RAG架构实现

搭建一个本地中文大语言模型&#xff08;LLM&#xff09;涉及多个关键步骤&#xff0c;从选择模型底座&#xff0c;到运行机器和框架&#xff0c;再到具体的架构实现和训练方式。以下是一个详细的指南&#xff0c;帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

基于SSM+Vue+微信小程序的大学生就业平台系统+毕业论文

项目包含前台和后台两部分&#xff1a;多角色登录&#xff0c;功能完善&#xff0c;界面优美 前台主要功能实现&#xff1a;首页列表查看、求职信息管理、简历管理、面试邀请管理、个人中心等 后台主要功能实现&#xff1a;首页、个人中心、学生管理、企业管理、企业类型管理…

浏览器插件利器-allWebPluginV2.0.0.14-bata版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

【C++】初始化列表、匿名对象、static成员、友元、内部类

文章目录 一、初始化列表构造函数体赋值初始化列表explicit关键字 二、匿名对象三、static成员四、友元友元函数友元类 五、内部类六、练习题 一、初始化列表 构造函数体赋值 实际上&#xff0c;构造函数的函数体内&#xff0c;并不是对 对象 初始化的地方&#xff0c;而是对…