下载并安装
点击downloa按钮,跳转到下载页面,因为windows版本安装,直接选择了最新版本下面的windows
下载完成后,直接安装,安装完成后,找到安装目录,我的安装在了D:\Program Files (x86)\ClamAV目录下
修改配置文件
进入conf_examples目录下,里面有如下两个文件夹
将两个文件复制到D:\Program Files (x86)\ClamAV目录下,修改文件名为clamd.conf 、freshclam.conf
-
修改clamd.conf文件(打开了一些注释,修改了下文件路径)
LogFile "D:\Program Files (x86)\ClamAV\clamd.log" PidFile "D:\Program Files (x86)\ClamAV\clamd.pid" DatabaseDirectory "D:\Program Files (x86)\ClamAV\database" TCPSocket 3310 TCPAddr localhost
-
修改freshclam.conf文件(打开了一些注释,原来没被注释的内容不动,修改了下文件路径)
DatabaseDirectory "D:\Program Files (x86)\ClamAV\database" UpdateLogFile "D:\Program Files (x86)\ClamAV\freshclam.log" PidFile "D:\Program Files (x86)\ClamAV\freshclam.pid" DatabaseMirror database.clamav.net
更新病毒库
运行clamAV目录下freshclam.exe可执行文件,进行病毒库更新,为了方便查看执行时,出现的问题,建议使用cmd窗口运行该文件,如果出现问题,cmd窗口会有明确提示。
更新病毒库完成后,运行clamAV目录下clamd.exe可执行文件,同样建议cmd窗口运行该文件。
编写Java程序,调用ClamAV,完成文件杀毒
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>fi.solita.clamav</groupId>
<artifactId>clamav-client</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.11</version>
</dependency>
</dependencies>
server:
port: 8877
clamav:
ipAddress: 127.0.0.1
port: 3310
timeout: 600000
spring:
servlet:
multipart:
max-file-size: 4096MB
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ClamAVTestMain {
public static void main(String[] args) {
SpringApplication.run(ClamAVTestMain.class, args);
}
}
import fi.solita.clamav.ClamAVClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClamAVClientConfig {
@Value("${clamav.ipAddress}")
private String ipAddress;
@Value("${clamav.port}")
private Integer port;
@Value("${clamav.timeout}")
private Integer timeout;
@Bean
public ClamAVClient getClamAVClient(){
return new ClamAVClient(ipAddress,port,timeout);
}
}
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI getOpenAPI(){
return new OpenAPI().info(new Info().version("0.0.1").description("文件查杀..."));
}
}
import fi.solita.clamav.ClamAVClient;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("scan")
public class TestController {
@Resource
ClamAVClient clamAVClient;
@Operation(summary = "测试服务器是否连接成功")
@GetMapping("")
public String test() throws IOException {
boolean ping = clamAVClient.ping();
if (ping){
System.out.println("服务器连接成功");
return "服务器连接成功";
}
System.out.println("服务器连接失败");
return "服务器连接失败";
}
@Operation(summary = "扫描文件")
@PostMapping(value = "file",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String scanFile(@RequestParam("multipartFile") MultipartFile multipartFile) throws IOException {
if (!multipartFile.isEmpty()){
InputStream inputStream = multipartFile.getInputStream();
byte[] scan = clamAVClient.scan(inputStream);
return new String(scan, StandardCharsets.UTF_8);
}
return "没有上传文件";
}
}