dk писал(а):Если разово, проще всего поменять под эти цели unpack-ds.
Да, разово нужно.. А не подскажешь куда подставить ?
Код: Выделить всё
#!/usr/bin/perl
use Socket;
use Carp;
$fileUTM = shift;
$SID = shift;
open ( FH, "gunzip -c $fileUTM |" ) or die ( " Error open file $fileUTM" );
open ( TH, ">$SID" ) or die ( " Error open file $fileUTM" );
print TH <FH>;
close FH;
close TH;
$size = ( stat( "$SID" ) )[7];
$rec = $size/26;
open ( FH, "<$SID" ) or die ( " Error open fole $fileUTM" );
print "Date Time\t\tIP_from\t\tPort\tIP_to\t\tPort\tPkts\tByte\tType\n";
for ( $i=1; $i<=$rec; $i++ ) {
read ( FH, $src_ip, 4 ); # 1-4
read ( FH, $dst_ip, 4 ); # 5-8
read ( FH, $packets, 4 ); # 9-12
read ( FH, $bytes, 4 ); # 13-16
read ( FH, $src_port, 2 ); # 17-18
read ( FH, $dst_port, 2 ); # 19-20
read ( FH, $t_class, 2 ); # 21-22
read ( FH, $timestamp, 4 ); # 23-26
$src_ip = inet_ntoa ( pack ( "N", unpack ( "%32l" , $src_ip ) ) );
$dst_ip = inet_ntoa ( pack ( "N", unpack ( "%32l" , $dst_ip ) ) );
$bytes = unpack ( "%32I" , $bytes );
$packets = unpack ( "%32I" , $packets );
$src_port = unpack ( "%16S" , $src_port );
$dst_port = unpack ( "%16S" , $dst_port );
$t_class = unpack ( "%16S" , $t_class );
$timestamp = unpack ( "%32I" , $timestamp );
@time = localtime( $timestamp );
$time[5] += 1900;
$time[3] = sprintf( "%02d", $time[3] );
$time[4] = sprintf( "%02d", $time[4]+1 );
$time[2] = sprintf( "%02d", $time[2] );
$time[1] = sprintf( "%02d", $time[1] );
$time[0] = sprintf( "%02d", $time[0] );
$dt = "$time[3]-$time[4]-$time[5] $time[2]:$time[1]:$time[0]";
print "$dt\t$src_ip\t$src_port\t$dst_ip\t$dst_port\t$packets\t$bytes\t$t_class\n";
}
close FH;
unlink $SID;
exit 0;