ClamAV安装使用及API例子
ClamAV是一款由Sourcefire组织开发的开源杀毒引擎,Sourcefire同时也是Snort入侵检测引擎的所有者。ClamAV提供了一种更为快速灵活的框架用以检测恶意代码和软件产品。可以作为现有的台式机、文件服务器、邮件服务器以及其他需要杀毒扫描软件场景中杀毒扫描软件的补充工具或者替代产品。另外ClamAV程序包中还包含了libclamav库以及命令行可执行文件接口。同时也提供了freshclam命令行工具用以保证特征库的更新。
ClamAV的最新版本可以在http://www.clamav.net/download/sources/获得。也可以通过程序管理器自动安装。在Ubuntu系统中,输入一下命令即可自动安装:
$ apt-get install clamav clamav-freshclam
下面说一说ClamAV的安装过程(使用clamav-0.98.6版本):
(1) 下载并解压clamav-0.98.6.tar.gz:
# tar vxf clamav-0.98.6.tar.gz
(2) 添加用户组clamav和组成员clamav:
# groupadd clamav
# useradd –g clamav clamav
(3) 进入解压后的目录(源文件放在/usr/local/src中),并如下配置软件:
# ./configure --prefix=/usr/local/clamav
出现一个错误:OpenSSL not found
openssl的开发包没有安装,安装即可:
apt-get install libssl-dev
(4) 编译,安装:
make
make install
此时,还不能使用./clamscan去扫描可以文件,因为还没有特征库可加载到系统中,程序默认在share目录下的clamav文件夹中加载特征库,需要手动在上述路径下添加一个clamav文件夹,并且保证clamav用户能够对文件夹进行读写。
(5) 在/var/log/目录下添加两个log文件:clam.log和clam-update.log,所有者为clamav用户,并保证可读写权限。
(6) 修改/usr/local/clamav /etc/clam.conf将开始的有"Example"的那行用#注释掉。
(7) 修改/usr/local/clamav /etc/freshclam.conf将开始的有"Example"的那行用#注释掉。修改UpdateLogFile /var/log/freshclam.log 为UpdateLogFile /var/log/clam-update.log
(8) 用freshclam升级病毒库:
$ freshclam
freshclam运行以后,share目录下的clamav文件夹中已经存在了最新的特征库文件,下面就可以用clamscan命令进行文件的扫描了
Libclamav库API
libclamav库API提供了病毒扫描的各种函数接口。libclamav库使用的是病毒扫描法(Virus Scanner)。从病毒中提取的特征字符串被用一定的格式组织在一起并加上签名保护就形成了病毒库,clamav使用的病毒库一般后缀为.cvd文件。
在使用libclamav之前,必须调用cl_init()函数来初始化,初始化成功以后,可以调用cl_engine_new()函数来创建一个新的扫描引擎。扫描结束以后,需要调用cl_engine_free()这个函数来释放这个引擎结构。这三个函数的原型如下:
int cl_init(unsigned int options);
struct cl_engine *cl_engine_new(void);
int cl_engine_free(struct cl_engine *engine);
cl_init()和cl_engine_free()两个函数如果调用成功,将返回CL_SUCCESS,如果返回其他code,说明函数调用失败。
cl_init函数的实参传入CL_INIT_DEFAULT即可。
Cl_engine_new()如果调用成功将返回一个指向struct cl_engine结构体的指针,如果失败将返回NULL。
得到新的扫描引擎以后,需要进行特征库的加载,clamav提供了两个函数:
const char *cl_retdbdir(void);
int cl_load(const char *path, struct cl_engine *engine,
unsigned int *signo, unsigned int options);
cl_retdbdir返回ClamAV特征库的默认路径。
cl_load函数根据给出的具体特征库路径,加载单个特征文件,或者几个特征文件(给出的实参是文件夹)。第二个参数传入cl_engine_new得到的engine,第三个参数传出加载的特征码的条数,最后一个参数为加载的选项,一般传入CL_DB_STDOPT即可。
以上的步骤完成以后,需要调用cl_engine_compile()函数做最后的文件扫描前的准备,给函数原型为:
int cl_engine_compile(struct cl_engine *engine);
现在,可以进行文件的扫描了,文件扫描的函数为cl_scanfile,函数原型为:
int cl_scanfile(const char *filename, const char **virname,
unsigned long int *scanned, const struct cl_engine *engine,
unsigned int options);
该函数需要注意的一点是,virname在函数中指向了engine结构的表示目标扫描文件名称的内存,不能被直接释放。最后一个参数传入CL_SCAN_STDOPT,默认配置即可。
还有一个函数没有介绍:
cl_strerror(),可以将相关函数返回的不为CL_SUCCESS值的错误代码转换为说明错误相关的字符串。
以下是利用libclamav的API函数扫描文件的一个示例程序,只是展示了如何利用API进行文件扫描的最简单的流程,路径之类的采用的都是硬编码,实际使用时可以进行相应的修改。
利用一个样本文件进行试验,编译时加上参数-lclamav,并保证可以找到需要的.so文件和clamav.h文件,得到结果如下:
更多详情后续更新
ClamAV安装使用及API例子的更多相关文章
- API例子:用Python驱动Firefox采集网页数据
1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...
- Activity工作流(2)-入门安装运行第一个例子
转: Activity工作流(2)-入门安装运行第一个例子 置顶 2017年05月24日 15:58:50 li_ch_ch 阅读数:24432 版权声明:本文为博主原创文章,未经博主允许不得转载 ...
- Oauth2.0 认证的Web api例子
Oauth2.0的解释 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容.OA ...
- 转 UNIGUI安装教程、使用例子
转 UNIGUI安装教程.使用例子 http://my.oschina.net/u/582827/blog/203429?p={{currentPage-1}} 转 uniGui安装教程.使用例子 发 ...
- linux杀毒软件clamav安装与使用
#clamav安装与使用 ###第一步:Clamav下载http://www.clamav.net/downloads wget http://www.clamav.net/downloads/pro ...
- CentOS7安装Nginx实现API网关
参考 http://nginx.org/ http://nginx.org/en/linux_packages.html#stable https://www.npmjs.com/package/js ...
- golang API 例子实现
golang API 例子实现 http://files.cnblogs.com/files/rojas/astaxie.zip
- centos 下的 clamav 安装使用
1.下载 www.clamav.net #官方网站wget https://www.clamav.net/downloads/production/clamav-0.101.2.tar.gz 2.安装 ...
- ElasticSearch之安装及基本操作API
ElasticSearch 是目前非常流行的搜索引擎,对海量数据搜索是非常友好,并且在高并发场景下,也能发挥出稳定,快速特点.也是大数据和索搜服务的开发人员所极力追捧的中间件.虽然 ElasticSe ...
随机推荐
- ajaxSetup和普通的ajax方法.
我明明写了ajaxSetup()方法可是它有时候却不一定是会执行,因为比如我common.js里写的ajaxSetup()方法,然后index.js里写了ajax方法,可是有的时候ajaxSetup里 ...
- SEO站长必备的十大常用搜索引擎高级指令
作为一个seo人员,不懂得必要的搜索引擎高级指令,不是一个合格的seo.网站优化技术配合一些搜索引擎高级指令将使得优化工作变得简单.今日就和大家聊聊SEO站长必备的十大常用搜索引擎高级指令的那些事儿. ...
- iOS键盘出现时界面跟着往上推
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UI ...
- adobe pro破解说明
安装说明(仔细阅读!)1.在安装之前手工修改host文件的方法:在hosts文件(默认位置C:\windows\system32\drivers\etc\hosts)中添加如下几行# Adobe Bl ...
- 怎样按xc或yc转正视图
extern void create_view(void) { tag_t wcs_id,matrix_id; double mtx[9],wcs_pt[3]; double x_axis[3]={1 ...
- PostScript的简单例子-用粗线画一个圆
一 近期需要用到PostScript,查询资料学习PS的语法 简单的画一个圆的例子 %!PS-Adobe-3.0 /inch{72 mul} def 4.25 inch 5.5 inch 1.5 in ...
- 《HTML5秘籍》学习总结--2016年7月24日
前段时间因为工作中看到同事使用了一个type为date的<input>元素,直接就形成了一个日期选择的表单控件,当时觉得很神奇,以为是什么插件,就问了同事是怎么做出来的,同事告诉我这是HT ...
- win8 下 IIS APPPOOL\DefaultAppPool 登录失败的解决方法
来源:网络 添加ASP.NET网站时,选择添加"添加应用程序"连接sql server 2005(2008)可能会报始下的错误:(说明:2005必报错,2008选报错)" ...
- webstorm与SAE的svn仓库链接进行版本控制
这里把我使用webstorm与SAE的svn仓库链接: 1.先得设置webstorm中的版本控制,File->Settings->Version Control->Subversio ...
- DevExpress组件之——PopupMenu组件(转)
出处:http://www.cnblogs.com/xlx0210/archive/2010/07/14/1777366.html 目录在项目中使用了第三方控件DevExpress,得开始研究其他控件 ...