Связка с flow-tools

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: Прежде всего нужно инсталировать flow-tools. Для этого в [http://www.gentoo.org/ gentoo] достаточно набрать от root одну ко...)
Строка 4: Строка 4:
вот текст программы которая конвертирует файлы в формате flow-tools в формат бгбиллинга
вот текст программы которая конвертирует файлы в формате flow-tools в формат бгбиллинга
-
<pre>
+
<source lang="c">
#include <stdlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
Строка 111: Строка 111:
   return 0;
   return 0;
}
}
-
</pre>
+
</source>
программа собирается так <code>gcc -Wall -o f2b f2b.c -lz -lft</code>
программа собирается так <code>gcc -Wall -o f2b f2b.c -lz -lft</code>
Строка 122: Строка 122:
запущеный без параметра скрипт обрабатывает все данные за предыдущий час. Скрипт можно вызывать с параметром число часов которые нужно отступить назад.
запущеный без параметра скрипт обрабатывает все данные за предыдущий час. Скрипт можно вызывать с параметром число часов которые нужно отступить назад.
-
<pre>
+
<source lang="sh">
#!/bin/bash
#!/bin/bash
Строка 177: Строка 177:
exit 0
exit 0
-
</pre>
+
</source>
--[[Участник:Blib|Blib]] 17:27, 9 мая 2008 (UTC)
--[[Участник:Blib|Blib]] 17:27, 9 мая 2008 (UTC)

Версия 12:30, 12 мая 2008

Прежде всего нужно инсталировать 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)

Личные инструменты