0

我也有兴趣将要打印到标准输出的防火墙日志插入到 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 回答