rmck wrote:

Hi

I have the .h file of a program that spits out a data file which is Binary Output. The binary file is a series of fixed length records. In C, each record has the format which is in the script.



I thought I could use unpack to read the data, and I am having no success. PLEASE let me know if I'm using unpack correctly:

#!/bin/perl
use strict;
use POSIX 'strftime';
use warnings;

#
#struct binary_log_entry {
#        int     major_protocol;  /* eg. ETHERTYPE_IP */
#        int     minor_protocol;  /* eg. IPPROTO_TCP */
#        u_long  src_ipaddress;   /* Source IP Address */
#        u_long  dst_ipaddress;   /* Destination IP Address */
#        u_short src_port;        /* Source port (if UDP or TCP) */
#        u_short dst_port;        /* Desintation port (if UDP or TCP) */
#        time_t  quanta_start;    /* UNIX GMT time at start of quanta */
#        time_t  quanta_end;      /* UNIX GMT time at end of quanta */
#        u_long  bytes_xfered;    /* Number of bytes transfered during quanta */
#};

# this is the template we're going to feed to unpack( )
my $template = "i i A16 A16 s s l l A16";


From 'pack' you can see that:

unsigned long -> L
unsigned short -> S

and time_t is unsigned long

so the string should be:

"i i L L S S L L L"


"A16" means a 16 chars ascii string.

#$template = "C*";

# open the file
open(FILE,"/tmp/testiplog/file.binout") or die "Unable to open FILE:$!\n";

# read it in one record at a time
while (<FILE>) {
    # unpack it, using our template
   my ($eth,$itcp,$src,$dst,$sport,$dport,$qstart,$qend,$bytes)=unpack($template,$_);

       #print "$eth,$itcp,$src,$dst,$sport,$dport,$qstart,$qend,$bytes\n";
       print "$src,$dst,$sport,$dport,$qstart,$qend,$bytes\n";

}

# close the file
close(FILE);

my current output:
bash-2.03# ./ipbinread.pl |more
2048,17,[EMAIL PROTECTED]
ÿ,3119,11382,-2139904511,5293878,@½
ÿ [EMAIL PROTECTED]
ÿ†, [EMAIL PROTECTED],½
©@,-17139,-256,155904,524288,†¿?AÜà P@
553648136,0,[EMAIL PROTECTED]@½
ÿ^L,1664,29476,-1346197450,872865792,[EMAIL PROTECTED]



should be something like: 111.111.111.111, 222.222.222.222,5412,22,1086190725,1086191025,1160



Im stuck... Any help is really appreciated.

Rob






--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>




Reply via email to