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

news2025/2/26 17:56:28

在这里插入图片描述

介绍

官方文档: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 {
    @Autowired
    private 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 pyclamd

cd = pyclamd.ClamdNetworkSocket(host='192.168.1.115',port=13310,timeout=15)
cd.ping()

result = cd.scan_stream(cd.EICAR())

print(result)

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

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

相关文章

Cookie、Session、Token的关系和区别

关系 Session与Cookie&#xff1a;Session通常依赖于Cookie来工作。当服务器为客户端创建一个Session时&#xff0c;它会在服务器上存储与客户端相关的信息&#xff0c;并将一个唯一的SessionID通过Cookie发送给客户端。客户端在后续的请求中会携带这个Cookie&#xff08;包含…

视频监控管理平台的日志功能的重要性

日志功能的重要性 视频监控平台在日常工作生活中越来越重要&#xff0c;具有完备的平台日志&#xff0c;不仅可以增强视频监控系统的自身安全性&#xff0c;还能在更大程度上保障社会的安全与稳定。 &#xff08;一&#xff09;安全保障 视频监控平台作为安全防护…

流媒体学习之路(WebRTC)——音频NackTracker优化思路(8)

流媒体学习之路(WebRTC)——音频NackTracker优化思路&#xff08;8&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实…

C51学习归纳13 --- AD/DA转换

AD/DA转换实现了计算机和模拟信号的连接&#xff0c;扩展了计算机的应用场景&#xff0c;为模拟信号数字化提供了底层支持。 AD转换通常是多个输入通道&#xff0c;使用多路选择器连接到AD开关&#xff0c;实现AD多路复用的目的&#xff0c;提高利用率。 AD/DA转换可以使用串口…

电脑怎么卸载软件?多个方法合集(2024年新版)

在电脑的日常使用中&#xff0c;我们经常需要安装各种软件来满足不同的需求&#xff0c;但随着时间的推移&#xff0c;可能会出现一些软件不再需要或需要更换的情况。此时&#xff0c;及时从电脑上卸载这些不必要的软件是非常重要的。它不仅可以释放硬盘空间&#xff0c;还可以…

Stable Diffusion 设计 Logo 成品惊艳,比起人类手工设计的有什么不足之处?

Stable Diffusion不仅可以创作出精美的绘画作品&#xff0c;还能通过简单的prompt生成logo图案&#xff0c;并进一步衍生出更多的视觉海报和banner。 checkpoint ReV Animated ReV Animated - v1.2.2-EOL | Stable Diffusion Checkpoint | Civitai 这是我个人最喜欢的 2.5/3…

最小公倍数的求法

什么是最小公倍数&#xff1f; 最小公倍数是指两个或多个整数共有的最小正整数倍数。 如何求一组数据的最小公倍数&#xff08;Least Common Multiple&#xff0c;简称LCM&#xff09;&#xff1f; LCM 这组数据的公倍数 这组数据的最大公约数 (Greatest Common Divis…

redis-基础篇(1)

黑马redis-基础篇笔记 1. 初识redis REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的…

利用Systemverilog+UVM搭建SOC及ASIC的RTL验证环境

在集成电路设计的复杂世界中&#xff0c;验证环节是确保设计满足预期功能和性能要求的关键步骤。随着系统级芯片&#xff08;SOC&#xff09;和特定应用集成电路&#xff08;ASIC&#xff09;的规模和复杂性不断增加&#xff0c;传统的验证方法已经难以满足高效、准确的验证需求…

秋招突击——6/19——新作{括号生成、合并K个排序链表}

文章目录 引言新作括号生成个人实现实现时遇到的问题实现代码 参考思路实现代码 合并K个有序链表个人实现实现代码 参考实现实现代码 总结 引言 今天把第二篇论文投了&#xff0c;后续有审稿意见再说&#xff0c;然后在进行修改的。后续的生活要步入正轨了&#xff0c;每天刷题…

21.0docker企业级镜像仓库harbor(vmware 中国团队)

docker企业级镜像仓库harbor(vmware 中国团队) 网站下载harbor软件包 https://github.com/goharbor/harbor 查看软件安装harbor版本需求限制 本地环境需求已满足 点击下载harbor安装包 点击releases根据版本信息下载 下面的在线安装就是docker pull。离线就是下载之后…

上海中腾食品科学餐饮管理铸就企业食堂新模式

在当今企业运营中&#xff0c;食堂不仅是员工用餐的场所&#xff0c;更是企业文化和管理水平的体现。随着餐饮行业的不断发展&#xff0c;科学合理的餐饮管理模式成为了企业食堂成功的关键。上海中腾食品科技有限公司以其独特的餐饮管理模式&#xff0c;成功打造了企业食堂的新…

CSS3中鲜为人知但非常强大的 Clip-Path 属性

CSS3中鲜为人知但非常强大的 Clip-Path 属性 在CSS3中,clip-path属性可以让我们快速创建各种各样的不规则图形,而无需使用图片或者复杂的绘图工具。它可以帮助我们实现一些非常出色的视觉效果,但遗憾的是它并不是很常见。 clip-path属性可以接受多种不同的值,比如polygon()、…

AI网络爬虫:用deepseek批量提取coze扣子的智能体数据

动态加载页面&#xff0c;返回json数据&#xff1a; 翻页规律&#xff1a; https://www.coze.cn/api/marketplace/product/list?entity_type1&keyword&page_num17&page_size24&sort_type1&source1&msToken8_renFdIfix-XVFJAqAj8F_gSPv1V5A8NX_iL2teO…

【Java学习笔记】异常处理

生活中我们在使用一些产品的时候&#xff0c;经常会碰到一些异常情况。例如&#xff0c;使用ATM机取钱的时&#xff0c;机器会突然出现故障导致无法完成正常的取钱业务&#xff0c;甚至吞卡&#xff1b;在乘坐地铁时&#xff0c;地铁出现异常无法按时启动和运行&#xff1b;使用…

windows pyenv-win:pyenv 下载过慢

先到官网下载指定版本的 exe 文件 Python Releases for Windows | Python.org 根据自己电脑的 下载 32 或者 64 下载完成后将 exe 放入 install_cache 再到 powershell 中执行安装指令 pyenv install 3.12.4

LLM漫谈(七)| 使用PyTorch从零构建LLM

LLM是最流行AI聊天机器人的核心基础&#xff0c;比如ChatGPT、Gemini、MetaAI、Mistral AI等。在每一个LLM&#xff0c;有个核心架构&#xff1a;Transformer。我们将首先根据著名的论文“Attention is all you need”-https://arxiv.org/abs/1706.03762 来构建Transformer架构…

天津媒体邀约,及媒体名单?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 天津作为中国北方的重要城市&#xff0c;拥有丰富的媒体资…

OpenCV 车道检测

OpenCV 车道检测 前言模型分析车道检测相关链接 前言 如果要检测道路图像中的车道&#xff0c;方法之一是利用深度学习的语义分割技术。而在 OpenCV 中解决此问题可以使用边缘检测器。在本节中&#xff0c;我们将了解如何使用边缘检测和直线检测识别道路图像中的车道。 模型分…

C语言----自定义类型:联合和枚举

1.联合体 联合体的特点 像结构体一样&#xff0c;联合体也是一个或者多个成员构成的&#xff0c;这些成员可以是不同的类型 联合体的关键字&#xff1a;union 结构体的关键字&#xff1a;struct 枚举的关键字&#xff1a;enum 但是编译器只为最⼤的成员分配⾜够的内存空间…