Penetration Testing mailing list archives

A simple way to block ARP Cache Poisoning


From: Nelson Brito <nelson () SECUNET COM BR>
Date: Tue, 29 May 2001 15:45:33 -0300

I know it's old news, but it's a very pretty way to protect against ARP Cache Poisoning.

If you already know this code you'll see that a significant differences between the first code I made and this second 
one.

[BOF]
# -*- perl -*-
# Script ID    : farpce.pl - Force ARP Cache Entries Perl Script v. 0.4
# Date         : Apr/06/2000
# Revisions    : Apr/15/2000
#                May/23/2000
#                May/29/2001
# Author       : Nelson Brito
# E-mail       : nelson () SECUNET COM BR
use Getopt::Std; 
use Shell qw(arp);

getopts('f:', \%o); $V = "0.4";

if($^O =~ /MSWin32/i){ @p = split(/\\/, $0); $0 = pop @p; $c = "-N"; }
else{ $0 =~ s#.*/##; $c = "-i"; }

print "--- $0 v. $V / Nelson Brito / Secunet AG ---\n";
$f =     $o{'f'}    ? $o{'f'}  : f2($0);
$m =     f1($f)     ? "Succed" : "Failed";
print $m . "!\n";

sub f1{
        open(F, "<".$_[0]) or die "$0: $!\n"; 
        foreach(<F>){
                chomp; next if (/^\s*#/); next if (/^\s*$/);
                ((($i, $h, $I) = /\s*(.+?)\s+(\S+)\s*\s+(\S+)\s*/) == 3) or return 0;
                (split(/\./, $i) == 4) or return 0; (split(/:/, $h) == 6) or return 0;
                $h =~ y/:/-/ if ($^O =~ /MSWin32/);     print "."; arp("-s", $i, $h, $c, $I);
        }
        close(F) or die "$0: $!\n";
        return 1;
}

sub f2{
die <<_USAGE

Usage: $_[0] [-f <arp-file>]

Copyright © 2000, 2001 Nelson Brito<nelson\@SECUNET.COM.BR>. All rights reserved.
_USAGE
;
}
# Making code as an ART! ;))
[EOF]

Linux's ARP file example:
#<IPAddr>       <HWAddre>               <Iface>
192.168.1.1     FF:DD:AA:00:00:44       eth0

Windows NT's ARP file example:
#<IPAddr>       <HWAddre>               <Iface's IPAddr>
192.168.1.1     FF:DD:AA:00:00:44       192.168.1.69

Enjoy.

Sem mais,
-- 
# Nelson Brito
# Security Analyst and Penetration Tester
# Security Networks AG - The trust Company!
#
# Usage: cat <file> | perl .signature
foreach(<STDIN>){chop;split(//,$_);print reverse @_;print "\n";}


Current thread: