2008-10-22 2 views
0

Мне интересна вставка журнала брандмауэра, который я печатаю на stdout в базу данных mysql. Как мне это сделать?Вставить firelog в 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.

+1

Но в чем вопрос? – 2008-10-22 08:25:47

ответ

1
  1. Определить структуру таблицы, какие поля будут соответствовать тому, что части линий,
  2. использовать регулярное выражение или разделить для хранения каждой определенной части в переменные
  3. построить ВСТАВИТЬ строку из переменных, полученных в шаг 2
  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.