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のシーケンス図で記述したものは
次のようになります。
この処理でNIDS::NIDS_JUST_EST と
NIDS::NIDS_CLOSE があります。これは処理の開始と正常終了の状態です。
NIDS_TCP::tcp_state() メソッドは全部で
次のような状態を取ります。
- NIDS::NIDS_JUST_EST
- NIDS::NIDS_DATA
- NIDS::NIDS_CLOSE
- NIDS::NIDS_RESET
- NIDS::NIDS_TIMED_OUT
次に全部の状態を扱い、さらに選択的にTCPコネクションを切断する方法を
説明します
|