pyclamd (version 0.3.3)
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
 
Licence : LGPL
 
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
       
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.3'
socketinst = None