はじめに

Windows 2003 Server R2 体験版のインストール

Symantec Scan Engine 体験版のインストール

Symantec Scan Engine をインストールする前に Java 5.0 のインストール

\SymantecScanEngine_5.2.4_Win32_IN\Tools\Java\Win32\jre-1_5_0_15-windows-i586-p.exe

Symantec Scan Engine のインストール

SymantecScanEngine_5.2.4_Win32_IN\Scan_Engine\Win32\ScanEngine.exe

ライセンスファイルのインストール

テスト用ウイルスの準備

Java クライアント

必須ライブラリ

サンプルプログラム

あんまり参考にならない「Symantec Scan Engine ソフトウェア開発者ガイド」といい加減な Javadoc ( SymantecScanEngine_5.2.4_Win32_IN\Scan_Engine_SDK\Java\Docs\SymJavaAPIDocs ) を参考にざざっとプログラムを書くと以下のようになる

package com.snail.example;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.apache.commons.beanutils.BeanUtils;

import com.symantec.scanengine.api.Policy;
import com.symantec.scanengine.api.Result;
import com.symantec.scanengine.api.ScanEngine;
import com.symantec.scanengine.api.ScanException;
import com.symantec.scanengine.api.StreamScanRequest;

public class AVExam {

  private static final String SCAN_SERVER = "172.16.121.64"; // Win2003 Server on VMWare Fusion
  private static final int SCAN_PORT = 1344;
  private static final String SCAN_FILE = "/Users/atsushi/Downloads/eicar.com";

  public static void main(String[] args) {
    
    // 1) Scan Engine Server の IP アドレスと Port 番号を定義
    //    複数台の Scan Engine Server で負荷分散をすることが可能
    Vector<ScanEngine.ScanEngineInfo> scEngInfo
      = new Vector<ScanEngine.ScanEngineInfo>();
    ScanEngine.ScanEngineInfo scInfo
      = new ScanEngine.ScanEngineInfo(SCAN_SERVER,SCAN_PORT);
    scEngInfo.add(scInfo);
    
    try{
      // 2) Scan Engine Client を作成する
      //    接続待ち 1000ms でエラー / 応答待ち 3000ms でエラー
      ScanEngine scEngine = ScanEngine.createScanEngine(scEngInfo);
      
      // 3) Scan Engine に、ウイルス検査を要求する
      //
      //    検査後のファイルの扱いを設定する必要がある
      //    Policy.DEFAULT : Scan Engine サーバの設定を利用する
      //    Policy.SCAN    : Scan のみをする
      //    Policy.SCANDELETE       : ウイルスが検出されたらファイルを削除する
      //    Policy.SCANREPAIR       : ウイルスが検出されたらウイルスを除去する
      //    Policy.SCANREPAIRDELETE : ウイルス除去を試み、できなかったらファイルを削除する
      //
      //    ※ scEngine.createFileScanRequest() は、Scan Engine サーバと
      //    ※ クライアントが同じマシンの場合のみ使える・・・・何日無駄にしたことか・・・orz
      OutputStream out = new FileOutputStream("/tmp/output");
      StreamScanRequest req
        = scEngine.createStreamScanRequest(SCAN_FILE, SCAN_FILE, out, Policy.SCAN);
      Result res = req.scanFile();
      out.close();
      
      // 4) 結果を標準出力に出力
      Map resMap = BeanUtils.describe(res);
      List keys = new ArrayList(resMap.keySet());
      for(Object key : keys){
        System.out.println(key + "=" + resMap.get(key));
      }
      
    } catch( ScanException ex ) {
      ex.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

とりあえず動く物を作るだけなら簡単にできる

実行結果

threatInfo=com.symantec.scanengine.api.ThreatInfo@13e4a47e
definitionDate=Sun Jun 14 00:00:00 JST 2009
status=INFECTED_REPLACED
fileStatus=null
definitionRevNumber=004
IPTries=com.symantec.scanengine.api.ConnectionAttempt@3fe2670b
class=class com.symantec.scanengine.api.Result
totalInfection=0

サンプルウイルスを Scan Engine に検査させると、無事に INFECTED_REPLACED(感染している) というステータスが帰ってきた

メモリ上のデータを検証させるには?

StreamScanRequest req
 = scEngine.createStreamScanRequest(SCAN_FILE, SCAN_FILE, out, Policy.SCAN);
Result res = req.scanFile();

の代わりに、

byte[] byteArray = readFile();
StreamScanRequest req
 = scEngine.createStreamScanRequest(SCAN_FILE, SCAN_FILE, out, Policy.SCAN);
req.send(byteArray);
Result res = req.finish();

を使う。
なんか、キモい API だなぁ・・・

詳細な仕様が謎・・・

scEngine.createFileScanRequest()

は、クライアントとサーバが同一筐体な時しか使えない(Javadoc にも明記されている)。
普通の開発者は、scEngine を作るときに、サーバーの IP アドレスとポート番号を渡しているんだから、そうは思わないだろう・・・ちゃんとドキュメントを読まない私が悪いんですが・・・


Java


添付ファイル: fileSSE_license2.png 2554件 [詳細] fileSSE_license3.png 2562件 [詳細] fileSSE_license1.png 2528件 [詳細] filewindow2003net.png 2390件 [詳細] fileSSE_install.png 2468件 [詳細] fileWindow2003.png 2484件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2009-07-08 (水) 02:04:21 (5632d)
Short-URL: http://at-sushi.com/pukiwiki/index.php?cmd=s&k=7ea00a3ecb
ISBN10
ISBN13
9784061426061