#!/local/bin/perl # # The only reliable way I've found to get promisc status on an ethernet # card on Solaris --jfh, 9/8/98 # # Requires that the program "lsof" be installed on the system # use Getopt::Std; $ENV{PATH} = "/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin"; $ENV{IFS} = " \t\n"; $MAILER = "/usr/lib/sendmail"; $ifcheck_command = "/usr/local/sbin/lsof"; $interfaces = 'le|hme'; chomp($hostname = `/bin/hostname`); Main(); sub Main { getopts("a:"); my @outlines; ($ADDRESS = $opt_a) if ($opt_a); open (IFCHECK, "$ifcheck_command |"); die "$ifcheck_command: $!" if $?; while () { next if (m,rarpd,); # blah, rarpd opens up the durn device... if (m,/devices/pseudo.*clone.*($interfaces),o) { push(@outlines, "$hostname:$1 : In promisc mode\n"); push(@outlines, $_); } } if (@outlines) { if ($ADDRESS) { close(STDOUT) ; open(MAIL, "| $MAILER $ADDRESS") || die "$MAILER : $!"; open(STDOUT, ">&MAIL") || die "cannot dup stdout"; print "To: $ADDRESS\n"; print "Subject: ifcheck_output_$hostname\n\n"; }; print @outlines if (@outlines); close(STDOUT) if ($ADDRESS); } }