The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::ClamAV::Client - A client class for the ClamAV clamd virus scanner daemon

VERSION

version 0.1

SYNOPSIS

Creating a scanner client

    use Net::ClamAV::Client;

    # Use a TCP inet domain socket
    my $scanner = Net::ClamAV::Client->new(url => "localhost:3310");

    # Use a local Unix domain socket:
    $scanner = Net::ClamAV::Client->new(url => "/var/run/clamav/clamd.ctl");

    die("ClamAV daemon not alive")
        if not defined($scanner) or not $scanner->ping();

Daemon maintenance

    my $scanner = Net::ClamAV::Client->new(url => "localhost:3310");

    my $version = $scanner->version;
                            # Retrieve the ClamAV version string.

    $scanner->reload();     # Reload the malware pattern database.

    $scanner->quit();       # Terminates the ClamAV daemon.
    $scanner->shutdown();   # Likewise.

Path scanning

    # Scan a single file or a whole directory structure,
    # and stop at the first infected file. For this to work
    # the clamd has to run on the local host:

    my $scanner = Net::ClamAV::Client->new(url => "localhost:3310");
    my @results = $scanner->scanLocalPath("/etc/groups");

Path scanning (complete)

    # Scan a single file or a whole directory structure,
    # and scan all files without stopping at the first infected one:
    my $scanner = Net::ClamAV::Client->new(url => "localhost:3310");
    my @results2 = $scanner->scanLocalPathContinous("/etc/");

Other scanning methods

    my $handle;
    my $scanner = Net::ClamAV::Client->new(url => "localhost:3310");
    # Scan a stream, i.e. read from an I/O handle:
    my $result = $scanner->scanStream($handle);

    # Scan a scalar value:
    my $value; # some file in a scalar
    my $result2 = $scanner->scanScalar(\$value);

DESCRIPTION

Net::ClamAV::Client is a class acting as a client for a ClamAV clamd virus scanner daemon. The daemon may run locally or on a remote system as Net::ClamAV::Client can use both Unix domain sockets and TCP/IP sockets. The full functionality of the clamd client/server protocol is supported.

This Module is based on the ClamAV::Client class written by Julian Mehnle <julian@mehnle.net> which is not developed anymore but everything has been written from scratch.

Methods

Constructor

The following constructor is provided:

new(%options): RETURNS Net::ClamAV::Client

Creates a new Net::ClamAV::Client object.

%options is a list of key/value pairs representing any of the following options:

url

A scalar containing the url to the clamd server (e.g. localhost:3310 or /var/run/clamav/clamd.ctl)

Public Instance Methods

The following public methods are provided:

ping : RETURNS SCALAR

Returns true ('PONG') if the ClamAV daemon is alive. Throws a Net::ClamAV::Exception otherwise.

version : RETURNS SCALAR

Returns the Version String of the clamd server. Throws a Net::ClamAV::Exception otherwise.

reload : RETURNS SCALAR

Reloads the clamd virus databases and returns true ('RELOADING') when successfull. Throws a Net::ClamAV::Exception otherwise.

shutdown : RETURNS SCALAR

Shutdowns the clamd server. Throws a Net::ClamAV::Exception when unseccessfull.

quit : RETURNS SCALAR

śame as shutdown

scanLocalPath : RETURNS HASH

Scan a file or directory given as path. Important: The used clamd has to run on the local host for this method to work. Clamd will directly access the given path. Make sure the user running clamd has access rights to it. Scanning stops when the first virus is found or all files within path has been scanned.

The Method returns a Hash with attributes file and result.

my $hash = { file => "the filename a virus was found in", result => "the result of file" };

Throws a Net::ClamAV::Exception on error.

scanLocalPathContinous : RETURNS HASH

Scan a file or directory given as path and do not stop on first virus found. Important: The used clamd has to run on the local host for this method to work. Clamd will directly access the given path. Make sure the user running clamd has access rights to it. Scanning stops when the first virus is found or all files within path has been scanned.

The Method returns an array of hashes with attributes file and result.

my $hash = { file => "the filename a virus was found in", result => "the result of file" };

Throws a Net::ClamAV::Exception on error.

scanLocalPathMulti : RETURNS HASH

Scan a file or directory given as path concurrently. Important: The used clamd has to run on the local host for this method to work. Clamd will directly access the given path. Make sure the user running clamd has access rights to it. Scanning stops when the first virus is found or all files within path has been scanned.

The Method returns an array of hashes with attributes file and result.

my $hash = { file => "the filename a virus was found in", result => "the result of file" };

Throws a Net::ClamAV::Exception on error.

scanLocalFile : RETURNS HASH

Scan one file. Important: The used clamd has to run on the local host for this method to work. Clamd will directly access the given path. Make sure the user running clamd has access rights to it. Scanning stops when the first virus is found or all files within path has been scanned.

The Method returns a hashe with attributes file and result. s my $hash = { file => "the filename a virus was found in", result => "the result of file" };

Throws a Net::ClamAV::Exception on error.

stats : RETURNS HASH

Return the stats of the clamd. NOT SUPPORTED YET

Throws a Net::ClamAV::Exception on error.

scanFileDescriptor : RETURNS HASH

Scans a file given by a file descriptor. NOT SUPPORTED YET

Throws a Net::ClamAV::Exception on error.

startSession

Starts a session with the clamd server within multiple scan commands can be issued.

Throws a Net::ClamAV::Exception on error.

runningSession : RETURNS SCALAR

Checks if a session is running with the clamd server.

Returns 1 if yes, else 0.

endSession

Ends a session with the clamd server within multiple scan commands can be issued.

Throws a Net::ClamAV::Exception on error.

scanStreamFH : RETURNS SCALAR

Scans a file by transmitting it as a stream to the clamd server. The file is given as a IO::Handle.

The Method returns a SCALAR with attributes undef or virusname.

Throws a Net::ClamAV::Exception on error.

scanStreamFile : RETURNS SCALAR

Scans a file by transmitting it as a stream to the clamd server. The file is given as a path.

The Method returns a SCALAR with attributes undef or virusname.

Throws a Net::ClamAV::Exception on error.

scanScalar : RETURNS SCALAR

Scans a SCALAR by transmitting it as a stream to the clamd server. The file is given as a path.

The Method returns a SCALAR with attributes undef or virusname.

Throws a Net::ClamAV::Exception on error.

AUTHOR

Domink Meyer <dmeyer@federationhq.de>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Dominik Meyer.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

AVAILABILITY

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see https://metacpan.org/module/Net::ClamAV::Client/.

COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Dominik Meyer.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.