clamav Java_ClamAV安装使用及API例子
ClamAV是一款由Sourcefire組織開發(fā)的開源殺毒引擎,Sourcefire同時(shí)也是Snort入侵檢測(cè)引擎的所有者。ClamAV提供了一種更為快速靈活的框架用以檢測(cè)惡意代碼和軟件產(chǎn)品。可以作為現(xiàn)有的臺(tái)式機(jī)、文件服務(wù)器、郵件服務(wù)器以及其他需要?dú)⒍緬呙柢浖?chǎng)景中殺毒掃描軟件的補(bǔ)充工具或者替代產(chǎn)品。另外ClamAV程序包中還包含了libclamav庫(kù)以及命令行可執(zhí)行文件接口。同時(shí)也提供了freshclam命令行工具用以保證特征庫(kù)的更新。
ClamAV的最新版本可以在http://www.clamav.net/download/sources/獲得。也可以通過(guò)程序管理器自動(dòng)安裝。在Ubuntu系統(tǒng)中,輸入一下命令即可自動(dòng)安裝:
$?apt-get?install?clamav?clamav-freshclam
下面說(shuō)一說(shuō)ClamAV的安裝過(guò)程(使用clamav-0.98.6版本):
(1)?下載并解壓clamav-0.98.6.tar.gz:
#?tar?vxf?clamav-0.98.6.tar.gz
(2)?添加用戶組clamav和組成員clamav:
#?groupadd?clamav
#?useradd?–g?clamav?clamav
(3)?進(jìn)入解壓后的目錄(源文件放在/usr/local/src中),并如下配置軟件:
#?./configure?--prefix=/usr/local/clamav
出現(xiàn)一個(gè)錯(cuò)誤:OpenSSL?not?found
openssl的開發(fā)包沒有安裝,安裝即可:
apt-get?install?libssl-dev
(4)?編譯,安裝:
make
make?install
此時(shí),還不能使用./clamscan去掃描可以文件,因?yàn)檫€沒有特征庫(kù)可加載到系統(tǒng)中,程序默認(rèn)在share目錄下的clamav文件夾中加載特征庫(kù),需要手動(dòng)在上述路徑下添加一個(gè)clamav文件夾,并且保證clamav用戶能夠?qū)ξ募A進(jìn)行讀寫。
(5)?在/var/log/目錄下添加兩個(gè)log文件:clam.log和clam-update.log,所有者為clamav用戶,并保證可讀寫權(quán)限。
(6)?修改/usr/local/clamav?/etc/clam.conf將開始的有"Example"的那行用#注釋掉。
(7)?修改/usr/local/clamav?/etc/freshclam.conf將開始的有"Example"的那行用#注釋掉。修改UpdateLogFile?/var/log/freshclam.log?為UpdateLogFile?/var/log/clam-update.log
(8)?用freshclam升級(jí)病毒庫(kù):
$?freshclam
freshclam運(yùn)行以后,share目錄下的clamav文件夾中已經(jīng)存在了最新的特征庫(kù)文件,下面就可以用clamscan命令進(jìn)行文件的掃描了
Libclamav庫(kù)API
libclamav庫(kù)API提供了病毒掃描的各種函數(shù)接口。libclamav庫(kù)使用的是病毒掃描法(Virus?Scanner)。從病毒中提取的特征字符串被用一定的格式組織在一起并加上簽名保護(hù)就形成了病毒庫(kù),clamav使用的病毒庫(kù)一般后綴為.cvd文件。
在使用libclamav之前,必須調(diào)用cl_init()函數(shù)來(lái)初始化,初始化成功以后,可以調(diào)用cl_engine_new()函數(shù)來(lái)創(chuàng)建一個(gè)新的掃描引擎。掃描結(jié)束以后,需要調(diào)用cl_engine_free()這個(gè)函數(shù)來(lái)釋放這個(gè)引擎結(jié)構(gòu)。這三個(gè)函數(shù)的原型如下:
int?cl_init(unsigned?int?options);
struct?cl_engine?*cl_engine_new(void);
int?cl_engine_free(struct?cl_engine?*engine);
cl_init()和cl_engine_free()兩個(gè)函數(shù)如果調(diào)用成功,將返回CL_SUCCESS,如果返回其他code,說(shuō)明函數(shù)調(diào)用失敗。
cl_init函數(shù)的實(shí)參傳入CL_INIT_DEFAULT即可。
Cl_engine_new()如果調(diào)用成功將返回一個(gè)指向struct?cl_engine結(jié)構(gòu)體的指針,如果失敗將返回NULL。
得到新的掃描引擎以后,需要進(jìn)行特征庫(kù)的加載,clamav提供了兩個(gè)函數(shù):
const?char?*cl_retdbdir(void);
int?cl_load(const?char?*path,?struct?cl_engine?*engine,
unsigned?int?*signo,?unsigned?int?options);
cl_retdbdir返回ClamAV特征庫(kù)的默認(rèn)路徑。
cl_load函數(shù)根據(jù)給出的具體特征庫(kù)路徑,加載單個(gè)特征文件,或者幾個(gè)特征文件(給出的實(shí)參是文件夾)。第二個(gè)參數(shù)傳入cl_engine_new得到的engine,第三個(gè)參數(shù)傳出加載的特征碼的條數(shù),最后一個(gè)參數(shù)為加載的選項(xiàng),一般傳入CL_DB_STDOPT即可。
以上的步驟完成以后,需要調(diào)用cl_engine_compile()函數(shù)做最后的文件掃描前的準(zhǔn)備,給函數(shù)原型為:
int?cl_engine_compile(struct?cl_engine?*engine);
現(xiàn)在,可以進(jìn)行文件的掃描了,文件掃描的函數(shù)為cl_scanfile,函數(shù)原型為:
int?cl_scanfile(const?char?*filename,?const?char?**virname,
unsigned?long?int?*scanned,?const?struct?cl_engine?*engine,
unsigned?int?options);
該函數(shù)需要注意的一點(diǎn)是,virname在函數(shù)中指向了engine結(jié)構(gòu)的表示目標(biāo)掃描文件名稱的內(nèi)存,不能被直接釋放。最后一個(gè)參數(shù)傳入CL_SCAN_STDOPT,默認(rèn)配置即可。
還有一個(gè)函數(shù)沒有介紹:
cl_strerror(),可以將相關(guān)函數(shù)返回的不為CL_SUCCESS值的錯(cuò)誤代碼轉(zhuǎn)換為說(shuō)明錯(cuò)誤相關(guān)的字符串。
以下是利用libclamav的API函數(shù)掃描文件的一個(gè)示例程序,只是展示了如何利用API進(jìn)行文件掃描的最簡(jiǎn)單的流程,路徑之類的采用的都是硬編碼,實(shí)際使用時(shí)可以進(jìn)行相應(yīng)的修改。
利用一個(gè)樣本文件進(jìn)行試驗(yàn),編譯時(shí)加上參數(shù)-lclamav,并保證可以找到需要的.so文件和clamav.h文件,得到結(jié)果如下:
更多詳情后續(xù)更新
總結(jié)
以上是生活随笔為你收集整理的clamav Java_ClamAV安装使用及API例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过JavaScript脚本轻松实现视频
- 下一篇: emailjava中怎么校验_Java使