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,一经查实,立即删除!

相关文章

java通过 notify和 wait 实现线程间的通信

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

【专业英语 复习】第2章 The Internet, the Web, and Electronic Commerce

1. 单选题 (1分) "Wiki" comes from the Hawaiian word for ________.____ A fast B social C small D changeable 正确答案&#xff1a;A 翻译&#xff1a;Wiki来源于夏威夷语中的________。 2. 单选题 (1分) This type of e-commerce often resembles the elec…

WHAT - 高性能和内存安全的 Rust(一)

目录 一、介绍1.1 示例代码1.2 关键特性内存安全零成本抽象&#xff1a;高效性能示例代码&#xff1a;使用迭代器的零成本抽象示例代码&#xff1a;泛型和单态化总结 并发编程&#xff1a;防止数据竞争Rust 并发编程示例Rust 的所有权系统防止数据竞争总结 丰富的类型系统包管理…

2024.06.11校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 美团2025届北斗计划正式启动&#xff08;内推&#xff09; 校招 | 美团2025届北斗计划正式启动&#xff08;内推&#xff09; 2、实习 | 沃尔沃汽车 Open Day & 实习招聘 …

医学记录 --- 腋下异味

逻辑图地址 症状 病因 汗液分泌旺盛&#xff1a;由于天气炎热、活动出汗、肥胖等因素导致汗液分泌旺盛&#xff0c;可引起腋下有异味表现。在这种情况下&#xff0c;建议保持身体清洁&#xff0c;特别是在炎热和潮湿的环境下。可以使用抗菌洗液、喷雾或霜剂来帮助减少细菌滋…

(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;在创建时就需要指…

微信小程序学习(十三):mobx-miniprogram和miniprogram-computed

1、mobx-miniprogram 1.1 介绍 mobx-miniprogram 是针对微信小程序开发的一个简单、高效、轻量级状态管理库&#xff0c;它基于Mobx状态管理框架实现。 使用 mobx-miniprogram 定义管理的状态是响应式的&#xff0c;当状态一旦它改变&#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;数据库存在数据。下游服…

C++ 音视频传输

目录 一、概述 二、音视频采集 1、视频采集 2、音频采集 三、音视频编码 四、网络传输 五、音视频解码 六、音视频播放 1、视频播放 2、音频播放 七、音视频同步 1. 时间戳管理 2. 缓冲控制 3. 同步策略 3.1 视频为主 3.2 音频为主 3.3 同步点策略 3.4 缓冲区…

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…