Pular para o conteúdo

macchanger

Installation

Debian/Ubuntu

sudo apt-get update
sudo apt-get install macchanger

Red Hat/CentOS/Fedora

sudo yum install macchanger
# or
sudo dnf install macchanger

Arch Linux

sudo pacman -S macchanger

macOS

brew install macchanger

From Source

git clone https://github.com/alobbs/macchanger.git
cd macchanger
./configure
make
sudo make install

Basic Commands

CommandDescription
macchanger -hDisplay help message and available options
macchanger -vShow version information
macchanger -s INTERFACEShow current MAC address of interface
macchanger -r INTERFACESet random MAC address
macchanger -m INTERFACESet random MAC from same vendor
macchanger -a INTERFACESet random vendor MAC address
macchanger -p INTERFACEReset to permanent/original MAC

Viewing Current MAC Address

# Show MAC of eth0
macchanger -s eth0

# Show MAC of wlan0
macchanger -s wlan0

# Using ifconfig
ifconfig eth0 | grep HWaddr

# Using ip command
ip link show eth0

Changing MAC to Random Address

# Generate completely random MAC
sudo macchanger -r eth0

# Show the change was applied
macchanger -s eth0

# Set random MAC on WiFi interface
sudo macchanger -r wlan0

Changing MAC to Specific Address

# Set a specific MAC address
sudo macchanger -m AA:BB:CC:DD:EE:FF eth0

# Verify change
macchanger -s eth0

# Another interface example
sudo macchanger -m 00:11:22:33:44:55 wlan0

Vendor-Specific MAC Changes

# Generate MAC with same vendor as original
sudo macchanger -m eth0

# Generate MAC with random vendor
sudo macchanger -a eth0

# View vendor information
macchanger -s eth0 | grep Vendor

Restoring Original MAC Address

# Reset to permanent/factory MAC
sudo macchanger -p eth0

# Verify original MAC restored
macchanger -s eth0

# Reset all interfaces
sudo macchanger -p eth0
sudo macchanger -p wlan0

Permanent MAC Changes

Using systemd-networkd

Create /etc/systemd/network/99-macchanger.link:

[Match]
MACAddress=OLD:MAC:ADDRESS

[Link]
MACAddress=NEW:MAC:ADDRESS
NamePolicy=kernel database onboard slot path

Using NetworkManager

# Edit connection
sudo nmtui

# Or manually edit configuration
sudo nano /etc/NetworkManager/conf.d/macchanger.conf

Add to file:

[connection]
cloned-mac-address=AA:BB:CC:DD:EE:FF

Using udev Rules

Create /etc/udev/rules.d/75-macchanger.rules:

ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", RUN+="/usr/bin/macchanger -m wlan0"

Reload rules:

sudo udevadm control --reload-rules
sudo udevadm trigger

Persistent with init Scripts

Create /etc/init.d/macchanger-startup:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          macchanger
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

sudo macchanger -r eth0
sudo macchanger -r wlan0

Make executable:

sudo chmod +x /etc/init.d/macchanger-startup
sudo update-rc.d macchanger-startup defaults

Common Use Cases

WiFi Anonymity

# Disconnect from WiFi
sudo ip link set wlan0 down

# Change MAC address
sudo macchanger -r wlan0

# Reconnect to network
sudo ip link set wlan0 up

# Verify new MAC
macchanger -s wlan0

Bypassing Captive Portals

# Some captive portals use MAC filtering
# Change MAC to bypass authentication requirement

sudo macchanger -r wlan0
sudo service network-manager restart

Bypassing MAC Filtering

# If network uses MAC whitelist, spoof allowed MAC
sudo macchanger -m AA:BB:CC:DD:EE:FF eth0

# Test connectivity
ping -c 1 8.8.8.8

Network Testing and Simulation

# Test multiple MAC addresses simultaneously
for i in {1..5}; do
  sudo macchanger -r eth0
  echo "MAC $i: $(macchanger -s eth0 | grep HWaddr)"
  sleep 2
done

Avoiding Network Tracking

# Change MAC before connecting to untrusted networks
sudo macchanger -r wlan0

# Connect to network
nmcli device wifi connect "SSID" password "PASSWORD"

# Verify anonymity
macchanger -s wlan0

Scripting Automation

Automatic MAC Change on Startup

Create ~/.local/bin/auto-macchanger.sh:

#!/bin/bash
# Auto-change MAC for both wired and wireless interfaces

INTERFACES=("eth0" "wlan0" "enp0s3" "wlp2s0")

for interface in "${INTERFACES[@]}"; do
  if ip link show "$interface" &>/dev/null; then
    echo "[*] Changing MAC on $interface..."
    sudo macchanger -r "$interface"
    sleep 1
  fi
done

echo "[+] All interfaces updated"

Make executable and run at startup:

chmod +x ~/.local/bin/auto-macchanger.sh
# Add to crontab or systemd service

Periodic MAC Rotation

Create a cron job for periodic MAC changes:

# Edit crontab
crontab -e

# Add entry (change MAC every hour)
0 * * * * /usr/bin/sudo /usr/bin/macchanger -r eth0 >/dev/null 2>&1

Interface-Specific Script

#!/bin/bash
# macchange.sh - Smart MAC changer

INTERFACE="${1:-eth0}"
ACTION="${2:-random}"

case "$ACTION" in
  random)
    echo "[*] Setting random MAC on $INTERFACE"
    sudo macchanger -r "$INTERFACE"
    ;;
  vendor)
    echo "[*] Setting vendor MAC on $INTERFACE"
    sudo macchanger -m "$INTERFACE"
    ;;
  restore)
    echo "[*] Restoring original MAC on $INTERFACE"
    sudo macchanger -p "$INTERFACE"
    ;;
  *)
    echo "Usage: $0 <interface> [random|vendor|restore]"
    exit 1
    ;;
esac

# Verify change
echo "[+] Current MAC:"
macchanger -s "$INTERFACE"

Batch Interface Changing

#!/bin/bash
# Change MAC on multiple interfaces

for iface in $(ip link show | grep -oP '^\d+: \K[^:]+'); do
  if [[ "$iface" != "lo" ]]; then
    echo "[*] Changing $iface"
    sudo macchanger -r "$iface" 2>/dev/null
  fi
done

Checking MAC Address Information

# View current and permanent MAC
macchanger -s eth0

# Show vendor information
macchanger -s eth0 | grep Vendor

# List all network interfaces
ip link show

# View MAC in detailed format
cat /sys/class/net/eth0/address

Tips and Best Practices

TipDescription
Run as rootmacchanger requires sudo/root privileges for actual changes
Disable IPv6Some systems leak IPv6 addresses; disable or use privacy extensions
Use consistent vendorUsing -m maintains vendor consistency for less obvious spoofing
Test connectivityAlways verify network access after changing MAC
Reset before troubleshootingIf network issues arise, reset to original MAC with -p
Document original MACSave original MAC before changes: macchanger -s eth0 > mac_backup.txt
Automate responsiblyUse cron jobs cautiously on shared systems
Network loggingBe aware that network admins may log MAC changes

Troubleshooting

Permission Denied

# macchanger requires root
sudo macchanger -r eth0

# Or add user to network group (less secure)
sudo usermod -aG netdev $USER

Interface Not Found

# List available interfaces
ip link show

# Common interface names
# eth0, eth1 - wired
# wlan0, wlan1, wlp2s0 - wireless
# lo - loopback (don't change!)

MAC Change Not Persisting

# Check if interface is being reset by network manager
sudo systemctl restart networking

# Or use NetworkManager commands
sudo nmcli connection reload
sudo nmcli connection up <connection-name>

Cannot Change on Active Interface

# Bring interface down first
sudo ip link set eth0 down

# Change MAC
sudo macchanger -r eth0

# Bring interface up
sudo ip link set eth0 up
ToolPurpose
ifconfigView/configure network interfaces
ip linkModern interface configuration
nmcliNetworkManager command-line tool
iproute2Advanced network routing
ethtoolEthernet device settings
aircrack-ngWiFi security testing suite