#!/usr/bin/perl use warnings; use strict; sub usage { "usage: $0 [device] \n". " device - a valid ethernet device\n". " mac_address - the MAC address to use \n". " - a random MAC will be used if none is specified\n" } sub run_as_root { $< == 0 } sub valid_dev { $_ = shift; -r "/sys/class/net/$_" } sub valid_mac { $_ = shift; !defined || /^(?:[\da-f]{2}(?(?!$):)){6}$/i } my $dev = shift @ARGV or die usage(); my $mac = shift @ARGV; if (@ARGV) { die usage() }; die "Must be run as root!\n" unless run_as_root(); die "Invalid ethernet device!\n" unless valid_dev($dev); die "Invalid MAC address!\n" unless valid_mac($mac); system "ifconfig $dev down"; defined $mac ? system "macchanger -m $mac $dev" : system "macchanger -A $dev"; system "ifconfig $dev up";