|
|
1.1 ! root 1: #!/usr/local/bin/perl ! 2: # uutraf.pl -- UUCP Traffic Analyzer ! 3: # SCCS Status : @(#)@ uutraf 1.7 ! 4: # Author : Johan Vromans ! 5: # Created On : *** ! 6: # Last Modified By: Johan Vromans ! 7: # Last Modified On: Wed Feb 26 08:52:56 1992 ! 8: # Update Count : 4 ! 9: # Status : OK ! 10: # Requires: : Perl V4 or later ! 11: ! 12: # Reads UUCP syslog, and generates a report from it. ! 13: # ! 14: # Created by Johan Vromans <[email protected]> ! 15: # Loosely based on an idea by Greg Hackney ([email protected]) ! 16: ! 17: # Usage: uutraf [-taylor|-hdb|-bnu|-bsd] [syslog] ! 18: ! 19: # Logfile formats: ! 20: # ! 21: # BSD: ! 22: # ! 23: # jv mhres (2/23-5:18) (698818735) received 135 b 2 secs ! 24: # root mhres (2/23-5:19) (698818742) sent 2365 b 3 secs, Pk: 38, Rxmt: 0 ! 25: # ! 26: # HDB: ! 27: # ! 28: # uunet!uucp M (12/10-09:04:22) (C,16390,1) [ttyXX] <- 2371 / 5.000 secs, \ ! 29: # 474 bytes/sec ! 30: # ! 31: # Taylor: ! 32: # ! 33: # jv mhres (1992-02-24 20:49:04.06) sent 16234 bytes in 148.780 seconds \ ! 34: # (109 bytes/sec) ! 35: # jv mhres (1992-02-24 21:04:05.76) received 449 bytes in 6.550 seconds \ ! 36: # (68 bytes/sec) ! 37: ! 38: $uucp_type = "gnu"; ! 39: ! 40: %hosts = (); # hosts seen ! 41: %bytes_in = (); # of bytes received from host ! 42: %bytes_out = (); # of bytes sent to host ! 43: %secs_in = (); # of seconds connect for recving ! 44: %secs_out = (); # of seconds connect for sending ! 45: %files_in = (); # of input requests ! 46: %files_out = (); # of output requests ! 47: ! 48: # read info, break the lines and tally ! 49: ! 50: if ( $ARGV[0] =~ /^-/ ) { ! 51: ($uucp_type = substr (shift (@ARGV), 1)) =~ tr/A-Z/a-z/; ! 52: } ! 53: ! 54: if ( $uucp_type eq "taylor" || $uucp_type eq "gnu" ) { ! 55: @ARGV = ("/usr/spool/uucp/Stats") unless $#ARGV >= 0; ! 56: $pat = "^[^ ]+ ([^ ]+) \\(([-0-9:\\/ .]+)\\) " . ! 57: "(sent|received) (\\d+) bytes in (\\d+)\\.(\\d+) seconds"; ! 58: $uucp_type = 0; ! 59: $recv = "received"; ! 60: } ! 61: elsif ( $uucp_type eq "hdb" || $uucp_type eq "bnu" ) { ! 62: @ARGV = ("/usr/spool/uucp/.Admin/xferstats") unless $#ARGV >= 0; ! 63: $pat = "^([^!]+)![^(]+\\(([-0-9:\\/]+)\\).+([<>])-? " . ! 64: "(\\d+) \\/ (\\d+)\\.(\\d+) secs"; ! 65: $uucp_type = 1; ! 66: $recv = "<"; ! 67: } ! 68: elsif ( $uucp_type eq "bsd" || $uucp_type eq "v7" ) { ! 69: @ARGV = ("/usr/spool/uucp/SYSLOG") unless $#ARGV >= 0; ! 70: $pat = "^[^ ]+ ([^ ]+) \\(([-0-9:\\/]+)\\) \\([^)]+\\) " . ! 71: "(sent|received) (\\d+) b (\\d+) secs"; ! 72: $uucp_type = 2; ! 73: $recv = "received"; ! 74: } ! 75: else { ! 76: die ("Unknown UUCP type: $uucp_type\n"); ! 77: } ! 78: ! 79: $garbage = 0; ! 80: ! 81: while ( <> ) { ! 82: unless ( /$pat/o ) { ! 83: print STDERR "Possible garbage: $_"; ! 84: if ( $garbage++ > 10 ) { ! 85: die ("Too much garbage; wrong UUCP type?\n"); ! 86: } ! 87: next; ! 88: } ! 89: ! 90: # gather timestamps ! 91: $last_date = $2; ! 92: $first_date = $last_date unless defined $first_date; ! 93: ! 94: # initialize new hosts ! 95: unless ( defined $hosts{$1} ) { ! 96: $hosts{$1} = $files_in{$1} = $files_out{$1} = ! 97: $bytes_in{$1} = $bytes_out{$1} = ! 98: $secs_in{$1} = $secs_out{$1} = 0; ! 99: } ! 100: ! 101: # Taylor and HDB have milliseconds, BSD has not. ! 102: $secs = ($uucp_type == 2) ? ($5 + ($5 == 0 ? 0.5 : 0)) : ($5 + $6/1000); ! 103: ! 104: # tally ! 105: if ( $3 eq $recv ) { # recv ! 106: $bytes_in{$1} += $4; ! 107: $files_in{$1}++; ! 108: $secs_in{$1} += $secs; ! 109: } ! 110: else { # xmit ! 111: $bytes_out{$1} += $4; ! 112: $files_out{$1}++; ! 113: $secs_out{$1} += $secs; ! 114: } ! 115: $garbage = 0; ! 116: } ! 117: ! 118: @hosts = keys (%hosts); ! 119: die ("No info found, stopped\n") if $#hosts < 0; ! 120: ! 121: ################ report section ################ ! 122: ! 123: $thishost = &gethostname(); ! 124: $thishost = (defined $thishost) ? "on node $thishost" : "report"; ! 125: ! 126: if ( $uucp_type eq 0 ) { # Taylor UUCP ! 127: substr ($first_date, 16) = ""; ! 128: substr ($last_date, 16) = ""; ! 129: } ! 130: ! 131: format std_head = ! 132: @||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ! 133: "UUCP traffic $thishost from $first_date to $last_date" ! 134: ! 135: Remote -----------K-Bytes----------- ----Hours---- --Avg CPS-- --Files-- ! 136: Host Recv Sent Total Recv Sent Recv Sent Recv Sent ! 137: . ! 138: format std_out = ! 139: @<<<<<<< @>>>>>>>> @>>>>>>>> @>>>>>>>> @>>>>> @>>>>> @>>>> @>>>> @>>> @>>> ! 140: $Zhost, $Zi_bytes, $Zo_bytes, $Zt_bytes, $Zi_hrs, $Zo_hrs, $Zi_acps, $Zo_acps, $Zi_count, $Zo_count ! 141: . ! 142: ! 143: $^ = "std_head"; ! 144: $~ = "std_out"; ! 145: ! 146: &print_dashes (); ! 147: ! 148: reset "T"; # reset totals ! 149: ! 150: foreach $host (@hosts) { ! 151: &print_line ($host, $bytes_in{$host}, $bytes_out{$host}, ! 152: $secs_in{$host}, $secs_out{$host}, ! 153: $files_in{$host}, $files_out{$host}); ! 154: ! 155: } ! 156: ! 157: &print_dashes (); ! 158: &print_line ("Total", $Ti_bytes, $To_bytes, ! 159: $Ti_secs, $To_secs, $Ti_count, $To_count); ! 160: ! 161: ################ that's it ################ ! 162: ! 163: sub print_line { ! 164: reset "Z"; # reset print fields ! 165: local ($Zhost, ! 166: $Zi_bytes, $Zo_bytes, ! 167: $Zi_secs, $Zo_secs, ! 168: $Zi_count, $Zo_count) = @_; ! 169: $Ti_bytes += $Zi_bytes; ! 170: $To_bytes += $Zo_bytes; ! 171: $Zt_bytes = $Zi_bytes + $Zo_bytes; ! 172: $Tt_bytes += $Zt_bytes; ! 173: $Zi_acps = ($Zi_secs > 0) ? sprintf ("%.0f", $Zi_bytes/$Zi_secs) : "0"; ! 174: $Zo_acps = ($Zo_secs > 0) ? sprintf ("%.0f", $Zo_bytes/$Zo_secs) : "0"; ! 175: $Zi_bytes = sprintf ("%.1f", $Zi_bytes/1000); ! 176: $Zo_bytes = sprintf ("%.1f", $Zo_bytes/1000); ! 177: $Zt_bytes = sprintf ("%.1f", $Zt_bytes/1000); ! 178: $Zi_hrs = sprintf ("%.1f", $Zi_secs/3600); ! 179: $Zo_hrs = sprintf ("%.1f", $Zo_secs/3600); ! 180: $Ti_secs += $Zi_secs; ! 181: $To_secs += $Zo_secs; ! 182: $Ti_count += $Zi_count; ! 183: $To_count += $Zo_count; ! 184: write; ! 185: } ! 186: ! 187: sub print_dashes { ! 188: $Zhost = $Zi_bytes = $Zo_bytes = $Zt_bytes = ! 189: $Zi_hrs = $Zo_hrs = $Zi_acps = $Zo_acps = $Zi_count = $Zo_count = ! 190: "------------"; ! 191: write; ! 192: # easy, isn't it? ! 193: } ! 194: ! 195: ################ missing ################ ! 196: ! 197: sub gethostname { ! 198: $ENV{"SHELL"} = "/bin/sh"; ! 199: $try = `uuname -l 2>/dev/null`; ! 200: chop $try; ! 201: return $+ if $try =~ /^[-.\w]+$/; ! 202: return undef; ! 203: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.