Ağ sorunlarını teşhis etmek, sistem yöneticiliğinin en temel becerilerinden biridir. Bir sunucuya erişemiyorsunuz, bir servis yanıt vermiyorr, ya da belirli bir ağ segmentinde garip gecikmeler var… İşte bu noktada ping ve fping gibi araçlar imdadınıza yetişiyor. Basit görünen bu iki komut, doğru kullanıldığında inanılmaz derecede güçlü tanı araçlarına dönüşebiliyor. Bu yazıda her iki aracı da derinlemesine inceleyeceğiz.
ping Nedir ve Nasıl Çalışır?
ping, ICMP (Internet Control Message Protocol) Echo Request paketleri göndererek hedef sistemin erişilebilir olup olmadığını test eder. Hedef sistem, bu paketlere ICMP Echo Reply ile yanıt verir. Böylece hem erişilebilirliği hem de gecikme süresini (RTT – Round Trip Time) ölçebilirsiniz.
Her sistem yöneticisinin bilmesi gereken birkaç önemli nokta var: ping her zaman güvenilir bir erişilebilirlik testi değildir. Güvenlik duvarları ICMP paketlerini bloke edebilir, bu da “erişilemiyor” sonucu alırken aslında sistemin çalışıyor olabileceği anlamına gelir. Bu yüzden ping sonuçlarını her zaman bağlam içinde değerlendirmeniz gerekir.
Temel ping Kullanımı
En basit haliyle ping şöyle kullanılır:
ping google.com
ping 192.168.1.1
ping -c 4 8.8.8.8
Linux’ta ping sonsuz çalışır ve Ctrl+C ile durdurursunuz. Windows’ta ise varsayılan olarak 4 paket gönderip durur. Bu küçük fark, Linux’a alışkın biri olarak Windows’ta unutursanız sizi şaşırtabilir.
-c parametresiyle kaç paket göndereceğinizi belirtebilirsiniz:
# 10 paket gönder ve dur
ping -c 10 192.168.1.1
# Çıktı:
# PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
# 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.432 ms
# 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.398 ms
# ...
# --- 192.168.1.1 ping statistics ---
# 10 packets transmitted, 10 received, 0% packet loss, time 9085ms
# rtt min/avg/max/mdev = 0.389/0.421/0.467/0.025 ms
ping Parametreleri
Sık kullandığım parametreler şunlar:
- -c [sayı]: Gönderilecek paket sayısını belirler. Betiklerde kullanırken mutlaka ekleyin
- -i [saniye]: Paketler arasındaki bekleme süresini ayarlar. Varsayılan 1 saniyedir
- -s [boyut]: Paket boyutunu byte cinsinden belirtir. Büyük paketlerle MTU sorunlarını test edebilirsiniz
- -W [saniye]: Her yanıt için maksimum bekleme süresi
- -w [saniye]: Toplam zaman aşımı süresi
- -q: Sadece özet bilgiyi gösterir, her paketi değil
- -t [TTL]: TTL değerini manuel olarak ayarlar
- -f: Flood ping, mümkün olan en hızlı şekilde paket gönderir (root gerektirir)
- -I [arayüz]: Hangi ağ arayüzünden gönderileceğini belirtir
- -4: IPv4 kullanmaya zorlar
- -6: IPv6 kullanmaya zorlar
Gerçek Dünya Senaryoları: ping ile Problem Çözme
MTU Sorunlarını Tespit Etme
VPN bağlantıları veya tünel konfigürasyonlarında sıkça karşılaştığım bir problem olan MTU uyuşmazlıklarını ping ile tespit edebilirsiniz. Büyük paketler iletilemiyor ama küçük paketler sorunsuz geçiyorsa MTU sorununuz var demektir:
# Farklı boyutlarda paketler göndererek MTU sınırını bul
# -M do: Fragmentasyonu engelle
ping -c 3 -s 1472 -M do 192.168.1.1
ping -c 3 -s 1400 -M do 192.168.1.1
ping -c 3 -s 1200 -M do 192.168.1.1
# Eğer büyük boyut hata verip küçük boyut geçiyorsa MTU problemi var
Paket Kaybını İzleme
Aralıklı bağlantı sorunlarını izlemek için uzun süreli ping oturumları çok işe yarar:
# 1000 paket gönder, sadece özet göster
ping -c 1000 -q 192.168.1.1
# Daha sık paket göndererek paket kaybını daha hassas ölç
ping -c 100 -i 0.2 192.168.1.1
Betiklerde ping Kullanımı
ping çıkış kodları betiklerinizde çok kullanışlıdır. Başarılı olursa 0, başarısız olursa 1 döner:
#!/bin/bash
# Basit host erişilebilirlik kontrolü
HOST="192.168.1.100"
if ping -c 1 -W 2 "$HOST" &>/dev/null; then
echo "$HOST erişilebilir durumda"
else
echo "UYARI: $HOST erişilemiyor!"
# Buraya alerting kodu ekleyebilirsiniz
fi
Birden Fazla Hostu Test Etme
Tek tek ping atmak yerine basit bir döngüyle birden fazla hostu kontrol edebilirsiniz:
#!/bin/bash
# Kontrol edilecek hostlar
HOSTS=("192.168.1.1" "192.168.1.2" "8.8.8.8" "1.1.1.1" "google.com")
echo "Ağ Erişilebilirlik Raporu - $(date)"
echo "================================"
for host in "${HOSTS[@]}"; do
if ping -c 2 -W 1 "$host" &>/dev/null; then
# RTT değerini de alalım
RTT=$(ping -c 2 -W 1 "$host" | tail -1 | awk -F'/' '{print $5}')
echo "OK $host (Ort. RTT: ${RTT} ms)"
else
echo "FAIL $host - Erişilemiyor!"
fi
done
fping: Toplu Host Testi İçin Güçlü Araç
ping tek bir host için mükemmel, ama yüzlerce IP adresini test etmeniz gerektiğinde yetersiz kalır. İşte burada fping devreye giriyor. fping, birden fazla hostu paralel olarak test eden, çok daha esnek bir araçtır.
fping Kurulumu
Çoğu Linux dağıtımında varsayılan olarak gelmez, kurmanız gerekir:
# Debian/Ubuntu
sudo apt install fping
# RHEL/CentOS/Fedora
sudo dnf install fping
# Arch Linux
sudo pacman -S fping
fping Parametreleri
- -a: Sadece erişilebilir olan hostları göster
- -u: Sadece erişilemeyen hostları göster
- -c [sayı]: Her host için kaç paket gönderileceği
- -s: Özet istatistikler göster
- -q: Sessiz mod, sadece özet gösterir
- -e: Yanıt sürelerini göster
- -g: IP aralığı veya CIDR notasyonu ile çalış
- -f [dosya]: Hostları dosyadan oku
- -l: Sürekli ping modu
- -i [ms]: Paketler arası bekleme süresi (milisaniye)
- -t [ms]: Bireysel zaman aşımı süresi (milisaniye)
- -r [sayı]: Yanıt gelmeyince kaç kez tekrar deneneceği
- -b [boyut]: Paket boyutu
- -p [ms]: Aynı hosta tekrar ping atmadan önceki bekleme süresi
- -A: Sonuçlarda IP adresi yerine hostname göster
fping ile Temel Kullanım
# Birden fazla hostu aynı anda test et
fping google.com cloudflare.com 8.8.8.8 1.1.1.1
# Çıktı:
# google.com is alive
# cloudflare.com is alive
# 8.8.8.8 is alive
# 1.1.1.1 is alive
fping ile Subnet Tarama
Bu, fpingin en güçlü özelliklerinden biridir. Tüm bir subnet’i saniyeler içinde tarayabilirsiniz:
# /24 subnet tarama - CIDR notasyonu
fping -a -g 192.168.1.0/24 2>/dev/null
# IP aralığı ile tarama
fping -a -g 192.168.1.1 192.168.1.254 2>/dev/null
# Yanıt süresiyle birlikte göster
fping -a -e -g 192.168.1.0/24 2>/dev/null
# Çıktı örneği:
# 192.168.1.1 : [0], 84 bytes, 0.45 ms (0.45 avg, 0% loss)
# 192.168.1.10 : [0], 84 bytes, 1.23 ms (1.23 avg, 0% loss)
# 192.168.1.25 : [0], 84 bytes, 0.89 ms (0.89 avg, 0% loss)
Bu komut, özellikle bir ağa yeni katılan cihazları tespit etmek veya hangi IP adreslerinin kullanımda olduğunu hızlıca görmek için son derece kullanışlıdır. Yeni bir ofis ağını devraldığınızda ya da DHCP havuzunuzun ne kadar dolduğunu görmek istediğinizde ilk başvuracağınız yöntem budur.
fping ile Dosyadan Host Okuma
Büyük bir altyapıyı yönetiyorsanız, izlemek istediğiniz hostları bir dosyaya kaydetmek ve fpinge bu dosyayı okutmak çok pratiktir:
# hosts.txt dosyasını oluştur
cat > /tmp/hosts.txt << EOF
192.168.1.1
192.168.1.10
web-server-01
db-server-01
backup-server
8.8.8.8
EOF
# Dosyadan hostları oku ve test et
fping -a -f /tmp/hosts.txt 2>/dev/null
# İstatistiklerle birlikte
fping -c 5 -s -f /tmp/hosts.txt 2>&1
Gerçek Dünya Senaryoları: fping ile Problem Çözme
Ağ Segmenti Keşfi
Yeni bir veri merkezine veya ağ segmentine erişim aldığınızda, hangi cihazların aktif olduğunu hızlıca öğrenmek istersiniz:
#!/bin/bash
# Ağ keşif betiği
SUBNET="${1:-192.168.1.0/24}"
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
OUTPUT_FILE="/tmp/network_scan_${TIMESTAMP}.txt"
echo "Ağ taraması başlatılıyor: $SUBNET"
echo "Sonuçlar: $OUTPUT_FILE"
fping -a -e -g "$SUBNET" 2>/dev/null |
awk '{print $1, $NF}' |
sort -t . -k 4 -n > "$OUTPUT_FILE"
TOTAL=$(wc -l < "$OUTPUT_FILE")
echo "Toplam $TOTAL aktif cihaz bulundu"
cat "$OUTPUT_FILE"
Sürekli İzleme ve Uyarı Sistemi
Kritik sunucuları sürekli izleyen basit bir betik:
#!/bin/bash
# Kritik sunucu listesi
CRITICAL_HOSTS=(
"192.168.1.1:Gateway"
"192.168.1.10:Web-Server"
"192.168.1.20:DB-Server"
"192.168.1.30:Backup"
)
LOG_FILE="/var/log/network_monitor.log"
CHECK_INTERVAL=60 # saniye
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log_message "İzleme başlatıldı"
while true; do
for entry in "${CRITICAL_HOSTS[@]}"; do
HOST=$(echo "$entry" | cut -d: -f1)
NAME=$(echo "$entry" | cut -d: -f2)
RESULT=$(fping -c 3 -q "$HOST" 2>&1)
LOSS=$(echo "$RESULT" | grep -oP 'd+(?=% loss)')
if [ -z "$LOSS" ] || [ "$LOSS" -eq 100 ]; then
log_message "KRITIK HATA: $NAME ($HOST) erişilemiyor!"
# Buraya mail veya Slack bildirimi ekleyebilirsiniz
elif [ "$LOSS" -gt 10 ]; then
log_message "UYARI: $NAME ($HOST) %$LOSS paket kaybı yaşıyor"
else
log_message "OK: $NAME ($HOST) erişilebilir"
fi
done
sleep "$CHECK_INTERVAL"
done
Bant Genişliği ve Gecikme Testi
Ağ performansını değerlendirmek için farklı boyutlarda paketler gönderebilirsiniz:
# Farklı paket boyutlarıyla gecikme testi
for size in 64 128 256 512 1024; do
echo -n "Paket boyutu $size bytes: "
fping -c 10 -b "$size" -q 8.8.8.8 2>&1 |
grep -oP 'avg = K[d.]+'
done
ping ve fping Karşılaştırması
Her iki araç da aynı temel işi yapar ama farklı durumlarda birini tercih etmek daha mantıklıdır.
ping şu durumlarda daha iyi seçimdir:
- Tek bir hostu test ederken
- Ayrıntılı TTL ve paket bilgisine ihtiyaç duyduğunuzda
- MTU sorunlarını araştırırken
- Basit betiklerde kullanırken
- Sistem üzerinde yüklü olmayan araç gerektirmeyen durumlarda
fping şu durumlarda daha iyi seçimdir:
- Onlarca veya yüzlerce hostu aynı anda test ederken
- Subnet taraması yapmanız gerektiğinde
- Dosyadan host listesi okurken
- İstatistiksel analiz yapmanız gerektiğinde
- Monitoring betiklerinde
IPv6 ile Çalışmak
Modern ağlarda IPv6 artık görmezden gelinemez. Her iki araç da IPv6’yı destekler:
# IPv6 ile ping
ping6 ::1
ping -6 2001:4860:4860::8888
# IPv6 ile fping (fping6 komutu veya -6 parametresi)
fping6 2001:4860:4860::8888
fping -6 google.com
Güvenlik Duvarı Arkasındaki Sistemleri Test Etme
pingin ICMP’yi bloke eden güvenlik duvarlarında çalışmadığını söylemiştim. Bu durumda alternatif yaklaşımlar kullanmak gerekir. ping yetersiz kaldığında curl, nc (netcat) veya nmap gibi araçlara geçmek gerekebilir. Ama yine de ping sonuçlarını doğru yorumlayabilmek önemli:
# Hem ICMP hem de TCP testi
HOST="192.168.1.100"
echo "ICMP testi:"
ping -c 2 -W 1 "$HOST" &>/dev/null && echo "ICMP: OK" || echo "ICMP: FAIL"
echo "TCP port 80 testi:"
(echo >/dev/tcp/"$HOST"/80) &>/dev/null && echo "TCP/80: OK" || echo "TCP/80: FAIL"
echo "TCP port 443 testi:"
(echo >/dev/tcp/"$HOST"/443) &>/dev/null && echo "TCP/443: OK" || echo "TCP/443: FAIL"
Performans İpuçları ve Dikkat Edilmesi Gerekenler
fping ile büyük subnet taraması yaparken ağ üzerinde gereksiz yük oluşturmamak için bazı ayarları kontrol edin. Özellikle üretim ortamlarında flood ping veya çok agresif taramalar yapmaktan kaçının.
# Ağa fazla yük binmemesi için aralıklı tarama
# -i: Paketler arası 50ms bekleme
# -t: 500ms zaman aşımı
# -r 1: Sadece 1 kez yeniden dene
fping -a -i 50 -t 500 -r 1 -g 10.0.0.0/16 2>/dev/null
Root olmayan kullanıcılar bazı ping parametrelerini kullanamayabilir. Flood ping (-f) için root yetkisi gereklidir. fpingin de bazı gelişmiş özelliklerini root olarak çalıştırmanız gerekebilir.
Bir başka önemli nokta: Yüksek hızlı ağlarda bile RTT değerleri bazen yanıltıcı olabilir. Ağ saatlerinde veya yoğunluğa bağlı gecikmeler test sonuçlarını etkileyebilir. Bu yüzden kritik kararlar vermeden önce birden fazla test yapın ve sonuçları istatistiksel olarak değerlendirin.
Sonuç
ping ve fping, sistem yöneticisinin araç kutusunda olmazsa olmaz komutlardır. Basit görünümlerinin arkasında ciddi bir güç yatıyor. ping, tek bir hostu derinlemesine test etmek, MTU sorunlarını bulmak ve hızlı erişilebilirlik kontrolü yapmak için birebir. fping ise geniş ağ segmentlerini taramak, toplu host kontrolü yapmak ve izleme betikleri geliştirmek için çok daha verimli bir seçenek.
Bu iki aracı iyi öğrenmek, ağ sorunlarını teşhis etme sürenizi dramatik biçimde kısaltır. Yeni bir ağa girdiğinizde önce fping ile subnet’i tarayın, aktif cihazları belirleyin, sonra şüpheli cihazlara ping ile daha detaylı bakın. Bu basit iş akışı, benim yıllardır kullandığım ve işe yarayan bir yaklaşım.
Son olarak şunu hatırlatayım: Bu araçları üretim ağlarında kullanırken dikkatli olun. Agresif taramalar hem ağ yükü oluşturabilir hem de IDS/IPS sistemleri tarafından saldırı girişimi olarak algılanabilir. Kendi ağınızda test yapıyor olsanız bile ekibinizi bilgilendirmek her zaman iyi bir pratiktir.