clamdjs

A ClamAV client on node.js

Usage no npm install needed!

<script type="module">
  import clamdjs from 'https://cdn.skypack.dev/clamdjs';
</script>

README

Clamdjs

A ClamAV client on node.js

The library will uses TCP socket communicate with clamd (ClamAV daemon) through some commands

Clamd protocol is explained here: http://linux.die.net/man/8/clamd


Provide

  • Scan Stream and Buffer
  • Scan local File and local Directory
  • Check the daemon’s state
  • Get the version detail of the running ClamAV program

Installation

$ npm install clamdjs

API

const clamd = require('clamdjs')
const scanner = clamd.createScanner(host, port)

scanner.scanStream(stream, [timeout])

scanner.scanStream(stream, 3000)
       .then(function (reply) {
           console.log(reply) 
           // print some thing like
           // 'stream: OK', if not infected
           // `stream: ${virus} FOUND`, if infected
       })
       .catch(handler)

Returns a promise, which will resovle with the reply from the ClamAV server

  • stream (Object) - read stream object
  • timeout (Number) - use to set the socket's timeout option, default 5000

scanner.scanBuffer(buffer, [timeout], [chunkSize])

scanner.scanBuffer(buffer, 3000, 1024 * 1024)
       .then(function (reply) {
           console.log(reply) 
           // print some thing like
           // 'stream: OK', if not infected
           // `stream: ${virus} FOUND`, if infected
       })
       .catch(handler)

Returns a promise, which will resovle with the reply from the ClamAV server

  • buffer (Object)
  • timeout (Number) - use to set the socket's timeout option, default 5000
  • chunkSize (Number) - size of the chunk, which will send to ClamAV server, default 64 * 1024

scanner.scanFile(path, [timeout], [chunkSize])

scanner.scanFile(path, 3000, 1024 * 1024)
       .then(function (reply) {
           console.log(reply) 
           // print some thing like
           // 'stream: OK', if not infected
           // `stream: ${virus} FOUND`, if infected
       })
       .catch(handler)

Returns a promise, which will resovle with the reply from the ClamAV server

  • path (String) - file path, will be pass to path.normalize() first
  • timeout (Number) - use to set the socket's timeout option, default 5000
  • chunkSize (Number) - size of the chunk, which will send to ClamAV server, default 64 * 1024

scanner.scanDirectory(rootPath, [options])

let optins = {
    timeout: 5000,
    chunkSize: 64 * 1024,
    scanningFile: 10,
    detail: true,
    cont: true
}
scanner.scanDirectory(rootPath, options)
       .then(function (reply) {
           console.log(reply) 
           /* print some thing like
           {
                ScannedFiles: 11,
                Infected: 3,
                EncounterError: 1,
                Result:[...]
           }
           */
       })
       .catch(handler)

Returns a promise, which will resovle with a object which contained the scan summary

  • rootPath (String) - directory path, will be pass to path.normalize() first
  • optinns (Object)
    • timeout (Number) - use to set the socket's timeout option, default 5000
    • chunkSize (Number) - size of the chunk, which will send to ClamAV server, default 64 * 1024
    • scanningFile (Number) - the number of file will scan concurrently, should not be greater than the file table limit in node.js, default 10
    • detail (Boolean) - if true the output object will contain the scan summary and all scaned files's scan result no matter infected or not, if false the output object will contain the scan summary and scan result of infected files and file that encountered error when scanning, default true
    • cont (Boolean) - when scanning a path and an Error throw, if true, will move on to scan next path, if false, will stop scanning and return a rejected promise, default true

clamd.ping()

Returns true if clamd daemon alive

clamd.version()

Returns clamav version information

clamd.isCleanReply(reply)

Retuens true if the reply of a scan means OK, false if means infected