准备工作: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. FastReport报表设计(仔细看)

    FastReport报表设计 2011-06-16 16:56:19|  分类: 系统开发|举报|字号 订阅     下载LOFTER我的照片书  |     目录 5.1 前言 5.2 基本概念及操 ...

  2. Android-WebView加载网络图片&网页

    加载网络图片: 链接地址:  http://bcs.link-us.com.cn/directBank/newHX149/directBank/h5/www/dist/img/e113.jpg 确保链 ...

  3. ABP 框架 数据库底层迁移 Mysql 集群

    技术交流,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 背景 笔者 目前架构的IOT 项目是使用abp 框架作为后台, ...

  4. Aspose.Words 将word2中的内容插入到word1中的指定位置

    将word2中的内容插入到word1中的指定位置(经测试可用) 在官网找到的例子,记录一下: public static void InsertDocumentAtBookmark(string da ...

  5. .NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)

    HangFire的拓展和使用 看了很多博客,小白第一次写博客. 最近由于之前的任务调度框架总出现问题,因此想寻找一个替代品,之前使用的是Quartz.Net,这个框架方便之处就是支持cron表达式适合 ...

  6. 网络流——最大流Dinic算法

    前言 突然发现到了新的一年什么东西好像就都不会了凉凉 算法步骤 建残量网络图 在残量网络图上跑增广路 重复1直到没有增广路(注意一个残量网络图要尽量把价值都用完,不然会浪费建图的时间) 代码实现 #i ...

  7. POI中文API文档

    一. POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二. HSSF概况 HSSF 是 ...

  8. CentOS 设置 oracle 开机自动启动

    CentOS 设置 oracle 开机自动启动 1. [root@localhost ~]# gedit /etc/oratab 文件内容为: # # This file is used by ORA ...

  9. Yarn 资源调度框架

    Yarn 资源调度框架    实现对资源的细粒度封装(cpu,内存,带宽)    此外,还可以通过yarn协调多种不同计算框架(MR,Spark)    概述        Apache Hadoop ...

  10. iPhone X Web 设计

    原文地址:https://webkit.org/blog/7929/designing-websites-for-iphone-x/ 开箱即用(开发者无需进行任何设置),在iPhone X中,Safa ...