Связка с flow-tools
Материал из BiTel WiKi
Прежде всего нужно инсталировать flow-tools.
Для этого в gentoo достаточно набрать от root одну команду emerge flow-tools
вот текст программы которая конвертирует файлы в формате flow-tools в формат бгбиллинга
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include "ftlib.h" /* $Id: $ */ #pragma pack(1) typedef struct { unsigned long fromAddr; unsigned long toAddr; short int fromIface; short int toIface; short int fromPort; short int toPort; unsigned long amount; } bitel; /* parameters * dstfile router_ip [dstfile router] sb srcfile [srcfile..] */ int main (int argc, char *argv[]) { int i = 0; int fd = 0; int str_count = 0; FILE *fp; FILE *out; struct ftio ftio; struct ftprof ftp; struct fts3rec_offsets fo; struct ftver ftv; char *rec; u_int32 last_time; u_int32 tm; bitel b_rec; if (argc < 3) { fprintf (stderr, "Usage: %s out_file in_file1 in_file2 in_file3 ... \n", argv[0]); return 1; } if ((out = fopen (argv[1], "wb")) == NULL) { perror ("Cannot create file %m"); return 2; } for (i = 2; i < argc; i++) { if ((fp = fopen (argv[i], "rb")) == NULL) { perror ("Cannot open file %m"); return 1; } fd = fileno (fp); fterr_setid (argv[0]); ftprof_start (&ftp); if (ftio_init (&ftio, fd, FT_IO_FLAG_READ) < 0) { perror ("Error in initialization ftio structure:%m"); return 0; } ftio_get_ver (&ftio, &ftv); fts3rec_compute_offsets (&fo, &ftv); last_time = 0; while ( (rec = ftio_read (&ftio)) ) { str_count++; tm = *((u_int32 *) (rec + fo.unix_secs)); if (last_time != tm) { b_rec.fromAddr = 0; b_rec.toAddr = 0; b_rec.fromIface = htons (0xff77); b_rec.toIface = htons (0xff77); b_rec.fromPort = htons ((u_int16) ((tm >> 16) & 0xFFFF)); b_rec.toPort = htons ((u_int16) (tm & 0xFFFF)); b_rec.amount = 0; fwrite (&b_rec, sizeof (bitel), 1, out); last_time = tm; } b_rec.fromAddr = htonl (*((u_int32 *) (rec + fo.srcaddr))); b_rec.toAddr = htonl (*((u_int32 *) (rec + fo.dstaddr))); b_rec.fromIface = htons (*((u_int16 *) (rec + fo.input))); b_rec.toIface = htons (*((u_int16 *) (rec + fo.output))); b_rec.fromPort = htons (*((u_int16 *) (rec + fo.srcport))); b_rec.toPort = htons (*((u_int16 *) (rec + fo.dstport))); b_rec.amount = htonl (*((u_int32 *) (rec + fo.dOctets))); fwrite (&b_rec, sizeof (bitel), 1, out); } ftio_close (&ftio); fclose (fp); } fclose (out); fprintf (stderr, "Total lines: %d\n", str_count); return 0; }
программа собирается так gcc -Wall -o f2b f2b.c -lz -lft
Как агрумент программа берет файл в который нужно записать данные в формате бгбиллинга и список файлов в формате flow-tools из которых брать исходные данные
вот пример скрипта который вызывается по крону каждый час и конвертит данные. скрипт берет данные из файлов /mnt/flow_export/имя_наса/2008-05-01/ft-v05.2008-05-01.110503+0900 (это стандартный формат имени для flow-tools) конвертит их и переносит в /mnt/flow_export_converted/source_id/2008/05/01/log_11
запущеный без параметра скрипт обрабатывает все данные за предыдущий час. Скрипт можно вызывать с параметром число часов которые нужно отступить назад.
GeSHi Error: GeSHi could not find the language sh (using path /home/user/wiki.bitel.ru/mediawiki-1.15.1/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)
Вы должны указать язык следующим образом: <source lang="html">...</source>
Поддерживаемые языки:
abap, actionscript, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, latex, lisp, lua, m68k, matlab, mirc, mpasm, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, vhdl, visualfoxpro, winbatch, xml, xpp, z80
--Blib 17:27, 9 мая 2008 (UTC)