#!/usr/bin/perl -w # macninja.pl - by dual # # Spoofs MAC with choice of address # # Usage: # macninja -[abcr] # # macninja -d ###################################################### use strict; # Declare my ($cnt, $hex, $mac, $rand); my @mac; # Print header print "macninja.pl - Spoofs MAC with choice of address\n\n"; # Make sure we're root print ">>> $0 must run as root... exiting.\n" and exit unless ($< == 0); # Get and check args usage() unless defined(my $oui = shift); usage() unless defined(my $eth = shift); if ($oui =~ /^-a$/) { airlink(); } elsif ($oui =~ /^-b$/) { belkin(); } elsif ($oui =~ /^-c$/) { cisco(); } elsif ($oui =~ /^-d$/) { usage() unless defined(my $def_mac = shift); define($def_mac); } elsif ($oui =~ /^-r$/) { random(); } else { usage(); } # Provide assistance sub usage { print < # macninja -d -a => Airlink (00:E0:98) -b => Belkin (00:30:BD) -c => Cisco (00:40:96) -d => Define MAC address -r => Random MAC address EOF exit; } # Airlink OUI sub airlink { $cnt = 3; $mac[0] = "00"; $mac[1] = "E0"; $mac[2] = "98"; while ($cnt < 6) { $rand = rand(255); if ($rand < 16) { $rand += 16; $hex = sprintf("%X", $rand); } else { $hex = sprintf("%X", $rand); } $mac[$cnt] = $hex; $cnt++; } spoof(@mac); } # Belkin OUI sub belkin { $cnt = 3; $mac[0] = "00"; $mac[1] = "30"; $mac[2] = "BD"; while ($cnt < 6) { $rand = rand(255); if ($rand < 16) { $rand += 16; $hex = sprintf("%X", $rand); } else { $hex = sprintf("%X", $rand); } $mac[$cnt] = $hex; $cnt++; } spoof(@mac); } # Cisco OUI sub cisco { $cnt = 3; $mac[0] = "00"; $mac[1] = "40"; $mac[2] = "96"; while ($cnt < 6) { $rand = rand(255); if ($rand < 16) { $rand += 16; $hex = sprintf("%X", $rand); } else { $hex = sprintf("%X", $rand); } $mac[$cnt] = $hex; $cnt++; } spoof(@mac); } # Define MAC sub define { $mac = $_[0]; usage() unless ( $mac =~ / [\dA-Fa-f]{2}: [\dA-Fa-f]{2}: [\dA-Fa-f]{2}: [\dA-Fa-f]{2}: [\dA-Fa-f]{2}: [\dA-Fa-f]{2} /x ); @mac = split(/:/, $mac); spoof(@mac); } # Random MAC sub random { $cnt = 0; while ($cnt < 6) { $rand = rand(255); if ($rand < 16) { $rand += 16; $hex = sprintf("%X", $rand); } else { $hex = sprintf("%X", $rand); } $mac[$cnt] = $hex; $cnt++; } spoof(@mac); } # Spoof MAC here sub spoof { print ">>> Spoofing MAC with $mac[0]:$mac[1]:$mac[2]:$mac[3]:$mac[4]:$mac[5]..."; if (`uname` =~ /Darwin/) { system("ifconfig $eth lladdr $mac[0]:$mac[1]:$mac[2]:$mac[3]:$mac[4]:$mac[5]"); } else { system("ifconfig $eth down"); sleep 1; system("ifconfig $eth hw ether $mac[0]:$mac[1]:$mac[2]:$mac[3]:$mac[4]:$mac[5] up"); } print " done!\n"; exit; }