2017-08-31 143 views
1

我有一個perl應用程序。我需要掃描一些文件的病毒。Perl,ClamAV,掃描病毒流

我可以使用ClamAV和模塊File :: Scan :: ClamAV。 它工作,如果我需要掃描存儲在磁盤上的文件或如果文件加載到內存(對某些變量)。

但我的應用程序沒有完整的文件。它只有一個輸入流(打開的套接字)。它從該套接字讀取並寫入其他輸出流。

我可以通過ClamAV以某種方式傳遞流?喜歡將我的輸入流轉發到clamav並從中讀取數據,但最後得到一些掃描結果?

回答

0

模塊ClamAV::Client似乎提供了用scan_stream method掃描流的方法。

以下是我認爲作品從文檔疑惑起來:

use ClamAV::Client; 

# Try using socket options from clamd.conf, or use default socket: 
my $scanner = ClamAV::Client->new(); 

# Scan a stream, i.e. read from an I/O handle: 
my $result = $scanner->scan_stream($handle); 

# $result is the name of a virus signature, or undef 
die "infected" if $result; 

請注意,我還沒有嘗試過(還)。

+0

我無法弄清楚我的ClamAV在聽什麼。我上面的例子是默認套接字,但這對我不起作用。我沒有在TCP上配置它,我不想破壞它。所以沒有測試,對不起。 – simbabque

+0

我要試一試。 –

+1

這個工程。但在我的情況下,我不得不在客戶端構造函數中設置socket_name =>'/var/run/clamd.scan/clamd.sock' –