arping ile ARP Düzeyinde Ağ Erişilebilirlik ve MAC Adresi Tespiti

Ağ sorunlarını çözerken çoğu zaman ilk başvurduğumuz araç ping olur. Ama ping‘in ICMP tabanlı çalıştığını ve bazı durumlarda yanıltıcı sonuçlar verebileceğini bilen sistem yöneticisi sayısı düşündüğümüzden azdır. Güvenlik duvarları ICMP paketlerini düşürüyor olabilir, işletim sistemi ping’e yanıt vermiyor olabilir, ya da daha ilginci: cihaz fiziksel olarak ağda var ama IP katmanında görünmüyor olabilir. İşte tam bu noktada arping devreye giriyor.

arping, OSI modelinin ikinci katmanında, yani doğrudan Ethernet çerçeveleri üzerinden ARP (Address Resolution Protocol) istekleri göndererek hedef cihazın ağda bulunup bulunmadığını test eder. IP engellenmiş olsa bile, MAC adresi öğrenilmek istense bile, ya da bir IP adresi çakışması yaşandığı şüphelenilse bile arping güvenilir sonuçlar verir.

arping Nedir ve Neden Önemlidir?

Standart ping komutu, hedef IP adresine ICMP Echo Request paketi gönderir ve ICMP Echo Reply bekler. Bu süreçte IP yönlendirme, güvenlik duvarı kuralları ve işletim sistemi düzeyindeki ayarlar devreye girer. Bir cihaz ICMP’yi devre dışı bırakmışsa, ping hiçbir zaman yanıt alamaz ve cihazı “erişilemez” olarak işaretler. Oysa cihaz gayet güzel çalışıyor olabilir.

arping ise ARP protokolünü kullanır. ARP, aynı ağ segmentindeki bir IP adresine karşılık gelen MAC adresini bulmak için kullanılır. Bu protokol devre dışı bırakılamaz, çünkü devre dışı bırakırsanız cihaz o ağda hiçbir şeyle iletişim kuramaz. Yani arping ile gelen yanıt, cihazın gerçekten fiziksel olarak ağda aktif olduğunu kanıtlar.

Bununla birlikte, arping yalnızca aynı ağ segmentinde (aynı broadcast domain içinde) çalışır. Router’ların arkasına geçemez, çünkü ARP paketleri layer 2’de kalır ve yönlendirilmez. Bu bir kısıtlama gibi görünse de aslında yerel ağ sorunlarını teşhis etmek için mükemmel bir araç olmasını sağlar.

Kurulum

Çoğu Linux dağıtımında arping varsayılan olarak gelmez veya farklı paketlerde bulunur. İki farklı arping implementasyonu vardır: Thomas Habets’in yazdığı ve iputils paketindeki versiyon.

# Debian/Ubuntu sistemlerde
sudo apt-get install arping

# RHEL/CentOS/AlmaLinux sistemlerde
sudo dnf install iputils

# Arch Linux
sudo pacman -S arping

# Versiyonu kontrol et
arping --version

Kurulumdan sonra hangi versiyonu kullandığınızı anlamak önemli, çünkü parametre sözdizimi iki versiyon arasında farklılık gösterebilir. which arping ile yolunu, arping -h ile de yardım metnini inceleyebilirsiniz.

Temel Kullanım

En basit kullanım şekliyle arping, hedef IP adresine ARP isteği gönderir:

# Temel kullanım - ağ arayüzü belirtmek genellikle gereklidir
sudo arping -I eth0 192.168.1.1

# Ya da interface yerine kaynak IP ile
sudo arping -s 192.168.1.100 192.168.1.1

Çıktı şuna benzer bir şey olacaktır:

ARPING 192.168.1.1 from 192.168.1.100 eth0
Unicast reply from 192.168.1.1 [AA:BB:CC:DD:EE:FF]  1.243ms
Unicast reply from 192.168.1.1 [AA:BB:CC:DD:EE:FF]  0.891ms
Unicast reply from 192.168.1.1 [AA:BB:CC:DD:EE:FF]  0.934ms

Burada köşeli parantez içindeki AA:BB:CC:DD:EE:FF hedef cihazın MAC adresidir. Bu bilgi tek başına bile çok değerli olabilir.

Önemli Parametreler

arping‘in en çok kullanılan parametrelerini şöyle sıralayabiliriz:

-I interface: Hangi ağ arayüzünden gönderileceğini belirtir. Çok arayüzlü sistemlerde zorunludur.

-c count: Kaç tane ARP isteği gönderileceğini belirtir. Belirtilmezse Ctrl+C’ye kadar devam eder.

-t MAC: Unicast ARP isteği için hedef MAC adresini belirtir (Thomas Habets versiyonu).

-s source_ip: Kaynak IP adresini manuel olarak ayarlar. IP çakışması tespitinde kullanışlıdır.

-f: İlk yanıt alındığında çıkış yapar. Scripting için idealdir.

-w timeout: Zaman aşımı süresi (saniye cinsinden).

-q: Sessiz mod, yalnızca özet bilgi gösterir.

-D: Duplicate address detection modu. IP çakışması tespiti için kullanılır.

-b: Broadcast ARP isteği gönderir (sadece broadcast, unicast değil).

-U: Unsolicited ARP, gratuitous ARP göndermek için kullanılır.

Gerçek Dünya Senaryoları

Senaryo 1: IP Adresi Çakışması Tespiti

Üretim ortamında karşılaştığım en sinir bozucu sorunlardan biri IP çakışmasıydı. Bir uygulama sunucusu rastgele bağlantı kopuklukları yaşıyordu. ping testleri tamamen normaldi, ama bağlantılar belirli aralıklarla kesiliyor ve yeniden kuruluyordu. Sorun ne ping ile ne de traceroute ile görülebiliyordu.

# -D parametresi ile IP çakışması tespiti
sudo arping -D -I eth0 -c 3 192.168.1.50

# Eğer çakışma varsa, birden fazla farklı MAC adresi yanıt verir
# Aşağıdaki gibi bir çıktı alarm vermelidir:
# ARPING 192.168.1.50 from 0.0.0.0 eth0
# Unicast reply from 192.168.1.50 [AA:BB:CC:DD:EE:01]  0.9ms
# Unicast reply from 192.168.1.50 [AA:BB:CC:DD:EE:02]  1.1ms

-D modunda arping, kaynak IP olarak 0.0.0.0 kullanarak broadcast ARP isteği gönderir. Bu, cevap veren cihazın aynı IP’yi kendi MAC adresiyle eşleştirip eşleştirmediğini test eder. Eğer iki farklı MAC adresi aynı IP’ye yanıt veriyorsa, çakışma var demektir.

O olayda sonunda ağa yetkisiz bağlanan bir geliştirici dizüstü bilgisayarının aynı statik IP’yi kullandığı ortaya çıktı. Hem sunucu hem dizüstü aynı IP’ye sahipti ve switch ARP tablosunu sürekli güncelleyerek paketleri bir o yana bir bu yana yönlendiriyordu.

Senaryo 2: ICMP Engellenmiş Ortamlarda Erişilebilirlik Testi

Bazı güvenlik politikaları ICMP’yi tamamen engeller. Bu ortamlarda bir cihazın ağda olup olmadığını test etmek için arping vazgeçilmez olur:

# Sadece 1 paket gönder ve sonucu hızlıca al
sudo arping -I bond0 -c 1 -f 10.10.5.20

# Timeout ile birlikte kullan
sudo arping -I eth1 -c 1 -w 2 172.16.0.254

-f parametresi ilk başarılı yanıtta komutu sonlandırır. Bu, özellikle script içinde kullanıldığında gereksiz beklemeyi önler.

Senaryo 3: Script ile Subnet Tarama

Bir değişiklik öncesinde aynı subnet içindeki tüm aktif cihazları MAC adresleriyle listelemem gerektiğinde şu scripti kullandım:

#!/bin/bash
# Subnet üzerindeki aktif cihazları MAC adresleriyle tara
# Kullanim: ./arp_scan.sh eth0 192.168.1

INTERFACE=$1
SUBNET=$2

echo "Tarama basliyor: $SUBNET.0/24 uzerinde $INTERFACE arayuzu ile"
echo "IP Adresi | MAC Adresi | Yanit Suresi"
echo "--------------------------------------"

for i in $(seq 1 254); do
    IP="$SUBNET.$i"
    RESULT=$(sudo arping -I "$INTERFACE" -c 1 -f -w 1 "$IP" 2>/dev/null | grep "reply from")
    
    if [ -n "$RESULT" ]; then
        MAC=$(echo "$RESULT" | grep -oP '[.*?]' | tr -d '[]')
        TIME=$(echo "$RESULT" | grep -oP '[0-9]+.[0-9]+ms')
        echo "$IP | $MAC | $TIME"
    fi
done

echo "Tarama tamamlandi."

Bu script, özellikle güvenlik duvarı politikaları yüzünden nmap gibi araçların kullanılamadığı ortamlarda inanılmaz işe yarar.

Senaryo 4: MAC Adresi Tabanlı Cihaz Takibi

Bir cihazın ağda hangi IP adresini kullandığını bilmiyorsunuz ama MAC adresini biliyorsunuz. Bu çok spesifik bir durum gibi görünse de fiziksel envanter yönetimi yapan sysadminler için oldukça yaygın:

#!/bin/bash
# Verilen MAC adresine sahip cihazin IP adresini bul
TARGET_MAC="aa:bb:cc:dd:ee:ff"
INTERFACE="eth0"
SUBNET="192.168.1"

echo "Aranan MAC: $TARGET_MAC"

for i in $(seq 1 254); do
    IP="$SUBNET.$i"
    RESULT=$(sudo arping -I "$INTERFACE" -c 1 -f -w 1 "$IP" 2>/dev/null)
    
    if echo "$RESULT" | grep -qi "$TARGET_MAC"; then
        echo "Bulundu! IP: $IP"
        break
    fi
done

Senaryo 5: Gratuitous ARP Gönderme

Failover senaryolarında ya da IP adresini yeni devralan bir cihazın ağa kendini tanıtması gerektiğinde gratuitous ARP kullanılır. Virtual IP’lerin (VIP) yönetildiği yük dengeleme ortamlarında bu çok kritiktir:

# Gratuitous ARP gonder - diger cihazların ARP cache'ini temizle
sudo arping -U -I eth0 -c 3 192.168.1.100

# Keepalived veya VRRP failover sonrasi bunu elle tetiklemek gerekebilir
sudo arping -U -I eth0 -s 192.168.1.100 -c 5 192.168.1.100

Keepalived ile yönetilen bir cluster’da master node değiştiğinde, yeni master’ın ARP cache’leri güncellemesi için gratuitous ARP göndermesi gerekir. Bazı ortamlarda keepalived bunu otomatik yapar ama bazen elle tetiklemek zorunda kalabilirsiniz.

Senaryo 6: Ağ Geçidinin (Gateway) Erişilebilirliğini İzleme

Basit bir monitoring scripti:

#!/bin/bash
# Gateway erişilebilirliğini ARP üzerinden izle
GATEWAY="192.168.1.1"
INTERFACE="eth0"
LOG_FILE="/var/log/gateway_monitor.log"

while true; do
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    RESULT=$(sudo arping -I "$INTERFACE" -c 1 -f -w 2 "$GATEWAY" 2>/dev/null)
    
    if echo "$RESULT" | grep -q "reply from"; then
        MAC=$(echo "$RESULT" | grep -oP '[.*?]' | tr -d '[]')
        echo "$TIMESTAMP - OK - Gateway: $GATEWAY - MAC: $MAC" >> "$LOG_FILE"
    else
        echo "$TIMESTAMP - FAIL - Gateway $GATEWAY ARP yanıtı vermiyor!" >> "$LOG_FILE"
        # Buraya alert mekanizması eklenebilir
        logger -p user.crit "ALARM: Gateway $GATEWAY ARP yaniti vermiyor!"
    fi
    
    sleep 30
done

Bu script gateway’in fiziksel layer’da erişilebilir olup olmadığını test eder. Özellikle MAC adresi değişimlerini de logladığı için olası ARP spoofing saldırılarına karşı basit bir erken uyarı mekanizması işlevi görür.

ARP Cache Yönetimi ile Birlikte Kullanım

arping yalnızca tek başına değil, ip neigh ve arp komutlarıyla birlikte kullanıldığında çok daha güçlü bir araç setine dönüşür:

# Mevcut ARP cache'i görüntüle
ip neigh show

# Belirli bir ARP entry'yi sil
sudo ip neigh del 192.168.1.50 dev eth0

# Silinen entry'yi arping ile yeniden oluştur ve MAC'i öğren
sudo arping -I eth0 -c 1 192.168.1.50

# ARP cache'i tamamen temizle ve yenile
sudo ip neigh flush dev eth0

Özellikle stale (bayatlamış) ARP entry’leri nedeniyle yaşanan bağlantı sorunlarında bu kombinasyon çok işe yarar. Switch’te port değişikliği yapıldıysa, cihaz yeniden IP aldıysa ya da NIC değişikliği yapıldıysa, ARP cache’deki eski MAC bilgisi iletişim sorunlarına neden olabilir.

Güvenlik Boyutu: ARP Spoofing Tespiti

arping aynı zamanda basit bir ARP spoofing tespiti için de kullanılabilir. ARP spoofing saldırılarında bir saldırgan, başka bir cihazın IP’sine sahip olduğunu iddia eden sahte ARP paketleri gönderir.

# Belirli bir IP icin birden fazla MAC adresinden yanit geliyorsa alarm verir
sudo arping -I eth0 -c 10 192.168.1.1 2>&1 | grep "reply from"

# Çıktıda farklı MAC adresleri görünüyorsa şüpheli durum var demektir:
# Unicast reply from 192.168.1.1 [AA:BB:CC:DD:EE:01]  0.9ms  <- Gerçek router
# Unicast reply from 192.168.1.1 [FF:EE:DD:CC:BB:AA]  0.7ms  <- Şüpheli!

Eğer aynı IP’ye farklı MAC adreslerinden yanıt geliyorsa, ya bir IP çakışması var ya da daha ciddi bir senaryo olarak ARP spoofing saldırısı altındasınız demektir.

Dikkat Edilmesi Gereken Noktalar

Birkaç önemli konuyu vurgulamak gerekiyor:

  • Root yetkisi gerektirir: arping raw socket kullandığı için sudo ile çalıştırılması gerekir. Capabilities kullanılarak belirli kullanıcılara yetki verilebilir ama genel kullanımda sudo şart.
  • Sadece aynı subnet’te çalışır: ARP paketleri router’lardan geçmez. Farklı subnet’leri test etmek için kullanılamaz. Yanlış interface’den gönderilmiş arping hiçbir zaman yanıt alamaz.
  • Broadcast domain farkındalığı: VLAN’lı ortamlarda, hangi VLAN’da hangi interface üzerinden gönderdiğinize dikkat edin. Trunk port üzerinden gönderilen ARP istekleri beklenmedik davranışlar gösterebilir.
  • Rate limiting: Bazı network cihazları ARP isteklerini rate limit eder. Yoğun taramalar bu cihazların ARP tablolarını doldurup sorun yaratabilir.
  • Wireless ağlarda sınırlamalar: Bazı wireless erişim noktaları client isolation özelliği aktifken ARP paketlerini clientlar arası engeller. Bu durumda arping wireless cihazlara ulaşamayabilir.

arping ile ping Karşılaştırması

Hangi aracı ne zaman kullanacağınızı netleştirelim:

  • ping kullanın: Uzak ağlardaki (farklı subnet) cihazları test edecekseniz, genel bağlantı testi yapacaksanız, latency ölçecekseniz.
  • arping kullanın: Aynı subnet içindeki fiziksel bağlantıyı doğrulayacaksanız, MAC adresini öğrenmek istiyorsanız, IP çakışması şüpheniz varsa, ICMP engellenmiş ortamlarda çalışıyorsanız, ARP spoofing tespiti yapacaksanız.

İkisini birlikte kullanmak ise en kapsamlı testi sağlar: ping ile genel erişilebilirlik, arping ile fiziksel layer sağlığı.

Sonuç

arping, sysadmin araç kutusunda haksız yere göz ardı edilen güçlü bir araçtır. Özellikle karmaşık ağ sorunlarını teşhis ederken, üretim ortamında bir şeyler ters gittiğinde ve neden gittiğini anlamaya çalışırken bu araç gerçekten can kurtarır.

IP çakışmaları, ARP cache sorunları, güvenlik duvarının engellediği ICMP, failover sonrası bağlantı sorunları, yetkisiz cihaz tespiti… Bunların hepsinde arping size OSI modelinin en alt katmanından, tartışmasız bir yanıt verir.

Komutun başında sudo yazmak sizi ürkütmesin. Ağ katmanının bu kadar derininde çalışmak için yetkinin olması gerekiyor ve bu derinlik size karşılığını fazlasıyla veriyor. Bir sonraki ağ sorununda, ping çalışmıyorsa paniklemek yerine arping‘i açın. Cevap muhtemelen beklediğinizden çok daha yakında.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir