mausezahn ile Özel Ethernet Çerçeveleri ve Ham Ağ Paketleri Oluşturma
Ağ testlerinde çoğu zaman elimizdeki araçlar bizi kısıtlar. ping ICMP gönderiyor, curl HTTP istiyor, netcat TCP/UDP üzerinden çalışıyor. Ama ya katman 2’de bir şeyleri test etmeniz gerekirse? Ya VLAN etiketleri doğru çalışıyor mu diye bakmak istiyorsanız, ya da özel bir Ethernet çerçevesi oluşturup switch’in tepkisini gözlemlemek istiyorsanız? İşte tam bu noktada mausezahn devreye giriyor.
mausezahn (kısaca mz), ham ağ paketleri oluşturmak için tasarlanmış, son derece esnek bir araç. Ethernet çerçevelerinden başlayıp VLAN etiketleme, ARP paketleri, özel TCP/UDP akışları gibi pek çok senaryoda işe yarıyor. Bende bu araçla ilk tanışma biraz zorunluluktan oldu, bir müşterinin switchleri arasında VLAN trunk doğrulaması yapmam gerekiyordu ve elimdeki standart araçlar yetersiz kalıyordu. O günden beri araç kutumdan çıkmıyor.
mausezahn Nedir ve Neden Kullanılır?
mausezahn, Almanca’da “fare pençesi” anlamına geliyor, ama ağda yarattığı etki pek de masum değil. Orijinal olarak Jochen Roth tarafından geliştirilen bu araç, şu an birçok Linux dağıtımının depolarında mevcut. Netmap ve libpcap üzerine inşa edilmiş olması sayesinde doğrudan ham soketlerle çalışabiliyor.
Neden mausezahn? Şöyle sıralayayım:
- Katman 2 kontrolü: Ethernet çerçevesinin her bitini kendiniz belirleyebiliyorsunuz
- VLAN ve QinQ desteği: 802.1Q ve 802.1ad etiketleme tam destekli
- Protokol bağımsızlığı: ARP, ICMP, TCP, UDP ve tamamen özel (custom) çerçeveler oluşturabiliyorsunuz
- Hız kontrolü: Saniyede kaç paket gönderileceğini ayarlayabiliyorsunuz, bu trafik simülasyonu için kritik
- Hex payload: İstediğiniz veriyi doğrudan hex olarak yükleyebiliyorsunuz
Benzer araçlarla karşılaştırıldığında; scapy Python bilgisi gerektiriyor, hping3 daha çok TCP/IP odaklı, packeth GUI tabanlı. mausezahn ise saf komut satırı, scriptlenebilir ve hafif.
Kurulum
Çoğu dağıtımda paket olarak mevcut:
# Debian/Ubuntu
sudo apt-get install mausezahn
# RHEL/CentOS/Rocky Linux (EPEL gerekebilir)
sudo yum install mausezahn
# Fedora
sudo dnf install mausezahn
# Arch Linux
sudo pacman -S mausezahn
# Kaynak koddan derleme (en güncel özellikler için)
git clone https://github.com/netsniff-ng/netsniff-ng.git
cd netsniff-ng
./configure
make
sudo make install
Kurulumdan sonra mz --help ile temel yardımı görebilirsiniz. Ama man sayfası çok daha zengin, man mausezahn ile başlamanızı tavsiye ederim.
Önemli not: mausezahn ham soketler kullandığı için root yetkileri gerekiyor. Her komutu sudo ile çalıştırmanız gerekecek.
Temel Sözdizimi ve Parametreler
mausezahn’ın genel sözdizimi şu şekilde:
mz [seçenekler] <arayüz> [hedef]
Sık kullanılan parametreler:
- -t: Protokol tipi belirtir (arp, ip, udp, tcp, icmp)
- -A: Kaynak IP adresi
- -B: Hedef IP adresi
- -a: Kaynak MAC adresi
- -b: Hedef MAC adresi
- -c: Kaç paket gönderileceği (0 = sonsuz)
- -d: Paketler arası gecikme (örn: 100msec, 1sec)
- -p: Payload boyutu (byte olarak)
- -P: ASCII payload içeriği
- -x: Hex payload içeriği
- -Q: VLAN ID (802.1Q etiketleme için)
- -q: Sessiz mod (quiet), çıktı bastırılır
- -v: Verbose mod, detaylı çıktı
- -S: Sahte (spoof) kaynak IP modu
- -M: MPLS etiketi
İlk Adımlar: Basit Paket Gönderimi
En basit haliyle bir ICMP paketi gönderelim:
# eth0 üzerinden 192.168.1.1'e 5 ICMP paketi gönder
sudo mz eth0 -t icmp -A 192.168.1.100 -B 192.168.1.1 -c 5 -v
Bu kadar basit. Şimdi biraz daha ilginç şeyler yapalım.
UDP üzerinden özel bir payload ile paket gönderimi:
# 8080 portuna "HELLO_NETWORK" mesajı içeren UDP paketi
sudo mz eth0 -t udp "dp=8080,sp=12345" -A 192.168.1.100 -B 192.168.1.50 -P "HELLO_NETWORK" -c 3 -v
Bu komut, kaynak portu 12345, hedef portu 8080 olan bir UDP paketi oluşturuyor ve içine ASCII metin yerleştiriyor. Uygulama katmanı protokol analizlerinde çok işe yarıyor.
Ham Ethernet Çerçeveleri Oluşturma
İşte mausezahn’ın gerçek gücünün ortaya çıktığı yer burası. Hiçbir protokol şablonu kullanmadan, tamamen özel bir Ethernet çerçevesi oluşturalım:
# Özel EtherType ile ham Ethernet çerçevesi
# EtherType 0x88B5 (IEEE deneysel protokol alanı)
sudo mz eth0
-a 00:11:22:33:44:55
-b ff:ff:ff:ff:ff:ff
-x "88B5DEADBEEFCAFEBABE0102030405060708"
-c 1 -v
Burada -x ile doğrudan hex veri veriyoruz. İlk 2 byte (88B5) EtherType alanını, geri kalanı payload’ı oluşturuyor. Bu yöntemle, standart araçların hiç dokunmadığı protokolleri bile test edebilirsiniz.
Bir adım daha ileri gidelim. Kendi EtherType değerinizi tanımladığınız tamamen özel bir çerçeve:
# Destination MAC + Source MAC + EtherType + Payload
# Ethernet header'ı tamamen elle oluşturma
sudo mz eth0
-a 00:DE:AD:BE:EF:01
-b 00:DE:AD:BE:EF:02
-x "9999"
-P "Bu bir test paketidir - custom protocol"
-c 5
-d 500msec
-v
-d 500msec ile paketler arası 500 milisaniye bekliyoruz. Bu, trafiği wireshark ile yakalayıp analiz ederken takip etmeyi kolaylaştırıyor.
VLAN Etiketleme: 802.1Q Test Senaryoları
Bu bölüm, benim en çok kullandığım senaryo. Yeni bir switch konfigürasyonu yaptığınızda veya VLAN trunk’larını doğrulamanız gerektiğinde mausezahn inanılmaz pratik:
# VLAN 100'e etiketlenmiş paket gönder
sudo mz eth0 -Q 100 -t udp "dp=9999" -A 10.100.0.1 -B 10.100.0.254 -c 10 -v
VLAN etiketleme doğrulaması için daha kapsamlı bir test:
# Farklı VLAN'lara ardışık paketler gönder, her birini 5'er adet
for vlan_id in 10 20 30 40 50; do
echo "VLAN $vlan_id için test paketi gönderiliyor..."
sudo mz eth0
-Q $vlan_id
-t icmp
-A 192.168.${vlan_id}.1
-B 192.168.${vlan_id}.254
-c 5
-d 100msec
-q
echo "VLAN $vlan_id tamamlandı"
done
Bu script ile 5 farklı VLAN’a test paketleri gönderiyor ve switch’in trunk portu üzerinden bu paketleri doğru şekilde iletip iletmediğini Wireshark ile diğer taraftan doğrulayabiliyorsunuz.
QinQ (Double Tagging) testi – provider switch’lerde kritik:
# Outer VLAN 200, Inner VLAN 100 (QinQ / 802.1ad)
sudo mz eth0
-Q 200,100
-t udp "dp=5000,sp=5000"
-A 172.16.1.1
-B 172.16.1.2
-c 3 -v
QinQ testleri yaparken wireshark’ta vlan filtresini kullanın ve her iki etiketin de doğru göründüğünü teyit edin.
ARP Paketleriyle Çalışmak
ARP manipülasyonu ağ güvenlik testlerinin vazgeçilmez parçası. mausezahn ile ARP request ve reply paketleri oluşturmak oldukça kolay:
# Gratuitous ARP gönderimi (IP çakışması tespiti için)
sudo mz eth0
-t arp "request,smac=00:11:22:33:44:55,sip=192.168.1.100,tmac=ff:ff:ff:ff:ff:ff,tip=192.168.1.100"
-b ff:ff:ff:ff:ff:ff
-c 3
-v
ARP reply paketleri (dikkatli kullanın, test ortamında):
# ARP reply - belirli bir IP için MAC güncelleme
sudo mz eth0
-t arp "reply,smac=00:AA:BB:CC:DD:EE,sip=192.168.1.1,tmac=00:11:22:33:44:55,tip=192.168.1.100"
-a 00:AA:BB:CC:DD:EE
-b 00:11:22:33:44:55
-c 1 -v
ARP storm simülasyonu (ağ stres testi için, sadece izole lab ortamında):
# Broadcast ARP request flood - switch'in ARP handling kapasitesini test eder
sudo mz eth0
-t arp "request,sip=10.0.0.1,tip=10.0.0.254"
-b ff:ff:ff:ff:ff:ff
-c 1000
-d 1msec
-q
echo "ARP stres testi tamamlandı"
TCP Flag Manipülasyonu
TCP durum makinesi testleri için flag kombinasyonları belirleyebiliyorsunuz:
# SYN paketi gönder - port tarama simülasyonu
sudo mz eth0
-t tcp "syn,dp=80,sp=45678"
-A 192.168.1.100
-B 192.168.1.200
-c 1 -v
# FIN-ACK kombinasyonu - bağlantı kapatma testi
sudo mz eth0
-t tcp "fin,ack,dp=443,sp=52000,seq=12345,ack=67890"
-A 10.0.0.5
-B 10.0.0.1
-c 1 -v
Christmas tree paketi (tüm flagler set edilmiş, IDS/IPS testlerinde kullanılır):
# FIN+URG+PSH - bazı sistemlerde farklı tepkilere yol açar
sudo mz eth0
-t tcp "fin,urg,psh,dp=80,sp=33333"
-A 10.10.10.50
-B 10.10.10.1
-c 5
-d 200msec
-v
Gerçek Dünya Senaryosu: Switch Port Güvenliği Testi
Geçen yıl bir proje kapsamında bir bankanın data center switch altyapısını test etmem gerekti. Müşteri, port security özelliğinin doğru çalışıp çalışmadığını doğrulamak istiyordu. İşte tam test script’i:
#!/bin/bash
# switch_port_security_test.sh
# Switch port security doğrulama scripti
INTERFACE="eth0"
TARGET_IP="192.168.1.1"
LEGITIMATE_MAC="00:11:22:33:44:55"
SPOOFED_MAC="DE:AD:BE:EF:00:01"
LOG_FILE="/tmp/port_security_test.log"
echo "=== Switch Port Security Testi Başlıyor ===" | tee $LOG_FILE
echo "Tarih: $(date)" | tee -a $LOG_FILE
echo "" | tee -a $LOG_FILE
# Test 1: Meşru MAC ile iletişim
echo "[TEST 1] Meşru MAC adresi ile paket gönderimi..." | tee -a $LOG_FILE
sudo mz $INTERFACE
-a $LEGITIMATE_MAC
-b ff:ff:ff:ff:ff:ff
-t arp "request,smac=$LEGITIMATE_MAC,sip=192.168.1.100,tip=$TARGET_IP"
-c 3 -q
if [ $? -eq 0 ]; then
echo "[OK] Meşru MAC ile iletişim başarılı" | tee -a $LOG_FILE
else
echo "[HATA] Meşru MAC ile iletişim başarısız" | tee -a $LOG_FILE
fi
sleep 2
# Test 2: Sahte MAC ile iletişim denemesi
echo "[TEST 2] Sahte MAC adresi ile paket gönderimi..." | tee -a $LOG_FILE
sudo mz $INTERFACE
-a $SPOOFED_MAC
-b ff:ff:ff:ff:ff:ff
-t arp "request,smac=$SPOOFED_MAC,sip=192.168.1.101,tip=$TARGET_IP"
-c 3 -q
echo "[BİLGİ] Sahte MAC paketleri gönderildi - switch log'larını kontrol edin" | tee -a $LOG_FILE
echo "" | tee -a $LOG_FILE
echo "Test tamamlandı. Log: $LOG_FILE" | tee -a $LOG_FILE
Bu scripti çalıştırırken aynı anda switch üzerinde show port-security veya benzeri komutu izleyin. Spoofed MAC’i switch düşürmeli ve port’u err-disable’a almalı.
Bant Genişliği ve Yük Testi
mausezahn ile belirli bir bant genişliği üretmek için paket boyutunu ve gönderim hızını birlikte ayarlayabilirsiniz:
# 1500 byte payload ile maksimum hız testi (dikkatli kullanın!)
sudo mz eth0
-t udp "dp=5001,sp=5001"
-A 10.0.0.1
-B 10.0.0.2
-p 1472
-c 0
-d 0
-q &
MZ_PID=$!
echo "Trafik üretiliyor... 10 saniye sonra duracak"
sleep 10
kill $MZ_PID
echo "Test tamamlandı"
-p 1472 ile payload boyutunu Ethernet MTU’sunu aşmayacak şekilde ayarlıyoruz (1472 + 20 IP + 8 UDP = 1500 byte). -d 0 ile gecikme sıfır, yani maksimum hız.
Kontrollü bant genişliği üretimi:
# ~10 Mbps trafik üretimi
# 1250 byte paket * 1000 paket/sn = ~10 Mbps
sudo mz eth0
-t udp "dp=9999"
-A 10.0.0.1
-B 10.0.0.2
-p 1250
-c 10000
-d 1msec
-q
Pratik İpuçları ve Dikkat Edilmesi Gerekenler
Yıllarca kullandıktan sonra biriktirdiğim bazı notlar:
- Wireshark ile birlikte kullanın: mausezahn ile gönderirken hedef tarafta wireshark çalıştırın.
-vflagini mausezahn’a eklerseniz gönderilen paketin hex dump’ını terminalde görürsünüz - Root olmadan çalışmaz: Eğer non-root kullanıcıyla çalıştırmanız gerekiyorsa,
CAP_NET_RAWcapability’sini binary’ye ekleyebilirsiniz:sudo setcap cap_net_raw+ep /usr/bin/mz - Üretim ağında dikkat: ARP paketleri ve sahte MAC’ler gerçek ağlarda ciddi sorunlara yol açabilir. Her zaman izole test ortamı tercih edin
- Paket yakalama: Gönderdiğiniz paketleri kaydedip analiz etmek için
tcpdump -i eth0 -w test_paketleri.pcapile paralel çalıştırın - Checksum sorunları: Bazı özel hex payload kullanımlarında checksum hatalı olabilir. Gerçek cihaz tepkisi test ediliyorsa bu önemli, sadece switch davranışı test ediliyorsa genellikle sorun yaratmaz
- Interface ismini doğrulayın: Modern Linux sistemlerinde
eth0yerineens3,enp3s0gibi isimler olabilir.ip link showile doğrulayın
Güvenlik ve Sorumluluk
Bu yazıyı okuyorsanız muhtemelen bir sysadmin veya ağ mühendisisinizdir ve bu araçların neden riskli olabileceğini zaten biliyorsunuzdur. Ama yine de açık yazayım: mausezahn ile yapabileceğiniz şeylerin büyük çoğunluğu, yetki verilmemiş bir ağda yapıldığında hem etik hem yasal sorunlara yol açar. ARP poisoning, MAC spoofing, broadcast flood gibi teknikler ciddi servis kesintilerine neden olabilir.
- Sadece kendi yönetiminizdeki ağlarda veya yazılı izin alınmış ortamlarda kullanın
- Lab ortamı oluşturun (GNS3 veya fiziksel izole switch yeterli)
- Test öncesi bir değişiklik yönetimi kaydı açın
- Ekip arkadaşlarınızı haberdar edin
Sonuç
mausezahn, Ethernet katmanında gerçek kontrol isteyenler için eşsiz bir araç. Standart ping ve traceroute’un ötesine geçmek, switch ve ağ ekipmanlarını düzgün test etmek, protokol uyumluluğunu doğrulamak istiyorsanız araç kutunuzda mutlaka bulunması gerekiyor.
Özellikle VLAN trunk testleri, port security doğrulaması ve özel protokol simülasyonu konularında alternatifi yok denecek kadar az. Scapy kadar esnek değil belki, ama öğrenme eğrisi çok daha düz ve scripting için mükemmel.
Başlangıç için öncelikli olarak lab ortamında VLAN testleriyle başlayın, ardından ARP paketleri oluşturma üzerine pratik yapın. Bir süre sonra hex payload oluşturma ve özel çerçeveler kendi halinize gelecek. Bu araçla zaman geçirmek ağ protokollerini anlamanızı da ciddi şekilde derinleştirecek, çünkü her paketi elle inşa etmek zorunda kaldığınızda protokollerin nasıl çalıştığını gerçekten kavramış oluyorsunuz.
