准备工作: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. 美团基于STORM的应用

    https://my.oschina.net/dolphinboy/blog/2933843

  2. shell 命令 --ps aux | grep

    ps aux | grep  要查询的进程名 查询当前进程,如 ps aux | grep python 确认过需要查询的进程,就可以进行 kill -9 进程号等操作了.

  3. iOS笔记之UIKit_UINavigationController

    //设置导航条的样式 self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; //默认是白色  B ...

  4. 深拷贝&浅拷贝&引用计数&写时拷贝

    (1).浅拷贝: class String { public: String(const char* str="") :_str(]) { strcpy(_str,str); } ...

  5. ORACLE中的FTP例子代码

    http://blog.csdn.net/mashengwang/article/details/5982663 CREATE OR REPLACE DIRECTORY my_docs AS '/u0 ...

  6. Android-Throwable: A WebView method was called on thread 'JavaBridge'.

    错误详情: 01-30 03:36:52.441 12000-12048/cn.h5 D/@@@: e.ttt:java.lang.RuntimeException: java.lang.Throwa ...

  7. GeneralizedLinearAlgorithm in Spark MLLib

    GeneralizedLinearAlgorithm SparkMllib涉及到的算法 Classification Linear Support Vector Machines (SVMs) Log ...

  8. netcore的NLog使用小记

    1. 启动应用程序日志配置 修改Program.cs,在WebHostBuilder构建时配置日志 public static IWebHostBuilder CreateWebHostBuilder ...

  9. UWP 取消GridView、ListView鼠标选中、悬停效果

    因为经常碰到ListView或者ListBox之类的选中.鼠标悬停样式和自己设置的主题颜色不搭,这时就需要改变这些样式了. 而这里我通过ListView来说明,大致思路其实就是重新定义Item的Tem ...

  10. How do I convert an IIR filter into a FIR filter in digital signal processing?

    Maybe you were asking if there is some kind of design tool allowing to convert an IIR filter into an ...