准备工作:linux下安装clamav成功,启动clamav并打开本地socket监听"/tmp/clamav.socket"

clamav开源工程目录:/usr/local/

修改配置文件:/usr/local/clamav/etc/clamd.conf

# Path to a local socket file the daemon will listen on.
# Default: disabled (must be specified by a user)
LocalSocket /tmp/clamd.socket

保存配置文件后,执行命令:

[root@ext sbin]# /usr/local/clamav/sbin/clamd &
[1] 25102
[root@ext sbin]# LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days! ***
LibClamAV Warning: *** Please update it as soon as possible. ***
LibClamAV Warning: **************************************************

[root@ext sbin]#

查看服务监听:

netstat -an|grep cla
unix        [ ACC ]     STREAM     LISTENING         /tmp/clamd.socket

该程序实现方式是通过读取文件内容,然后将文件内容以流的方式发送至clamav服务,通过对clamav服务的返回结果,来判断该文件是否存在病毒;

流程:

①、创建与clamav.socket的连接;

②、发送字符串 "zINSTREAM"到clamav,表示开始对数据流进行检查;

③、开始读取文件内容,然后讲文件内容以流的方式发送至clamav,发送内容 <= 10M ;(为了提高效率定为 10M ,可以根据自己实际情况调整该值大小)

④、数据发送完成后,发送 个字节的空字节至clamav,通过该方式通知clamav该次数据发送完成,可以开始返回检测结果;

⑤、读取clamav返回内容,其中包含内容 “stream: OK”时,表示该次检测的流中没有检测到病毒;否则,将会返回该病毒信息;

代码示例:

#define MAX_DATA_LEN 8000
#define MAX_FILE_LEN 1024*1024*10
#define START_CHECK_VIRUS "zINSTREAM" int virus_check(const char *szFileName){
int sock,fd;
int tmperror = ;
int len;
int revl = ;
unsigned long int todo = MAX_FILE_LEN;
char rbuf[];
uint32_t buf[MAX_DATA_LEN/sizeof(uint32_t)];
sock = CreateConnectLocaleSocket("/tmp/clamd.socket", &tmperror);
if (sock < ){
zlog_debug(cat,"CreateConnectLocaleSocket error");
return -;
}
fd = open (szFileName, O_RDONLY|);
if (fd < ){
zlog_debug(cat,"open [%s] err!",szFileName);
return -;
}
if(sendln(sock,START_CHECK_VIRUS, )){
zlog_debug(cat,"sendln zINSTREAM erro \n");
close(sock);
return -;
} while((len = read(fd, &buf[], sizeof(buf) - sizeof(uint32_t))) > ){
if((unsigned int)len > todo)
len = todo;
buf[] = htonl(len);
if(sendln(sock, (const char *)buf, len+sizeof(uint32_t))){
close(fd);
close(sock);
return -;
}
todo -= len;
if(!todo){
len = ;
break;
}
}
close(fd); *buf=;
sendln(sock, (const char *)buf, ); memset(rbuf,0x00,sizeof(rbuf));
revl = recv(sock, rbuf, sizeof(rbuf), ); close(sock);
return parse_Check_results(rbuf,revl);
} int parse_Check_results(const char *bufdata,int bufLen){
zlog_debug(cat,"parse_Check_results = [%s] ----------",bufdata);
if(!strcmp(bufdata,"stream: OK")){
return ;
}
else{
zlog_error(cat, "parse_Check_results err, info = [%s]",bufdata);
}
return -;
} int sendln(int sockd, const char *line, unsigned int len){
while(len)
{
int sent = send(sockd, line, len, );
if(sent <= )
{
if(sent && errno == EINTR)
{
continue;
}
return ;
}
line += sent;
len -= sent;
}
return ;
} int CreateConnectLocaleSocket(char *pszHostString, int *pnResCode){
int nConnectFd = ;
struct sockaddr_un struInAddr;//���� socket
if((nConnectFd=socket(AF_UNIX,SOCK_STREAM,))==-){
zlog_error(cat, "CreateConnectLocaleSocket err, errno = [%d] strerror(errno) = [%s]",
errno,strerror(errno));
*pnResCode=errno;
return -;
}
struInAddr.sun_family = AF_UNIX;
strcpy(struInAddr.sun_path, pszHostString);
if(connect(nConnectFd,(struct sockaddr *)&struInAddr,sizeof(struct sockaddr_un))==-)
{
zlog_error(cat, "CreateConnectLocaleSocket connect err, errno = [%d] strerror(errno) = [%s]",
errno,strerror(errno));
close(nConnectFd);
*pnResCode=errno;
return -;
}
return nConnectFd;
}

转载请注明出处

使用clamav模块对数据流进行病毒检测的更多相关文章

  1. 【BZOJ1966】[AHOI2005]病毒检测(动态规划)

    [BZOJ1966][AHOI2005]病毒检测(动态规划) 题面 BZOJ 洛谷 题解 我就蒯了一份代码随便改了改怎么就过了??? 从这道题目蒯的 代码: #include<iostream& ...

  2. 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测

    话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...

  3. clamav完整查杀linux病毒实战(转)

    开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...

  4. clamav完整查杀linux病毒实战(摘抄)

    http://dadloveu.blog.51cto.com/blog/715500/1882521 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,L ...

  5. 安装ClamAV对centos系统进行病毒查杀

    安装ClamAV 1.安装epel源 yum install epel-release 在安装了EPEL源后,运行下面的命令安装ClamAV # yum install clamav-server c ...

  6. ClamAV学习【7】——病毒库文件格式学习

    搜查到一份详细的ClamAV病毒文件格式资料(http://download.csdn.net/detail/betabin/4215909),英文版,国内这资料不多的感觉. 重点看了下有关PE的病毒 ...

  7. bzoj1966: [Ahoi2005]VIRUS 病毒检测

    Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...

  8. 【AHOI2005】病毒检测

    题目描述 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地. 科学家们经过几 ...

  9. BZOJ1966 [Ahoi2005]VIRUS 病毒检测 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1966 题意概括 现在有一些串和一个病毒模板.让你统计非病毒串的总数.串个数<=500. 串由 ...

随机推荐

  1. 二分图匹配-HK算法

    先把代码贴上,其他南京回来再补了.. #include <cstdio> #include <cstdlib> #include <cstring> #includ ...

  2. AngularJS AOP 实例

    AngularJS有种机制叫做拦截器(interceptor),它是$http扩展点,类似ASP.NET MVC的过滤器filter机制,对每个$http请求的发送和接收过程进行过滤. $httpPr ...

  3. centos rpm包下载地址

    这个是6.5的下载地址,其他版本可以退回目录找相应的版本 http://vault.centos.org/6.5/updates/x86_64/Packages/

  4. PB函数大全【转自 http://blog.csdn.net/xiaoxian8023 】

    Abs()功能计算绝对值.语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值.如果参数n的值为NULL,Abs()函数 ...

  5. linux命令 find的应用

    1.列出当前目录及子目录下所有文件和文件夹 2.在 /home目录下查找以 “.txt”结尾的文件名 3.在当前目录下查找所有以“.txt”结尾的文件 4基于目录深度搜索(向下最大深度限制为3) 5. ...

  6. Tencent interview

    1.常见的聚类算法 1):划分法:k-means 2):基于密度的方法: 2.EM 算法 EM算法是在概率模型中寻找参数的最大似然估计或者最大后验概率的算法,其中概率模型依赖于无法观测的隐藏变量.EM ...

  7. Redis-HA高可用方案Sentinel配置

    上一节中介绍了master-slave模式,在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然 ...

  8. python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: import urllib.request # 用于下载图片 import os im ...

  9. 【C#进阶】拥抱Lambda(二)

    语言的设计,真的是挺有意思的.第一次看这个代码[1]时,旁人随口了一句"哇,好多实心句号". 当时马上一个想法是--怎么实现的?返回了对象,然后再调用方法?然后就放下了,后来发现, ...

  10. C# Winform模仿百度日历

    想写博客不知道从何处开始,就从回忆开始吧. 第一个就从自定义日历控件开始 产生背景: 大概2015年时候有个项目要用到日历,用默认日历展示给用户看,用户毫不客气都说界面太丑,最好做成像百度日历那样方便 ...