Advertisement
stasn77

UTM5 detail statistics convert

May 4th, 2015
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.15 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use Compress::Zlib;
  4. use Socket;
  5. use Carp;
  6.  
  7. sub loger;
  8.  
  9. $fileUTM = shift;
  10. $home = "/mnt/dtr/stas/curr/532/";
  11. $logdir = "/var/log/netup53";
  12. $log  = $logdir."/ds.log";
  13. opendir( DIRHANDLE, $logdir ) || die "Mount ERROR!";
  14.  
  15. if ( $fileUTM eq "" ) {
  16.     loger "No parametr!", "ERROR";
  17. }
  18. loger "$fileUTM", "START";
  19. open ( FH, "< $fileUTM" ) or loger " Error open file $fileUTM", "ERROR";
  20. binmode FH;
  21.  
  22. read ( FH, $r1, 1 ); $r1 = unpack ( "%8C" , $r1 );
  23. read ( FH, $r2, 1 ); $r2 = unpack ( "%8C" , $r2 );
  24. for ( $i=1; $i<=$r2; $i++ ) {
  25.     read ( FH, $r3, 1 ); $r3 = unpack ( "%8C" , $r3 );
  26.     read ( FH, $r4, 1 ); $r4 = unpack ( "%8C" , $r4 );
  27.     $types[$r3] = $r4;
  28. }
  29. read ( FH, $r5, 1 ); $r5 = unpack ( "%8C" , $r5 );
  30. for ( $j=1; $j<=$r5; $j++ ) {
  31.     read ( FH, $r6, 1 ); $r6 = unpack ( "%8C" , $r6 );
  32.     read ( FH, $r7, 1 ); $r7 = unpack ( "%8C" , $r7 );
  33.     $sizes[$r6][1] = $r7; $sizes[$r6][2] = 1;
  34.     for ( $k=1; $k<=$r7; $k++ ) {
  35.         read ( FH, $r8, 1 ); $r8 = unpack ( "%8C" , $r8 );
  36.         $sizes[$r6][2] = $sizes[$r6][2] + $types[$r8];
  37.         $order[$r6][$k] = $r8;
  38.     }
  39. }
  40.  
  41. my ($prof_id, $n, $offset);
  42. while (($n = read FH, $prof_id, 1, $offset) != 0) {
  43.     $prof_id = unpack ( "%8C" , $prof_id );
  44.  
  45.     foreach $c (1..@{$order[$prof_id]}-1)
  46.     {
  47.     read ( FH, $rec[$order[$prof_id][$c]], $types[$order[$prof_id][$c]] );
  48.     }
  49.  
  50.     if ( $prof_id = 1 ) {
  51.     $t_class = unpack ( "%32I" , $rec[103] );
  52.     $account_id = unpack ( "%32I" , $rec[101] );
  53.     $src_ip = inet_ntoa ( pack ( "N", unpack ( "%32l" , $rec[8] ) ) );
  54.     $dst_ip = inet_ntoa ( pack ( "N", unpack ( "%32l" , $rec[12] ) ) );
  55.     $bytes = unpack ( "%32I" , $rec[23] );
  56.     $packets = unpack ( "%32I" , $rec[24] );
  57.     $src_port = unpack ( "%16S" , $rec[7] );
  58.     $dst_port = unpack ( "%16S" , $rec[11] );
  59.     $proto = unpack ( "%8C" , $rec[4] );
  60.     $slink_id = unpack ( "%32I" , $rec[100] );
  61.     @time = localtime( unpack ( "%32I" , $rec[104] ) );
  62.     $dirs=( $time[5]+1900 )."-".sprintf( "%02d", $time[4]+1 )."-".sprintf( "%02d", $time[3] );
  63.     $time[2] = sprintf( "%02d", $time[2] ); $time[1] = sprintf( "%02d", $time[1] ); $time[0] = sprintf( "%02d", $time[0] );
  64.     $dt = "$time[2]:$time[1]:$time[0]";
  65.     $account_id = "$prof_id.$account_id.$slink_id";
  66.     $arr{$account_id}{$dirs} .= "$dt\t$t_class\t$src_ip\t$src_port\t$dst_ip\t$dst_port\t$proto\t$packets\t$bytes\n";
  67.     }
  68. }
  69. close FH;
  70.  
  71. $i=0;
  72. foreach $k ( keys %arr ) {
  73.     foreach $d ( keys %{$arr{$k}} ) {
  74.         $dir = $home.$d;
  75.         opendir( DIRHANDLE, $dir ) || mkdir( $dir, 0755 );
  76.         open  ( FH, ">>$dir/$k.gz" ) or loger " Error open file $home/$k.gz\n", "ERROR";
  77.         print FH Compress::Zlib::memGzip( $arr{$k}{$d} );
  78.         close FH;
  79.         $i++;
  80.     }
  81. }
  82. loger "account: $i", "OK";
  83. unlink ( $fileUTM ) or loger "File was not deleted.", "ERROR";
  84.  
  85. exit 0;
  86.  
  87. sub loger {
  88.     $mess = shift;
  89.     $error= shift;
  90.     @time = localtime();
  91.     $t = ( $time[5]+1900 ) . "-" . sprintf( "%02d", $time[4]+1 ) . "-" . sprintf( "%02d", $time[3] ) . " $time[2]:$time[1]:$time[0]";
  92.     open ( FH, ">> $log" );
  93.     print FH "$error: $t\n";
  94.     print FH "$mess\n";
  95.     close FH;
  96.     if ( $error eq "ERROR" ) { exit 0; }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement