0

stdout に出力しているファイアウォール ログを mysql データベースにも挿入することに興味があります。どうすればいいですか?

行出力は次のとおりです。

16:51:56 drop Nova <eth0 Attack Info: MS Word cascading style sheet vulnerability detected (MS08-026); attack: Content Protection Violation; viola profile: Default_Protection; src: udis; dst: Nova; proto: tcp; product: viola; service: http; s_port: 48125;
16:35:13 drop Nova <eth0 Attack Info: Macrovision InstallShield ActiveX memory corruption; attack: Web Client Enforcement Violation; SmartDefense profile: Default_Protection; src: udis; dst: Nova; proto: tcp; product: SmartDefense; service: http; s_port: 44607;

perl、bashが使えます。

4

1 に答える 1

1
  1. どのフィールドが行のどの部分に対応するか、テーブル構造を定義します。
  2. 正規表現または分割を使用して、定義された各部分を変数に格納します
  3. 手順 2 で取得した変数から INSERT 文字列を作成する
  4. それをmysqlにパイプします

例:

~> echo '16:51:56 drop foo <tcpip scan' | \
   perl -nle "m/(\d{2}:\d{2}:\d{2})\s(.+?)\s(.+?)\s<(.+)$/; \
   print \"INSERT INTO flog(date,action,machine,attack) \
   VALUES ('\$1','\$2','\$3','\$4')\"" | mysql -uroot -ppass flog

perl 自体を使用して、DBI でプレースホルダーを使用して値を挿入できます。ログに特殊な SQL 文字が含まれている場合は、そのほうが安全です。

于 2008-10-22T08:42:28.267 に答える