Автор Тема: Избор на най-удобно решение  (Прочетена 2395 пъти)

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Така, захванах се да си направя която да следи трафика на няколко ип-та.Що се отнася до iptables нещата са направени.
Общата идея е да изкарам в txt нужната информация, тя да се обработи от съответна програма или скрипт (които да напиша) и да се вкара във mysql база данни или в отделен файл който друг скрипт да вкара в база данни.
Имам опит със C/C++ , с нея мога да обработя файла, но не знам как да вържа C-то със mysql ...
Дали Perl няма да е по-удобен? но ще трябва да чета за него .....
Имам спомен че серия от правила можеха да се импортват в mysql без никакъв скрипт, в смисъл само с едно mysql << .... но не помня точно синтаксиса.
Само идеи искам и може би насока, искам сам да си напиша всичко.
Активен

  • Гост
Избор на най-удобно решение
« Отговор #1 -: Jan 08, 2006, 21:11 »
Ако искаш със C++ - http://tangentsoft.net/mysql++/
Ако искаш с C - http://dev.mysql.com/doc/refman/5.0/en/c.html

Happy hacking '<img'>
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Избор на най-удобно решение
« Отговор #2 -: Jan 09, 2006, 01:05 »
Веднага ще ти кажа, че когато се отнася до обработка на текстова информация Perl е сред челните фаворити за това '<img'> (все пак нали за това е създаден).
В твоя случай обаче, надали изобщо ще ти трябва толкова мощно нещо като Perl '<img'> - и bash-scripting-а ще ти свърши работа.
Аз също ползвам MRTG, но на отдалечена машина от тази, от която дърпам данните на iptables. Данните ги прехвърлям чрез txt файл '<img'>
Ето ти малко сорс '<img'>

На локалната машина:
Примерен код

/usr/local/sbin/iptables -t mangle -L -nxvZ BG_CHAIN | grep MARK | grep -v " 0 MARK" | awk {'print $2" "$8" "$9" "'} > /var/mrtg/BGtraf.dat
scp /var/mrtg/BGtraf.dat user@arch:/var/mrtg/BGtraf.dat


на отдалечената
Примерен код

cat /var/mrtg/BGtraf.dat | awk '{print $1 "\t" $2 "\t" $3 "\t" strftime("%Y-%m-%d %H:%M:%S")}' > /traf.tmp
/usr/local/mysql/bin/mysql -e "load data local infile '/traf.tmp' into table traffic.traffic_bg; delete from traffic.traffic_bg where traffic=0;" -uUSER  -pPASSW


Това го изпълнявам на всеки 5 мин '<img'>
От този сорс можеш да видиш както как дърпам данните от iptables в по-подходящ формат, така и как ги "бутам" в mysql таблица '<img'>
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Избор на най-удобно решение
« Отговор #3 -: Jan 09, 2006, 01:32 »
VladSun пък да ти кажа как почти нищо не разбрах '<img'>))
баш скриптинга дори не съм го поглеждал.
Значи то ще е......
а какъв формат трябва да има файла за да се импортнет информяцията в
sql-a ?
Другото ще го оправя все някак ?
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Избор на най-удобно решение
« Отговор #4 -: Jan 09, 2006, 04:19 »
1. '<img'>
Начин да запишеш инфото от броячите на iptables във файл (текстов):
iptables -t mangle -L -nxvZ BG_CHAIN | grep MARK | grep -v " 0 MARK" | awk {'print $2" "$8" "$9" "'} > /var/mrtg/BGtraf.dat
, или по друг начин - вземи изхода на iptables за CHAIN  BG_CHAIN, вземи само тези, които са маркирани, махни тези които имат трафик 0, изкарай само 2, 8 и 9 поле (брояч байтове, src IP, dst IP)
Получаваш текстов файл с разделител шпация.

2. '<img'>
Стандартни SQL заявки '<img'>
Примерен код

mysql -e "load data local infile '/traf.tmp' into table traffic.traffic_bg; delete from traffic.traffic_bg where traffic=0;" -uUSER  -pPASSW


mysql -е "sql" :изпълнява SQL заявката sql;
load data local infile '/traf.tmp' into table traffic.traffic_bg; : SQL заявка, която казва "зареди данните от външно разположен файл /traf.tmp в таблицата traffic.traffic_bg
Таблицата ти трябва да има полета такива, че да съответстват на полетата във текстовия файл - в случая, който съ показал в предния пост - BIGINT (байтове), CHAR(15) (src_IP), CHAR(15) (dst_ip), DATETIME (кога е засечено)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Избор на най-удобно решение
« Отговор #5 -: Jan 09, 2006, 09:17 »
Мерси много, определено решението с bash е в пъти по-елементарно, ше взема да го понауча.
Активен

  • Гост
Избор на най-удобно решение
« Отговор #6 -: Jan 09, 2006, 23:17 »
'<img'> Радвам се, че съм помогнал!
Само едно уточнение:
safe_mysqld --user=mysql_усер --local-infile=1 &

local-infile опцията трябва да се разреши при стартирането на mysql за да можеш да "импортваш" външни файлове
Активен

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Избор на най-удобно решение
« Отговор #7 -: Jan 10, 2006, 00:14 »
М да казваше ми че версията ми не го подържала и аз си написах програма на C , беше достатъчно кратка и решава проблема напълно като създава sql файл.

Само друго да те питам. Така като на всеки 5мин трупаш запис, таблицата в един момент става отвратително голяма, това до колко твари, бави и всякакви следствия ?
Активен

  • Гост
Избор на най-удобно решение
« Отговор #8 -: Jan 10, 2006, 01:57 »
'<img'> Ти питаш аз ти отговарям
А и аз го използвам за други цели '<img'>
За теб по-подходящо би било използването на RRD база данни - виж http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/ за подробности.
Иначе винаги можеш да си направиш нещо подобно в Mysql таблици - за деня през 5мин, за седмицата през 1/2 час и т.н. Това вече е игра на SQL заявки ...
Аз само ти показах начин за импортване на данните от iptables към mysql '<img'>
От там нататък си ти ':p'
Активен

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Избор на най-удобно решение
« Отговор #9 -: Jan 10, 2006, 11:00 »
Да мерси, най-вероятно статистиките няма да са подробни и старит записи ще се трият '<img'>
Активен