MAC Adresi Değiştirme (MAC Spoofing) MAC Adresi Nasıl Öğrenilir ve Değiştirilir?

MAC Adresi Nedir?

MAC adresleri bir ağ üzerindeki cihazların NIC üzerinden birbirleri ile iletişime geçebilmesini sağlayan 48bit(6byte) uzunluğunda eşsiz bir adrestir.

Her NIC arayüzünün kendisine özel MAC adresi bulunur. Aynı ağdaki bilgisayarlar, birbirlerinin IP adreslerini öğrenmek için MAC adresleri üzerinden birbirleri ile iletişime geçerler(ARP).

MAC adresleri fiziksel adres, donanım adresi ya da ağ adresi olarakta isimlendirilir.

MAC adreslerinin ilk 3 okteti(byte) OUI olarak adlandırılır ve bu ilk 3byte üretici firmayı belirtir. Bir MAC adresinin ilk 3byte'ına bakarak üretici firma tespit edilebilir.

MacvendorLookup adresinden MAC adreslerinin üreticisini tespit edebilirsiniz.

GNU/Linux MAC Adresini Öğrenmek

MAC adresinizi öğrenmek için aşağıdaki araçlardan birisi kullanılabilir.

  1. ip
  2. ifconfig
  3. macchanger

Yukarıdaki araçları kullanarak MAC adresini öğrenebileceğimiz gibi GUI arayüzü ile MAC adresini öğrenebiliriz. Biz komut satırı arayüzünden MAC adresini öğrenmeyi göreceğiz.

ip aracı iproute2 network araçları koleksiyonunun içerisinde sisteminizde kurulu halde gelecektir. ifconfig, netstat, route, arp gibi araçları içerisinde barındıran net-tools network araçları koleksiyonunun yerini iproute2 almıştır. Bu sebeble bu yazıda genel olarak ip aracı kullanılacaktır.

Eğer ifconfig aracı sisteminizde yoksa ve kurmak istiyorsanız sudo apt-get install net-tools şeklinde yükleme yapmanız gerekmektedir.


Linux üzerinde network arayüzlerinin(interface) MAC adresini öğrenmek için terminal ekranını açıp ip link ya da ip link show yazmanız yeterlidir.

root@pc:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 68:f7:28:ba:ba:de brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether d0:7e:35:ba:ba:de brd ff:ff:ff:ff:ff:ff

Yukarıdaki çıktıda yeşil renk ile gösterilmiş alanlar enp1s0 ve wlp2s0 arayüzlerinin MAC adreslerini temsil ediyor.

NOT: Bu arayüz isimleri sisteminize göre farklılık gösterebilir.(eth0, wlan0 gibi)

NOT: Kırmızı ile gösterilenler, arayüzünün aktif(UP) ya da devredışı(down) olduğu gösteriyor. Arayüzümüz aktif, yani çalışır durumdayken, MAC adresini değiştirmemize izin verilmez. MAC adresi değiştirebilmemiz için arayüzümüzün devredışı(DOWN) halde olması gerekir. Bu yazıda tüm arayüzlerin UP(aktif) durumunda olduğu kabul edilerek, önce arayüzlerin kapatılıp sonra MAC adresinin değiştirilmesi gösterilmiştir. Eğer arayüzünüz DOWN(devredışı) durumda ise bu adımı geçebilirsiniz.


Bunlardan hangisinin wi-fi arayüzümüz olduğunu öğrenmek için iw dev | grep Interface komutu kullanılabilir.

root@pc:~# iw dev | grep Interface
	Interface wlp2s0

Wi-fi arayüzümüzün(interface) wlp2s0 olduğunu görüyoruz.

MAC Adresi Değiştirme (MAC Spoofing)

Normal şartlarda MAC adresi donanıma gömülü haldedir ve değiştilemez. Ancak network sanallaştırma işleminde, donanımsal ve yazılımsal network kaynakları ve işlevleri birleştirilerek, yazılım tabanlı yönetilebilir bir varlık halline getirilir. Network sanallaştırması MAC adresini yazılım tabanlı olarak yönetmemize izin verir. Bu sebeble NIC kartımıza gömülü halde gelen MAC adresini değiştiremesekte sanal olarak MAC adresimizi değiştirebiliriz.

MAC Spoofing terimi ise MAC adresini değiştirme ya da MAC adresi zehirleme işlemine denir.


MAC adresinin yapısı vikipedideki şu resimden incelenebilir.

Link: Mac Address Structure


MAC adresini elle değiştirirken dikkat etmemiz gereken bazı kısıtlamalar vardır. MAC adresleri broadcast MAC adresi(ff:ff:ff:ff:ff:ff) olarak tanımlanamaz, çünkü broadcast adresler ağdaki tüm MAC adreslerini temsil eder. Eğer broadcast MAC adresine bir paket gönderilirse bu paket ağdaki tüm ulaşılabilir MAC adreslerine gönderilir.


Ayrıca multicast adreslerede izin verilmez. Multicast MAC adreslerinde ilk byte'ın LSB'i (sağ en baştaki bit) 1 olamaz. Eğer 1 olarak ayarlanırsa bu adres multicast bir MAC adresini temsil eder.

Yani MAC adresinin ilk byte'ının ikinci nibble'ı hexadecimal(16lık sistem) olarak şu değerleri barındırmamalıdır.

1(0001) 3(0011) 5(0101) 7(0111) 9(1001) b(1011) d(1101) f(1111)


XX:XX:XX:XX:XX:XX şeklinde bir MAC adresinin kırmızı ile gösterilen(ikinci nibble) alanına (1,3,5,7,9,b,d,f) çift sayı olmayan hex değerleri yazılmamalıdır. Aksi taktirde hata alırsınız.

IP Aracı ile MAC Adresi Değiştirmek

MAC adresini değiştirmek için, öncelikle MAC adresini değiştirmek istediğimiz arayüzü kapatmamız gerekiyor. Daha sonra MAC adresini değiştirip arayüzümüzü tekrar attif hale getireceğiz.

NOT: Aşağıdaki işlemler root(0) kullanıcısı yetkisi gerektirir.

ip link set dev <interface> down
ip link set dev <interface> address <Yeni MAC Adresi>
ip link set dev <interface> up

Şimdi enp1s0 arayüzümüzün MAC adresini değiştirelim.

root@pc:~# ip link set dev enp1s0 down
root@pc:~# ip link set dev enp1s0 address de:ad:be:ef:ba:ba
root@pc:~# ip link set dev enp1s0 up

root@pc:~# ip link show enp1s0
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether de:ad:be:ef:ba:ba brd ff:ff:ff:ff:ff:ff

Eski MAC adresimiz 68:f7:28:ba:ba:de iken yeni MAC adresimiz de:ad:be:ef:ba:ba oldu.

Ifconfig Aracı ile MAC Adresini Değiştirmek

Ifconfig aracı ile MAC adresimizi değiştirebilmek için yine aynı şekilde ağ kartımızın arayüzünü kapatıp işlem yapmamız gerekiyor.

NOT: Aşağıdaki işlemler root(0) kullanıcısı yetkisi gerektirir.

ifconfig wlp2s0 down
ifconfig wlp2s0 hw ether <Yeni MAC Adresi>
ifconfig wlp2s0 up

Şimdi ifconfig aracı ile MAC adresini değiştirelim.

root@pc:~# ifconfig wlp2s0 down
root@pc:~# ifconfig wlp2s0 hw ether de:ad:be:ef:ba:ba
root@pc:~# ifconfig wlp2s0 up

root@pc:~# ifconfig wlp2s0
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.254.244  netmask 255.255.255.0  broadcast 192.168.254.255
        ether de:ad:be:ef:ba:ba  txqueuelen 1000  (Ethernet)
        RX packets 46092  bytes 34245121 (32.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27114  bytes 3991097 (3.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Yukarıda ether satırında yeni MAC adresini görüyoruz.

Macchanger Programı ile MAC Adresini Değiştirmek

Macchanger programı MAC adreslerini yönetmek ve ağ arayüzlerini kontrol etmek için yazılmış bir programdır.

https://github.com/alobbs/macchanger

http://ftp.sotirov-bg.net/pub/mirrors/gnu/macchanger/

Adreslerinden indirilebilir ya da repo üzerinden indirebilirsiniz.

Debian sürümleri için:

sudo apt-get install macchanger

Komutu ile indirilebilir.



Macchanger ile MAC adresini öğrenmek için:

macchanger -s <interface>

-s parametresi show anlamında ve belirtilen arayüzümüzdeki(interface) MAC adresini gösterir.

root@pc:# macchanger -s wlp2s0
Current MAC:   de:ad:be:ef:ba:ba (unknown)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)

Current MAC kısmı şu anda sahip olduğumuz MAC adresini gösteriyor.

Permanent MAC kısmında ise ağ kartımızın üreticisi tarafından bize verilen MAC adresi yer alıyor.

MAC adresimizi ilk 3 okteti(byte) üretici firmayı temsil ettiğini söylemiştik. Macchanger programı bu ilk 3 oktete bakarak ağ kartımızın üreticisini bize söylüyor.



Üretici firmaların ilk 3 oktetini(byte) OUI listelemek için:

macchanger -l

-l parametresi ile MAC adresi veren firmaların listesi erkana gelecektir. Burda hangi ilk 3 oktetin hangi firma tarafından verildiği görülebilir.



Macchanger ile arayüzümüze rastgele(random) MAC adresi vermek için;

ip link set dev <interface> down
macchanger -A <interface>
ip link set dev <interface> up

-A parametresi belirtilen arayüze rastgele bir MAC adresi verir.

Daha öncede bahsettiğim gibi MAC adresini değiştirmek için ağ arayüzümüzü kapatmamız gerekiyor.

root@pc:# macchanger -A enp1s0
Current MAC:   de:ad:be:ef:ba:ba (unknown)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)
[ERROR] Could not change MAC: interface up or insufficient permissions: Device or resource busy

root@pc:# ip link set dev enp1s0 down

root@pc:# macchanger -A enp1s0
Current MAC:   de:ad:be:ef:ba:ba (unknown)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)
New MAC:       00:15:d1:cf:6d:fc (ARRIS Group, Inc.)

root@pc:# ip link set dev enp1s0 up

Ağ kartımızı kapatmadan MAC adresimizi değiştirmeye çalıştığımızda hata ile karşılaştık o yüzden MAC adresi değiştirmeden önce ip aracı ile enp1s0 arayüzünü kapatıyoruz. Daha sonra MAC adresimizi başarılı bir şekilde değiştirdiğimiz görülebiliyor.


Hem ip aracı ile hemde macchanger ile MAC adresimizi kontrol ettiğimizde MAC adresimizin değiştiğini görebiliyoruz.

root@pc:# macchanger -s enp1s0
Current MAC:   00:15:d1:cf:6d:fc (ARRIS Group, Inc.)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)

root@pc:# ip link show enp1s0
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:15:d1:cf:6d:fc brd ff:ff:ff:ff:ff:ff


Belirli bir MAC adresi vermek için:

ip link set dev enp1s0 down
macchanger -m <Yeni MAC Adresi> enp1s0
ip link set dev enp1s0 up

-m parametresi ile MAC adresini belirtebiliyoruz.

root@pc:# ip link set dev enp1s0 down

root@pc:# macchanger -m de:de:ba:ba:de:de enp1s0
Current MAC:   00:15:d1:cf:6d:fc (ARRIS Group, Inc.)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)
New MAC:       de:de:ba:ba:de:de (unknown)

root@pc:# ip link set dev enp1s0 up

root@pc:# ip link show enp1s0
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether de:de:ba:ba:de:de brd ff:ff:ff:ff:ff:ff


Asıl MAC adresine geri dönmek için:

ip link set dev <interface> down
macchanger -p <interface>
ip link set dev <interface> up

-p permanent yani kalıcı MAC adresine dönmek istediğimizi belirtiyor.

root@pc:# ip link set dev enp1s0 down

root@pc:# macchanger -p enp1s0
Current MAC:   de:de:ba:ba:de:de (unknown)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)
New MAC:       d0:7e:35:ba:ba:de (Intel Corporate)

root@pc:# ip link set dev enp1s0 up

root@pc:# macchanger -s enp1s0
Current MAC:   d0:7e:35:ba:ba:de (Intel Corporate)
Permanent MAC: d0:7e:35:ba:ba:de (Intel Corporate)