このページは過去に掲載していたものをそのまま使用しています。

Contents


Documents top page
README
API
Sample Scripts
 

Network Intrusion Detection System 実験室

基本形から簡単な応用まで載せてみました。

サンプル 〜基礎編〜

まず最初にrubyを使う必要性について考えましょう。 まともなネットワークで確実に動作するものを求める場合には、ここから先を 読んではいけません (^^;

その壱

TCPでコネクションが確立された時と閉じられた事を教えてくれる スクリプトです。

#!/usr/local/bin/ruby

require "rnids"

class SEED < NIDS
  def callback(pkt)
    return if not pkt.kind_of?(NIDS_TCP)

    case pkt.tcp_state
    when NIDS::NIDS_JUST_EST
      print "connection establised : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    when NIDS::NIDS_CLOSE
      print "connection closed : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    end
  end
end

#
# allow C-c interruption
#
trap("SIGHUP", "EXIT")
trap("SIGINT", "EXIT")

#
# MAIN proc
#

seed = SEED.new
seed.run

ここではNIDSクラスを継承する一つのクラスを定義し、その中で 二つのメソッドを再定義しています。実際の処理部分は最後の二行だけです。 処理の流れを(理解に役立つかどうか)UMLのシーケンス図で記述したものは 次のようになります。

UML sequence diagram

この処理でNIDS::NIDS_JUST_ESTNIDS::NIDS_CLOSEがあります。これは処理の開始と正常終了の状態です。 NIDS_TCP::tcp_state()メソッドは全部で 次のような状態を取ります。

  • NIDS::NIDS_JUST_EST
  • NIDS::NIDS_DATA
  • NIDS::NIDS_CLOSE
  • NIDS::NIDS_RESET
  • NIDS::NIDS_TIMED_OUT

次に全部の状態を扱い、さらに選択的にTCPコネクションを切断する方法を 説明します


Yasuhiro ABE <yasu@dengaku.org>
Last modified: Sun Feb 11 23:02:06 JST 2001