Uygulama 8 | MAC Changer

Başlamadan önce okuyunuz: MAC Adresleri, Sayı Sistemleri Bölüm 2

Bu yazımız, MAC adresimizi değiştirecek olan bir Bash Script içeriyor. Bu noktada bilmemiz gereken şey aslında Linux içerisinde bulunan, kurulum gerektirmeyen, hazır bir şekilde gelen 'macchanger' isimli bir MAC adresi değiştirici olduğudur. Bu araç hakkında biraz bilgi toplayalım. Bunun için 'macchanger --help' komutunu veriyorum.

Kırmızı kutucuklar içerisine baktığınızda '-r' argümanının, random yani rastgele bir MAC adresi döndürdüğünü; '-m' argümanının ise size, kendi elinizle bir MAC adresi girmemize olanak tanıdığını görüyoruz. Zaten oradaki '-m', 'manual' kelimesinden gelir. İşte, bu araçtaki bu iki argüman sık kullanıldığı için biz de bu ikisi üzerinden yola çıkacağız. Yani yazacağımız araçta kullanıcıya hem rastgele hem de el ile seçenekler sunmamız lazım.

İsterseniz ilk önce bu aracı kullanmayı deneyelim.

Dikkat edelim. İlk önce aracın ismini verdik. Hemen sonrasında argümanımızı verdik ve son olarak oturumumuzu verdik. Çıktı kısmına baktığınızda 'New MAC' kısmında yeni, rastgele bir MAC adresi aldık. Bir de -m kullanmayı deneyelim.

Bu sefer de yazdığımızın aynısını verdi. Burada dikkat etmenizi istediğim ufak bir detay var. Bu aracı çalıştırırken biz, hangi argümanı verirsek verelim interface'imizi yazıyoruz. Demek ki kendi aracımız içine de böyle bir özellik eklememiz gerek.

Peki, MAC adresimiz nerede tutuluyor?

Bildiğiniz üzere 'ifconfig' komutunu verdiğimizde burada çeşitli bilgiler ile beraber MAC adresimizi de görüyoruz. Ancak ben size, bu MAC adresinin nerede tutulduğunu soruyorum. Yeni bilgi için toplanın bakalım.

Dikkat ederseniz Kali'de /sys/class/net/ klasörüne gittim. Burada 'ls' çalıştırdığımda aslında interface dediğimiz oturumlarımızı görüyoruz. Aslında bunlar, ifconfig komutunda bize gösterilenler. Eğer başka bir oturuma yani interface'e sahip olsaydınız (örneğin 'wlan0'), bunu da ifconfig sonucunda gördüğünüz gibi bu klasörde görecektiniz. Peki, MAC adresi değiştireceğiz ancak hangi oturumunkini değiştireceğiz?

Elbette, o an eğer wlan0 kullanıyorsanız wlan0'ın, eth0 kullanıyorsanız da eth0'ın MAC'ini değiştireceksiniz. Peki, bu bilgileri aldığımıza göre isterseniz 'cd eth0' diyerek oturumumuzun içerisine girelim.

eth0 içerisine girdik ve ls çalıştırdığımızda karşımıza bir sürü şey çıktı. Bunlar arasında 'address' dediğimiz dosyada bizim MAC adresimiz tutulur. cat address olarak verdiğimiz komut, gördüğünüz gibi bize MAC adresimizi verdi. Amacımız, buradaki arkadaşı değiştirmek. Ancak sistem, bunu el ile değiştirmemize izin vermeyecektir.

Artık yazmaya başlayalım. Bunun için macchanger.sh isimli bir dosya açıyorum. Bu noktada isterseniz ilk önce bir kullanım kılavuzu oluşturalım ve kullanıcıya, bunu nasıl kullanabileceğini söyleyelim.

Bunun için 'usage' isimli bir fonksiyon açıyorum ve içerisine şunları yazıyorum:

Eğer rastgele bir MAC adresi istiyorsan aşağıdaki kullanımı kullan: ./macchanger <iface>.

Burada, rastgele olacağı için sadece interface girse yeterli olacaktır. Bir sonrakinde ise şunu yazdım:

Eğer manuel yani el ile bir MAC adresi istiyorsan aşağıdaki kullanımı kullan: ./macchanger <iface> <MAC Address (00:...)>

Bu noktada bir MAC adresinin çift sıfır ile başlıyor olması her zaman için daha kabul gören bir kullanımdır. O yüzden oraya '00:...' yazdım.

Kullanıcıdan, biri 'iface' diğeri de 'manualMAC' olmak üzere iki tane argüman istedim. Yani bu dosya, en az bir, en fazla iki argüman alacak şekilde çalışacak.

Madem bu argümanları tanımladım; o zaman bunları kontrol etmem lazım, öyle değil mi? Kullanıcı eksik veya fazla argüman girerse onu uyarmam lazım.

Bunun için daha önceden de hatırlayacağınız üzere verilen argümanları sayan özel bir komut ($#) vereceğim ancak bu komutu bir değişkene atayacağım çünkü bunu daha sonra kullanacağım.

Şimdi sıra kontrollerimizde. İlk olarak kullanıcı tek bir argüman girerse (örneğin eth0) rastgele olacak şekilde bir MAC adresi yaratacağız. Burayı dikkatli ve sakin bir kafayla okumanızı istiyorum.

$argsCount == 1 yani bir tane argüman verilmişse devam ediyoruz. Burada printf komutunu göreceksiniz. Bunu, başka dillerden veya GoLang serimizden biliyorsunuzdur ancak Bash içerisinde bunu ele almadık; hemen bakalım.

printf kelimesinin sonundaki 'f', 'format' anlamına gelir ve 'print' kelimesi de zaten ekrana yazdırmak anlamına gelir. Bu noktada ekrana yazdırılan şey, formatlanarak yani değiştirilerek yazılacaktır. Sürekli kullandığımız echo komutunu da aslında formatlayarak yazdığımız oluyor.

echo "Benim adım: $name"

şeklinde verdiğimiz kod içerisindeki her kelime aslında düz metin değildir; aralarında değişken de olabiliyor. İşte Bash, bu değişkeni formatlayarak bunun normal bir string gibi görünmesini sağlıyor ve çıktıyı veriyor. printf metodunun da yaptığı şey budur. Sadece printf, daha karmaşık ifadeler için kullanılıyor.

Bunun için GoLang serimizden bir hatırlatıcı bırakıyorum.

Şimdi tekrar kendi programımıza dönelim.

00:%02x:... olarak gördüğünüz ifadede ':' ifadesi, MAC adresinde her oktetin arasındaki noktalama işaretini ifade ediyor.

'%' ifadesi, bunun nasıl biçimlendirileceği ile alakalıdır. Bunu bir 'biçim belirteci' olarak algılayabilirsiniz; printf'e yardımcı olur ve sonrasında gelen ifadeleri baz alır. Sonrasındaki ifadelere bakacağız.

'2' ifadesi, iki nokta üst üste (:) ifadelerinin arasındaki karakterlerin sayısını belirler. Yani normal bir MAC adresinde her oktet iki karakterden oluştuğu için oraya 2 yazdık. Bu sayede :xx:  şeklinde bir format oluşacaktır.

'x' ifadesi ise, o kısmın sonlandığını gösterir ve bu yapının onaltılık olarak gösterilmesini sağlar. 'Onaltılık' kelimesi size bir şey ifade etmiyorsa daha net ve geniş bilgiler için yazının başında linkleri verilen blogları okuyunuz ya da kesik bir bilgi için aşağıdaki hatırlatıcıya bakınız.

Sağ tarafta bulunan '$[RANDOM%256]' ifadesi ise rastgele sayılar üreten bir sistem değişkenidir. Sistem değişkenleri konusundan da hatırlayacağınız üzere bunlar, başına dolar simgesi ile beraber büyük harflerle yazılır ve çağırılır. En sonundaki '256' ise, üretilecek olan sayının maksimum 256 olması gerektiğini ifade eder. Yani üretilecek olan sayı 0 ile 256 arasında olacaktır. İsterseniz bunu terminalde deneyelim.

Gördüğünüz gibi her seferinde başka bir rastgele değer üretiyor. Peki, bunu neden beş defa yazdık?

00:%2x:%2x:%2x:%2x:%2x ifadesinde baştaki '00' değeri, bizim ayarladığımız ve varsayılan olarak gelmesini istediğimiz değerdi. Bu değeri takip eden 5 oktet yani 5 adet iki karakterli kısmın her kısmı için bir adet $[RANDOM%256] komutu çalıştırdık. Bu, her oktet için ayrı bir rastgele sayı üretileceği anlamına gelir. En başta varsayılan olarak ayarladığımız '00' değerini de rastgele ayarlamak için sağ tarafa bir tane daha $[RANDOM%256] ifadesi vermeniz gerekir. İşte, o uzun satırın anlamı bu şekilde.

Bu uzun satırın altındaki satıra gelelim: macchanger -m $randomMAC $iface

Burada, macchanger aracından yardım alıyoruz. Bu noktada sadece macchanger aracına kullanıcıdan aldığımız parametreleri veriyoruz ve işlemi kendisi tamamlıyor. Buradaki '$randomMAC', biraz önceki uzun satırın ürettiği değeri tutan değişkendir. Orada yeni bir MAC üretmiyoruz; sadece yeni MAC olacak olan değeri üretiyoruz. Son olarak macchanger aracı sayesinde üretilen bu değeri gerçek bir MAC adresi hâline sokuyoruz.

İkinci ve üçüncü koşulumuza bakalım.

Bu, kullanıcının ikinci argümanı da yazdığını varsaydığımız koşul. Eğer iki koşul varsa en başta tanımladığımız 'manualMAC' argümanını da girmiş demektir. Bu yüzden interface ile beraber bu değeri de macchanger aracına veriyoruz ve istediklerimizi gerçekleştiriyor.

else kısmında ise hiç argüman girmediği ya da ikiden fazla argüman girdiği koşulları değerlendiriyoruz. Bunu yapması durumunda onu uyarıyoruz ve usage fonksiyonunda yer alan uyarılarımızı ona gösteriyoruz.

Bu noktada aklınıza şöyle bir soru gelebilir: "macchanger aracında -m, manuel; -r ise random anlamına geliyordu. Ancak biz, iki koşulda da -m kullandık, neden?".

Biz, bu değerleri kullanıcıdan aldığımız için ve aldığımız bu değerleri macchanger aracına parametre olarak verdiğimiz için her hâlükârda -m kullanmış oluyoruz. Biz zaten 'random' kısmı için bir işlem yaptık ve rastgele bir MAC değeri oluşturduk. Geri kalan şey, bunu macchanger aracına vermek.

Şimdi kodumuzu deneyelim.

Hiçbir argüman vermiyorum; bakalım, ne olacak?

Evet, kodladığımız şekilde çalıştı. Argüman göremediği için bizi uyardı ve usage fonksiyonunu önümüze getirdi. Artık bunun nasıl kullanıldığını biliyorum.

Şimdi, rastgele bir şeyler deneyelim.

MAC adresinin nasıl değiştiğini görüyorsunuz. Evet, gayet başarılı bir Script. Şimdi, el ile MAC girmeyi deneyelim.

Bu da sağlıklı bir şekilde çalışıyor. İsterseniz blogun başında sözüne ettiğim ve MAC adresinin tutulduğunu söylediğim yere bir bakalım.

Evet, değişmiş. Proje bu kadardı. Bu seri boyunca çeşitli ipuçlarını gördünüz ve Linux kullanmayı öğrendiniz ancak Linux, elbette bunlarla sınırlı değil; çalışmaya devam.

KODLAR


Yayınlanma Tarihi: 2022-10-18 19:39:52

Son Düzenleme Tarihi: 2022-10-20 16:39:22