准备工作: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. Kafka auto.offset.reset

    要从头消费kafka的数据,可以通过以下参数: Kafka auto.offset.reset = earliest

  2. unigui回车代替TAB

    unigui回车代替TAB 在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next ...

  3. hdu 1.3.4 shǎ崽 OrOrOrOrz

    简单的排序,注意输出即可 #include <iostream> #include <algorithm> using namespace std; int main() { ...

  4. .net core 与ELK(5)安装logstash

    1.下载https://www.elastic.co/downloads/logstash到/usr/local/src wget https://download.elastic.co/logsta ...

  5. winfrom图片放大器

    废话不多说,直接上图看效果,左上角是原图片大小,右边是局部放大的效果 主要代码贴在下面,picBox是原图控件名,picBox_Show是放大控件名 private void picBox_Paint ...

  6. OSLab多进程

    日期:2019/3/23 内容:Linux下与多进程相关的函数.     进程基本知识 定义 应用程序关于某数据集合上的一次运行活动. 特点 ·操作系统进行资源分配和调度的基本单位 ·进程是程序的一次 ...

  7. win7 docker 挂载共享目录

    在 win7 下用 docker 不像 win10 那样方便,安装包都不一样. 在 win7 下共享一个目录的方法如下: 1. 先设置 win7 到 VirtualBox 中 docker 用的那个虚 ...

  8. Redis中的批量操作Pipeline

    大多数情况下,我们都会通过请求-相应机制去操作redis.只用这种模式的一般的步骤是,先获得jedis实例,然后通过jedis的get/put方法与redis交互.由于redis是单线程的,下一次请求 ...

  9. js DOM 案例

    模态框 <html> <head> <meta charset="UTF-8"> <title>模态框</title> ...

  10. [Leetcode]316.去除重复字母

    题目 贪心方法 用一个两个数组vector<int>cnt,vector<bool>in_right_place: string res:目前符合条件的字符串,到代码结束的时候 ...