Greg Sarsons wrote: > > Hopefully someone can point/help me out. What is below is an extract of > packet capture ... similar to tcpdump. What I want to do is to > determine the amount of traffic a port has on it. I just plan on > redirecting the output to this program. > > My thoughts are to maybe create a hash have the totals stored in the has > using the port numbers as keys. So at each block say I'm looking for > TCP traffic then I would make sure it is TCP and then I would find the > incoming source port ( the tcp packets below have a source port of 6699) > > Once the source address is determined then the has would be checked to > see if the key exists. If the key exists then add the DgmLen (datagram) > length onto it. If the key(port) does not exist then add the key and > DgmLen. > > Then when it is done I'll print out the hash sorted by the ascending key > (port) values. > > Care has to be taken if the Traffic type is not TCP or UDP say ICMP as > the format of the line changes at bit. There is no port numbers. > > With either TCP,UDP, or ICMP the 3rd line of each dump is not required. > > If someone could help me with the structure/setup of this ... extracting > the data I would appreciate it. > > PS is there a size that the hash should not exceed?
No. Here is one way to do it: #!/usr/bin/perl -w use strict; $/ = ""; my %hash; while ( <DATA> ) { next unless (split)[4] eq 'TCP'; my $port = $1 if /\d+:(\d+)\s*->\s*\d+/; my $len = $1 if /DgmLen:(\d+)/; $hash{$port}{'count'}++; $hash{$port}{'length'} += $len; } for ( sort { $a <=> $b } keys %hash ) { print "Port: $_ Count: $hash{$_}{'count'} Length: $hash{$_}{'length'}\n"; } __DATA__ 10/15-10:56:39.788943 64.229.130.126:6699 -> 192.117.91.98:1395 TCP TTL:120 TOS:0x0 ID:2936 IpLen:20 DgmLen:40 DF ***A**** Seq: 0x6AA4F9 Ack: 0x1DAEF3DB Win: 0x2124 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 10/15-10:56:39.812796 212.58.240.61:57905 -> 192.117.91.59:6970 UDP TTL:236 TOS:0x0 ID:39733 IpLen:20 DgmLen:318 DF Len: 298 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 10/15-10:56:39.826366 24.48.104.144:6699 -> 192.117.90.128:1577 TCP TTL:11 TOS:0x0 ID:35437 IpLen:20 DgmLen:40 DF ***A**** Seq: 0x5FC28E Ack: 0x5A8547D Win: 0x3ED0 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 10/15-10:56:39.887449 24.22.243.72:6699 -> 192.117.89.212:1608 TCP TTL:114 TOS:0x0 ID:59166 IpLen:20 DgmLen:1500 DF ***AP*** Seq: 0x2A085633 Ack: 0xBEEE29B0 Win: 0x4432 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]