nping ile Gelişmiş Paket Üretimi ve Ağ Stres Testi
Ağ testlerinde çoğu zaman ping yeterli gelir, tcpdump işi görür, netstat’a bakarsın olur biter. Ama bazen gerçekten ne olduğunu anlamak için daha derine inmek gerekir. İşte tam o noktada nping devreye giriyor. Nmap projesinin bir parçası olarak geliştirilen bu araç, ham paket üretimi konusunda size inanılmaz bir özgürlük sunuyor. Ben de bu yazıda nping’i gerçekten işe yarar şekilde nasıl kullanabileceğinizi, üretim ortamlarında karşılaştığım senaryolardan örneklerle anlatmaya çalışacağım.
nping Nedir ve Neden Kullanmalısınız?
Klasik ping aracının yapamadığı şeyleri düşünün: TCP, UDP, ICMP veya ARP paketleri üretmek, özel TTL değerleri belirlemek, paket gönderme hızını kontrol etmek, payload içeriğini kendiniz yazmak. Nping bunların hepsini yapabiliyor, üstelik bunları tek bir araçtan yapabiliyor olmanız troubleshooting süreçlerini ciddi ölçüde hızlandırıyor.
Nping, Nmap paketi içinde geliyor. Yani büyük ihtimalle sisteminizde zaten kurulu:
which nping
nping --version
Eğer kurulu değilse:
# Debian/Ubuntu
sudo apt install nmap
# RHEL/CentOS/AlmaLinux
sudo dnf install nmap
# Arch
sudo pacman -S nmap
Root yetkisi gerektiren işlemler için sudo kullanmanız gerekecek. Ham paket üretimi kernel seviyesinde socket açmayı gerektirdiği için bu kaçınılmaz.
Temel Kullanım: TCP Modunda İlk Adımlar
nping’in en temel kullanımı bir hedefe TCP paketi göndermektir. Varsayılan modda TCP SYN paketi gönderir:
sudo nping --tcp -p 80,443,8080 192.168.1.100
Bu komutun çıktısı klasik ping’den çok daha zengin. Her paket için gönderilen ve alınan bayt sayısını, RTT değerini ve TCP flag bilgilerini görürsünüz. Özellikle bir web sunucusunun 80 ile 443’ü aynı anda test etmek istediğinizde bu yaklaşım çok işe yarıyor.
Belirli TCP flag kombinasyonları gönderebilirsiniz. Örneğin SYN-ACK kombinasyonu:
sudo nping --tcp --flags SYN,ACK -p 443 10.0.0.50
Ya da sadece ACK paketi göndererek firewall’ın durum tablosunu test etmek:
sudo nping --tcp --flags ACK -p 22 10.0.0.50 --count 5
Bu ikinci test özellikle ilginç. Stateful bir firewall SYN görmeden gelen ACK paketini düşürmeli. Eğer bu pakete yanıt alıyorsanız, ortada ciddi bir firewall konfigürasyon sorunu var demektir.
UDP Modu ile DNS ve Diğer Servis Testleri
UDP testleri, özellikle DNS, NTP veya SNMP gibi servisleri test ederken vazgeçilmez oluyor. Klasik ping bu servislere ulaşıp ulaşmadığınızı söyleyemiyor:
sudo nping --udp -p 53 8.8.8.8 --count 3
Benim en sık kullandığım senaryo şu oluyor: Yeni kurduğumuz DNS sunucusunun 53 portuna UDP trafiğinin gerçekten geçip geçmediğini test etmek. Bazen firewall kuralı yazılmış görünüyor ama UDP 53 açılmamış oluyor. nping bu farkı hemen ortaya koyuyor.
NTP sunucusunu test etmek için:
sudo nping --udp -p 123 pool.ntr.time.apple.com --count 5 --delay 1s
--delay parametresi paketler arası bekleme süresini ayarlıyor. NTP sunucularına hızlı ateş ederseniz rate limiting’e takılabilirsiniz, bu yüzden 1 saniyelik bekleme mantıklı.
ICMP Modu: Ping’in Çok Ötesi
ICMP modunda sadece echo request değil, her türlü ICMP mesajını üretebilirsiniz:
sudo nping --icmp --icmp-type echo 192.168.1.1
ICMP timestamp request göndererek uzak sistemin saatini sorgulayabilirsiniz:
sudo nping --icmp --icmp-type timestamp 192.168.1.1
ICMP mask request ile subnet mask bilgisi istemek (eski ama hala işe yarayan bir test):
sudo nping --icmp --icmp-type mask-request 192.168.1.1
Benim gerçekten faydalı bulduğum bir senaryo: TTL değerini düşürerek belirli bir hop noktasına kadar gitmeyi test etmek. Traceroute benzeri bir davranış ama çok daha kontrollü:
sudo nping --icmp --ttl 5 --count 3 203.0.113.1
TTL 5 ile gönderdiğiniz pakete “Time Exceeded” yanıtı dönüyorsa, o 5. hop’tan yanıt alıyorsunuzdur. Bu tekniği kullanarak ağ yolundaki spesifik routerların erişilebilirliğini test edebilirsiniz.
Paket Üretimi ile Stres Testi: Dikkatli Olun
Şimdi işin hassas kısmına geldik. nping ile gerçek anlamda stres testi yapabilirsiniz, ama bunu üretim ortamında düşüncesizce yapmak servis kesintilerine yol açabilir. Bu testleri her zaman bakım penceresi içinde veya test ortamında yapın.
Temel bir stres testi için --rate parametresi kullanılır. Bu değer saniye başına gönderilecek paket sayısını belirler:
sudo nping --tcp -p 80 --rate 1000 --count 10000 192.168.100.50
Bu komut 1000 paket/saniye hızında toplamda 10000 TCP SYN paketi gönderir. Bir web sunucusunun SYN paketlerini ne kadar hızlı işleyebildiğini görmek için güzel bir test.
Daha agresif bir test için birden fazla port hedef alabilirsiniz:
sudo nping --tcp -p 1-1024 --rate 500 --count 50000 192.168.100.50
Bu testi çalıştırmadan önce hedef sistemin monitöründe CPU kullanımını, network interface istatistiklerini ve servis loglarını açık tutun. Neyin ne zaman kırıldığını görmek troubleshooting için değerli veri.
Gerçek dünya senaryosu olarak bunu anlatalım: Bir e-ticaret müşterimizin load balancer’ı belirli trafik seviyelerinde garip davranışlar sergiliyordu. Üretici firma “bu kadar trafik destekleniyor” diyordu ama gerçek yük testlerinde sorun çıkıyordu. nping ile kontrollü trafik üretip hem load balancer’ın hem de backend sunucuların tepkilerini incelediğimizde, load balancer’ın connection table’ının belirli bir noktada overflow verdiğini tespit ettik.
Özel Payload ile Uygulama Seviyesi Testler
nping’in bir diğer güçlü özelliği, paket içine özel veri koyabilmek. UDP paketlerine belirli bir payload ekleyerek uygulamanın nasıl tepki verdiğini görebilirsiniz:
sudo nping --udp -p 53 --data-string "test_payload_12345" 8.8.8.8
Hex formatında veri göndermek için:
sudo nping --udp -p 5060 --data "48454c4c4f" 10.10.1.200
Bu özellik özellikle VoIP troubleshooting’de işe yarıyor. SIP sunucusuna 5060 portuna UDP paketi gönderip yanıt alıp almadığını test etmek, sorunun network mi uygulama mı kaynaklı olduğunu anlamayı kolaylaştırıyor.
ASCII string yerine belirli boyutta rastgele veri göndermek için --data-length kullanırsınız:
sudo nping --tcp -p 443 --data-length 512 --count 100 192.168.1.200
512 baytlık payload ile 100 paket. MTU ile ilgili sorunları araştırmak için bu teknik çok değerli. Özellikle VPN tünelleri üzerinde MTU ayarlarını test ederken bunu sıkça kullanıyorum.
Kaynak IP ve Port Manipülasyonu
nping ile kaynak IP adresini ve portunu ayarlayabilirsiniz. Bu özellik ağ güvenlik testlerinde ve firewall kurallarını doğrulamada kritik:
sudo nping --tcp -p 80 --source-ip 10.10.50.100 --source-port 12345 192.168.1.100
Dikkat: Kaynak IP’yi değiştirdiğinizde yanıtları alamazsınız çünkü yanıtlar gerçek IP’niz yerine o IP’ye gönderilecek. Ama paketin firewall üzerinden geçip geçmediğini hedef sunucunun loglarından takip edebilirsiniz.
Bu tekniği şöyle kullandım: Bir müşterinin WAF’ı belirli IP aralıklarından gelen trafiği beyaz listeye almıştı. Kuralın doğru çalışıp çalışmadığını test etmek için önce gerçek kaynak IP’mizi, sonra sahte bir IP ile teste ettik. Hedef sunucunun erişim logları her iki durumda da beklenen davranışı gösteriyordu, kural doğru çalışıyordu.
Çıktı Analizi ve Verbose Modu
nping’in çıktısını anlamak, ondan maksimum fayda sağlamak için şart. Verbose modu aktif etmek için:
sudo nping --tcp -p 80,443 --count 10 -v 192.168.1.100
Daha fazla detay için:
sudo nping --tcp -p 80 --count 5 -vv 192.168.1.100
-vv ile her paketin tam içeriğini, flag değerlerini, sequence numaralarını ve acknowledgment numaralarını görebilirsiniz. TCP connection state machine’i anlamaya çalışırken bu çok değerli.
Çıktıyı bir dosyaya kaydetmek için:
sudo nping --tcp -p 80 --count 100 --rate 10 192.168.1.100 2>&1 | tee /tmp/nping_test_$(date +%Y%m%d_%H%M%S).log
Timestamp’li log dosyası oluşturmak bu kadar basit. Müşteriye veya ekibe sunacağınız test raporları için bu çıktıları saklamak her zaman iyi bir alışkanlık.
Çoklu Hedef ve Aralık Tarama
nping birden fazla hedefi aynı anda test edebiliyor:
sudo nping --tcp -p 22 --count 3 192.168.1.100 192.168.1.101 192.168.1.102
Veya CIDR notasyonu ile tüm bir subnet:
sudo nping --tcp -p 22 --count 2 192.168.1.0/24
Bu komutu çalıştırmadan önce iki kez düşünün. 254 hosta 2’şer paket göndermek bile ciddi bir trafik üretir. Bant genişliği kısıtlı ortamlarda veya hassas cihazlar içeren ağlarda dikkatli olun.
Daha kontrollü bir yaklaşım için delay ekleyin:
sudo nping --tcp -p 443 --count 1 --delay 500ms 192.168.1.1-20
Her host arasında 500 milisaniye bekleyerek 1-20 arası IP’leri test eder. Network inventory çıkarırken hangi hostların 443 dinlediğini görmek için kullanışlı.
Gerçek Senaryo: Load Balancer Sağlık Kontrolü
Birkaç yıl önce büyük bir migrasyonda şu sorunu yaşadık: Yeni load balancer kurulduktan sonra backend sunuculardan bazıları düzgün yanıt verirken bazıları session’ları düşürüyordu. tcpdump ile paketleri yakalamak çok veri üretiyordu, manuel analiz saatler alıyordu.
nping ile her backend sunucuya aynı anda kontrollü test yaparak hangisinin sorunlu davrandığını hızlıca tespit ettik:
sudo nping --tcp -p 8080 --flags SYN --count 50 --rate 10
10.0.1.11 10.0.1.12 10.0.1.13 10.0.1.14 2>&1 |
grep -E "(RCVD|SENT|Lost)" | tee lb_backend_test.log
Çıktıda 10.0.1.13’ün paket kayıp oranının diğerlerinden ciddi ölçüde yüksek olduğunu gördük. O sunucunun network interface driver’ında bir sorun vardı, kaynak beklenmedik bir yerden çıkmıştı.
Güvenlik Notu: Bu Araçla Ne Yapmamalısınız
nping güçlü bir araç ve bu güç sorumluluk gerektirir. Kendi ağınız veya yazılı izin aldığınız sistemler dışında kullanmak hukuki sorunlara yol açabilir. Türkiye’de Bilişim Kanunu kapsamında yetki dışı sistem erişimi ve sisteme zarar verme suç sayılmaktadır.
Pratikte şunlara dikkat edin:
- Rate limiting:
--ratedeğerini makul tutun. 10000+ paket/saniye gerçek servis kesintilerine neden olabilir. - Broadcast adresleri: Broadcast’e yüksek hızda paket göndermek Smurf saldırısı etkisi yaratabilir.
- Üçüncü taraf sistemler: AWS, Azure gibi cloud ortamlarında yoğun paket üretimi abuse detection sistemlerini tetikleyebilir, hesabınız askıya alınabilir.
- Log tutun: Test öncesi ve sonrası sistem durumunu kaydedin, özellikle üretim ortamına yakın testlerde.
ARP Modu ile Layer 2 Testleri
nping’in çok az kullanılan ama son derece işlevsel bir özelliği de ARP paket üretimi. Layer 2 sorunlarını debuglamak için mükemmel:
sudo nping --arp --arp-type ARP 192.168.1.1
Bu komut belirtilen IP için ARP request gönderir. Yanıt geliyorsa ve MAC adresi beklediğiniz cihaza aitse, Layer 2 connectivity sağlam demektir. VLAN tagging sorunlarını araştırırken bu testin değeri inanılmaz artıyor.
ARP reply üretmek de mümkün:
sudo nping --arp --arp-type ARP-reply --arp-sender-mac 00:11:22:33:44:55
--arp-target-ip 192.168.1.100 192.168.1.1
Bu tür testleri yaparken ağ monitörünüzü açık tutun, ARP cache poisoning etkisi yaratabileceğinizi unutmayın.
Sonuç
nping, sysadmin araç kutusunda hak ettiği yeri almakta biraz gecikmiş bir araç. Çoğu kişi nmap bilir ama nping’e pek az rastlanıyor, oysa ikisi birbirini tamamlıyor. nmap “ne açık?” sorusunu yanıtlarken, nping “bu bağlantı nasıl davranıyor?” sorusuna cevap veriyor.
Günlük kullanımda en çok değer bulduğum senaryolar şunlar: firewall kural değişikliklerini doğrulamak, yeni servis deployment’larından sonra connectivity testleri yapmak ve performans sorunlarının network kaynaklı mı uygulama kaynaklı mı olduğunu hızlıca anlamak. Bu üç senaryo için nping’i araç setinize katmanızı şiddetle tavsiye ederim.
Bir hatırlatma daha: nping çıktısını her zaman belgeleyin. Özellikle müşterilere veya yöneticilere “bu sorun networkten kaynaklanmıyor” demek zorunda kaldığınızda, elinizde somut test sonuçları olmak sizi çok güçlü bir konuma taşıyor. Sözlü açıklama ile log dosyası arasındaki fark bazen projenin kaderini belirleyebiliyor.
