pyclamd (version 0.3.8)
index
/home/xael/ESPACE_KM/python/pyclamd/pyclamd.py

pyclamd.py
 
Author : Alexandre Norman - norman()xael.org
Contributors :
 - PL :  Philippe Lagadec - philippe.lagadec()laposte.net
 - TK :  Thomas Kastner - tk()underground8.com
 - TT :  Theodoropoulos Theodoros (TeD TeD) - sbujam()gmail.com
 - TKL : Thomas Kluyver - thomas () kluyver.me.uk
 - JB :  Joe Brandt  - brandt.joe () gmail.com
 - JS : Joni Salonen - joni.salonen () qindel.com
Licence : LGLPv3+
 
Usage :
 
Test strings :
^^^^^^^^^^^^
 
>>> import pyclamd
>>> try:
...     cd = pyclamd.ClamdUnixSocket()
...     # test if server is reachable
...     cd.ping()
... except pyclamd.ConnectionError:
...     # if failed, test for network socket
...     cd = pyclamd.ClamdNetworkSocket()
...     try:
...         cd.ping()
...     except pyclamd.ConnectionError:
...         raise ValueError('could not connect to clamd server either by unix or network socket')
True
>>> print(cd.version().split()[0])
ClamAV
>>> print(cd.reload())
RELOADING
>>> print(cd.stats().split()[0])
POOLS:
>>> void = open('/tmp/EICAR','w').write(cd.EICAR())
>>> void = open('/tmp/NO_EICAR','w').write('no virus in this file')
>>> cd.scan_file('/tmp/EICAR')['/tmp/EICAR']
('FOUND', 'Eicar-Test-Signature')
>>> cd.scan_file('/tmp/NO_EICAR') is None
True
>>> cd.scan_stream(cd.EICAR())['stream']
('FOUND', 'Eicar-Test-Signature')
>>> directory = cd.contscan_file('/tmp/')
>>> directory['/tmp/EICAR']
('FOUND', 'Eicar-Test-Signature')
>>> # Testing encoding with non latin characters (Chinese ideograms taken from random site, don't know what it mean, sorry)
>>> void = open('/tmp/EICAR-éèô请收藏我们的网址','w').write(cd.EICAR())
>>> r = cd.scan_file('/tmp/EICAR-éèô请收藏我们的网址')
>>> print(list(r.keys())[0])
/tmp/EICAR-éèô请收藏我们的网址
>>> print(r['/tmp/EICAR-éèô请收藏我们的网址'])
('FOUND', 'Eicar-Test-Signature')
>>> import os
>>> os.remove('/tmp/EICAR')
>>> os.remove('/tmp/NO_EICAR')
>>> os.remove('/tmp/EICAR-éèô请收藏我们的网址')

 
Modules
       
base64
socket
struct

 
Classes
       
exceptions.ValueError(exceptions.StandardError)
BufferTooLongError
_ClamdGeneric(__builtin__.object)
ClamdNetworkSocket
ClamdUnixSocket
socket.error(exceptions.IOError)
ConnectionError

 
class BufferTooLongError(exceptions.ValueError)
    Class for errors with clamd using INSTREAM with a buffer lenght > StreamMaxLength in /etc/clamav/clamd.conf
 
 
Method resolution order:
BufferTooLongError
exceptions.ValueError
exceptions.StandardError
exceptions.Exception
exceptions.BaseException
__builtin__.object

Data descriptors defined here:
__weakref__
list of weak references to the object (if defined)

Methods inherited from exceptions.ValueError:
__init__(...)
x.__init__(...) initializes x; see help(type(x)) for signature

Data and other attributes inherited from exceptions.ValueError:
__new__ = <built-in method __new__ of type object>
T.__new__(S, ...) -> a new object with type S, a subtype of T

Methods inherited from exceptions.BaseException:
__delattr__(...)
x.__delattr__('name') <==> del x.name
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__getslice__(...)
x.__getslice__(i, j) <==> x[i:j]
 
Use of negative indices is not supported.
__reduce__(...)
__repr__(...)
x.__repr__() <==> repr(x)
__setattr__(...)
x.__setattr__('name', value) <==> x.name = value
__setstate__(...)
__str__(...)
x.__str__() <==> str(x)
__unicode__(...)

Data descriptors inherited from exceptions.BaseException:
__dict__
args
message

 
class ClamdNetworkSocket(_ClamdGeneric)
    Class for using clamd with a network socket
 
 
Method resolution order:
ClamdNetworkSocket
_ClamdGeneric
__builtin__.object

Methods defined here:
__init__(self, host='127.0.0.1', port=3310, timeout=None)
Network Class initialisation
host (string) : hostname or ip address
port (int) : TCP port
timeout (float or None) : socket timeout

Methods inherited from _ClamdGeneric:
EICAR(self)
returns Eicar test string
contscan_file(self, file)
Scan a file or directory given by filename
Do not stop on error or virus found.
Scan with archive support enabled.
 
file (string): filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: ('FOUND', 'virusname'), filename2: ('ERROR', 'reason')}
  - None: if no virus found
 
May raise:
  - ConnectionError: in case of communication problem
multiscan_file(self, file)
Scan a file or directory given by filename using multiple threads (faster on SMP machines).
Do not stop on error or virus found.
Scan with archive support enabled.
 
file (string): filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: ('FOUND', 'virusname'), filename2: ('ERROR', 'reason')}
  - None: if no virus found
 
May raise:
  - ConnectionError: in case of communication problem
ping(self)
Send a PING to the clamav server, which should reply
by a PONG.
 
return: True if the server replies to PING
 
May raise:
  - ConnectionError: if the server do not reply by PONG
reload(self)
Force Clamd to reload signature database
 
return: (string) "RELOADING"
 
May raise:
  - ConnectionError: in case of communication problem
scan_file(self, file)
Scan a file or directory given by filename and stop on first virus or error found.
Scan with archive support enabled.
 
file (string) : filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: "virusname"}
  - None: if no virus found
 
May raise :
  - ConnectionError: in case of communication problem
  - socket.timeout: if timeout has expired
scan_stream(self, buffer_to_test)
Scan a buffer
 
buffer_to_test (string): buffer to scan
 
return either:
  - (dict): {filename1: "virusname"}
  - None: if no virus found
 
May raise :
  - BufferTooLongError: if the buffer size exceeds clamd limits
  - ConnectionError: in case of communication problem
shutdown(self)
Force Clamd to shutdown and exit
 
return: nothing
 
May raise:
  - ConnectionError: in case of communication problem
stats(self)
Get Clamscan stats
 
return: (string) clamscan stats
 
May raise:
  - ConnectionError: in case of communication problem
version(self)
Get Clamscan version
 
return: (string) clamscan version
 
May raise:
  - ConnectionError: in case of communication problem

Data descriptors inherited from _ClamdGeneric:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class ClamdUnixSocket(_ClamdGeneric)
    Class for using clamd with an unix socket
 
 
Method resolution order:
ClamdUnixSocket
_ClamdGeneric
__builtin__.object

Methods defined here:
__init__(self, filename=None, timeout=None)
Unix Socket Class initialisation
 
filename (string) : unix socket filename or None to get the socket from /etc/clamav/clamd.conf
timeout (float or None) : socket timeout

Methods inherited from _ClamdGeneric:
EICAR(self)
returns Eicar test string
contscan_file(self, file)
Scan a file or directory given by filename
Do not stop on error or virus found.
Scan with archive support enabled.
 
file (string): filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: ('FOUND', 'virusname'), filename2: ('ERROR', 'reason')}
  - None: if no virus found
 
May raise:
  - ConnectionError: in case of communication problem
multiscan_file(self, file)
Scan a file or directory given by filename using multiple threads (faster on SMP machines).
Do not stop on error or virus found.
Scan with archive support enabled.
 
file (string): filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: ('FOUND', 'virusname'), filename2: ('ERROR', 'reason')}
  - None: if no virus found
 
May raise:
  - ConnectionError: in case of communication problem
ping(self)
Send a PING to the clamav server, which should reply
by a PONG.
 
return: True if the server replies to PING
 
May raise:
  - ConnectionError: if the server do not reply by PONG
reload(self)
Force Clamd to reload signature database
 
return: (string) "RELOADING"
 
May raise:
  - ConnectionError: in case of communication problem
scan_file(self, file)
Scan a file or directory given by filename and stop on first virus or error found.
Scan with archive support enabled.
 
file (string) : filename or directory (MUST BE ABSOLUTE PATH !)
 
return either :
  - (dict): {filename1: "virusname"}
  - None: if no virus found
 
May raise :
  - ConnectionError: in case of communication problem
  - socket.timeout: if timeout has expired
scan_stream(self, buffer_to_test)
Scan a buffer
 
buffer_to_test (string): buffer to scan
 
return either:
  - (dict): {filename1: "virusname"}
  - None: if no virus found
 
May raise :
  - BufferTooLongError: if the buffer size exceeds clamd limits
  - ConnectionError: in case of communication problem
shutdown(self)
Force Clamd to shutdown and exit
 
return: nothing
 
May raise:
  - ConnectionError: in case of communication problem
stats(self)
Get Clamscan stats
 
return: (string) clamscan stats
 
May raise:
  - ConnectionError: in case of communication problem
version(self)
Get Clamscan version
 
return: (string) clamscan version
 
May raise:
  - ConnectionError: in case of communication problem

Data descriptors inherited from _ClamdGeneric:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class ConnectionError(socket.error)
    Class for errors communication with clamd
 
 
Method resolution order:
ConnectionError
socket.error
exceptions.IOError
exceptions.EnvironmentError
exceptions.StandardError
exceptions.Exception
exceptions.BaseException
__builtin__.object

Data descriptors inherited from socket.error:
__weakref__
list of weak references to the object (if defined)

Methods inherited from exceptions.IOError:
__init__(...)
x.__init__(...) initializes x; see help(type(x)) for signature

Data and other attributes inherited from exceptions.IOError:
__new__ = <built-in method __new__ of type object>
T.__new__(S, ...) -> a new object with type S, a subtype of T

Methods inherited from exceptions.EnvironmentError:
__reduce__(...)
__str__(...)
x.__str__() <==> str(x)

Data descriptors inherited from exceptions.EnvironmentError:
errno
exception errno
filename
exception filename
strerror
exception strerror

Methods inherited from exceptions.BaseException:
__delattr__(...)
x.__delattr__('name') <==> del x.name
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__getslice__(...)
x.__getslice__(i, j) <==> x[i:j]
 
Use of negative indices is not supported.
__repr__(...)
x.__repr__() <==> repr(x)
__setattr__(...)
x.__setattr__('name', value) <==> x.name = value
__setstate__(...)
__unicode__(...)

Data descriptors inherited from exceptions.BaseException:
__dict__
args
message

 
Functions
       
ClamdAgnostic()
Tries to connect to clamd using ClamdUnixSocket or if it fails, tries
with ClamdNetworkSocket and return the corresponding object.
Of course, it tries to connect with default settings...
contscan_file = wrapper(*args, **kw)
Deprecated API - use one of the Clamd*Socket classes instead.
init_network_socket(host='127.0.0.1', port=3310, timeout=None)
Deprecated API - use ClamdNetworkSocket instead.
init_unix_socket(filename=None)
Deprecated API - use ClamdUnixSocket instead.
multiscan_file = wrapper(*args, **kw)
Deprecated API - use one of the Clamd*Socket classes instead.
scan_file = wrapper(*args, **kw)
Deprecated API - use one of the Clamd*Socket classes instead.
version = wrapper(*args, **kw)
Deprecated API - use one of the Clamd*Socket classes instead.

 
Data
        __version__ = '0.3.8'
socketinst = None