前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3调用clamav杀毒

python3调用clamav杀毒

作者头像
Elapse
发布2023-07-11 12:21:30
4730
发布2023-07-11 12:21:30
举报
文章被收录于专栏:E条咸鱼

介绍

ClamAV(简称 ClamAV)是一款开源的病毒扫描器,可以用来检测和清除电脑中的病毒、蠕虫、恶意软件等威胁。ClamAV 支持多种文件格式,包括 Windows 下的可执行文件、动态链接库、Office 文档、图像文件、电子邮件等,并且具有高度可扩展性和可配置性,能够满足不同用户的需求。

ClamAV 不仅可以作为本地扫描工具使用,还可以集成到网络中,提供网络级别的病毒防护功能。ClamAV 支持多种系统,包括 Windows、Linux、Mac OS、FreeBSD 等,并且能够在服务器端和客户端使用。

ClamAV 还提供了许多工具和库,可以帮助开发者在自己的应用中集成病毒扫描功能。例如,ClamAV 提供了命令行工具 clamscanclamdscan,可以在 shell 中执行扫描任务;ClamAV 还提供了编程库 libclamav,可以帮助开发者在自己的程序中集成病毒扫描功能

其实也没有夸它的意思,Linux上能用的杀软也挺多的,而且因为它是开源的,所以在病毒库的更新上也会比那些商用的杀软晚一些,主要是项目遇到了,我拿来水一篇用python调用后杀毒然后查询md5的文章

软件安装

  • Centos

Centos上安装的步骤可能多一丢丢,首先需要配置个网络源,然后执行这两条安装

代码语言:javascript
复制
yum install epel-release -y
yum install clamav clamav-update clamav-server clamav-server-systemd clamav-data clamav-filesystem clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd clamav-update clamav-scanner-systemd -y

接着开启服务,以及开机自启动

代码语言:javascript
复制
systemctl start clamav-freshclam
systemctl enable clamav-freshclam

systemctl start clamav-daemon
systemctl enable clamav-daemon

(ps: start clamav-daemon的时候可能会报错,但是我环境中没有影响我的使用)

  • Ubuntu

ubuntu就简单的多

代码语言:javascript
复制
apt install clamav

安装完成后,可以通过以下命令实现病毒库的更新

代码语言:javascript
复制
freshclam

ClamAV 还有许多其他的用法,例如在后台运行定期扫描、扫描特定的文件夹或文件等。可以使用 man clamscan 命令查看详细的用法。

代码实现

代码其实可以完全不需要安装第三方库来实现,主要是靠

代码语言:javascript
复制
import subprocess
import re
import hashlib

当然,subprocess这个库在Python 3.5 及以上版本中才可以使用,如果是以下的版本,则需要用os.system来实现执行命令的操作了

为了美化操作,我使用的是这个库

代码语言:javascript
复制
...
from tabulate import tabulate

我们先写一个计算md5值的方法

代码语言:javascript
复制
...
def calculate_md5(filename):
    hash_md5 = hashlib.md5()
    with open(filename, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

上面的代码是逐块读取文件的,这样可以避免一次性将整个文件读入内存,对于较大的文件来说可以节省内存

接着,开始写执行命令、获取结果的部分

代码语言:javascript
复制
...
output = subprocess.run(["clamscan", "-r", "/root/test/"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
os_result=str(output.stdout)

我的测试环境中,我将php这类木马文件放置在了/root/test/下,所以在-r后看到的目录就是需要扫描的目录

接着,使用re匹配输出的结果中是否发现了病毒文件

代码语言:javascript
复制
...
check_av=re.findall("(.*): .* FOUND",os_result)

做完这些操作后,就写一个输出的

代码语言:javascript
复制
...
if check_av:
    av_list=[]
    for i in check_av:
        print("[+] 检测到病毒文件:"+i)
        one_file=[]
        filename=str(i)
        file_md5=calculate_md5(i)
        one_file.append(filename)
        one_file.append(file_md5)
        av_list.append(one_file)
    headers=["文件名","MD5"]
    print(tabulate(av_list, headers))
else:
    print("[-] 未发现病毒文件")

最终效果是这样的

如果嫌每次都需要手动改太麻烦,那么可以加个选项,或者像下面这样简单点

代码语言:javascript
复制
file_path=str(input("请输入需要扫描的目录:"))

output = subprocess.run(["clamscan", "-r", file_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)

完整代码放在了github上

https://github.com/Ernket/python3_clamav_scan

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 E条咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 软件安装
  • 代码实现
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档