23.01.2015

PsPing

Bilişim teknolojileriyle uğraşanlar klasik ping komutunu gayet sık olarak kullanırlar. Hedef bilgisayarın çalışır durumda olduğunu doğrulamak için ICMP protokolünü kullanarak basit bir veri paketi gönderilir ve karşı tarafın da aynı paketi geri göndermesi beklenir. Eğer hedefteki bilgisayar (veya genel anlamda ağ bağlantısına sahip cihaz) açık ve ulaşılabilir bir durumdaysa ping aşağıdaki gibi bir çıktı üretir.


Burada benim bilgisayarım, www.google.com'dan sorumlu sunucuya 4 tane 32 byte'lık bir ICMP verisi gönderdi, karşı taraf da aldığı veriyi geri göndererek ulaşılabilir olduğunu gösterdi. En altta 4 paket gönderip alma işlemi ile ilgili istatistikler var.

Uzun süredir kullanılmakta olan ping komutu ile ilgili bir sorun var; o da ICMP protokolünün kendisiyle ilgili. Bazı sunucular ICMP protokolüne tamamen kapalıdır. Bu durumda hedefteki bilgisayar HTTP veya DNS hizmetlerini vermeye devam etse de ping isteklerine cevap vermez. Bunun sebebi de her konuda olduğu gibi ICMP'de de durumun ping of death veya ping flood gibi bir yöntemlerle suistimal edilmiş olmasındandır. Google bu gibi durumlarda ping ile gönderilen paketlerin belli bir boyutun üzerinde olması durumunda daha küçük paketlerle cevap veriyor. Örneğin -l 1000 anahtarını kullanarak 32 byte yerine 1000 byte'lık bir paket ile Google sunucularına gönderdiğimde bana 64 byte'lık paketlerle cevap dönülür.


Ama yine de ICMP'yi tamamen engelleyen sistemler de var. Örneğin amazon.com:


Bununla ilgili son zamanlarda alternatif yöntemler TCP veya UDP kullanarak hedef sistemin erişilebilirliğinin denenmesidir. Sysinternals Suite ile gelen PsPing aracı da bu çözümlerden biri. Uzun süredir Sysinternals paketlerini kullanıyor olsam da maalesef bu pakete dahil olan PsPing'in varlığını farketmem biraz zaman aldı. Farkeder farketmez de kullanmaya başladım.

Önce standart ping işlemi. ping www.google.com'a eşdeğer komut şu:

psping www.google.com



Bu komut, ICMP'yi kullanıyor. Aynısını TCP ile yapmak istersek tek yapmamız -bir TCP bağlantısından söz etmek için bir port bilgisi olması gerektiğinden- hedefin sonuna :XX ile port numarasını eklemek. Örneğin 80 numaralı HTTP denemesi için:

psping www.google.com:80

demek yeterli.


İkisinin arasındaki fark, 5 ping paketinden sonraki satırda. TCP kullanınca "TCP connect statistics..." yazıyor, görüldüğü gibi.

Daha önce amazon.com'u ICMP ile pingleyememiştik. Bir de TCP ping ile deneyelim.


TCP bağlantısı için herhangi portu seçmek teknik olarak mümkün, ama hedef sunucunun sadece belli başlı TCP portlarının dışında (80, 21, 25, 110, 53 gibi) bir güvenlik duvarı ile korunduğu gerçeğinden yola çıkarak rastgele port numaralarını seçmek iyi bir fikir değil. Örneğin 1234 numaralı port için google.com'dan alacağımız cevap şöyle olur:


Standart ping komutundan farklar ise şöyle:

Warmup: Yukarıdaki örneklerde hep giden/gelen 5 paket gözüküyor. Bunun ilk gönderileni warmup olarak geçiyor. Bu warmup paketleri istatistiklere dahil edilmiyor, hesaplamalara girmiyor. Warmup paketi sayısını değiştirmek için -w anahtarı kullanılabilir.

Histogram: İstenen sayıda ping paketi gönderildikten sonra aşağıda yazan istatistiksel verilerin yeterli gelmediği durumlarda histogram çıktısı istenebilir. Bu durumda gecikme bakımından kaç paket hangi aralıklarda yer almış bu görülebilir. Örneğin google.com'a 100 ping (-n 100) gönderelim. Ping paketleri arasında hiç süre bırakmayalım, çabuk bitsin (-i 0). IP4 kullanalım (-4), ve gecikmelerin 10 bölmeli bir histogramda raporlanmasını isteyelim (-h 10). Bu durumda komutumuz:

psping -4 -i 0 -h 10 www.google.com

olur. 100 adet ICMP ping'inden sonra da çıktı şöyle olur:


Çıkan sonuç; 100 ping paketinden en çabuk cevap alınanı 58,66 ms, en geç cevap alınanı 68,12 ms. Bunları Ping statistics altında Minimum ve Maximum bölümlerinde görebiliyoruz. Bu aralığı (58,66 - 68,12 arasını) 10 düzgün parçaya (bucket) bölüp, her parçaya kaç paket düştüğünü de son bölümde verdi. Yani

58,66 ms - 59,71 ms arasında geciken paket sayısı : 8
59,71 ms - 60, 76 ms arasında geciken paket sayısı : 9
60,76 ms - 61,81 ms arasında geciken paket sayısı : 8
61,81 ms - 62,86 ms arasında geciken paket sayısı : 20
62,86 ms - 63,91 ms arasında geciken paket sayısı : 19
63,91 ms - 64,97 ms arasında geciken paket sayısı : 15
64,97 ms - 66,02 ms arasında geciken paket sayısı : 20
66,02 ms - 67,07 ms arasında geciken paket sayısı : 0
67,07 ms - 68,12 ms arasında geciken paket sayısı : 0
68,12 ms gecikmeye sahip paket : 1

Son satır bir aralık değil. Bu sonuçtan anlayabiliriz ki istatistiksel ağırlık 61,81 ms ile 66,02 ms arasında.

Bu arada düzgün 10 aralık değil de başka birşey istiyorsak h anahtarının ardından çift tırnak içinde, virgülle ayrılmış değerlerle bu aralık sınırlarını belirtebiliriz.

Latency test: Gecikme durumunu ayrıntılı olarak inceleyebilmek için hattın iki ucunda birer makinenin psping'i çalıştırması beklenir. Uçlardan birisi sunucu olarak seçilir ve bu sunucu üzerinde dinleyen bir servis başlatılır. Anahtar sırası için psping -? l ile erişilen yardımdaki sıraya önem vermek gerek. Örneğin:

psping -4 -f -s 192.168.1.105:1200

-4: IP4 kullan
-f : firewall'da port aç (yönetici hakları gerekir)
-s : sunucu ol (portu dinle)
192.168.1.105:1200 : Sunucunun IP adresi. 1200 de TCP (-u kullanılmadığından, varsayılan bu) portu

İstemci olan cihazdan da bu sisteme bağlanılır:

psping -4 -l 1000 -n 10 192.168.1.105:1200

-4 : IP4 kullan
-l 1000 : Paket boyutu 1000 byte olsun
-n 10 : 10 paket gönder
192.168.1.105:1200 : Sunucunun IP adresi ve sunucunun dinlediği port numarası. -u anahtarı kullanılmadığından varsayılan TCP.
Ayrıca -h 10 gibi bir anahtar ile historgram çıkış istenebilir.

Bandwidth test: Latency testine benzer bir şekilde iki nokta arasında bant genişliği tesi yapar. Yine sunucu üzerinde bir dinleyen hizmet başlatalım.

psping -u -4 -f -s 192.168.1.105:8080

- u : Bu sefer UDP kullanalım
-4 : IP4 kullan
-f : Firewall'da port aç
-s : sunucu ol (portu dinle)
192.168.1.105:8080 : Aynı sunucu IP adresinde, bu sefer 8080 numaralı UDP portunu dinle

İstemci üzerinde de yapılacak latency test'e göre tek farklı şey -b anahtarını kullanmak:

psping -b -u -4 -l 1000 -n 10 192.168.1.105:8080

-b : bandwidth test
-u : UDP
-4 : IP4
-l 1000 : Paket boyutu 1000 byte
-n 10 : 10 paket üzerinden hesapla
192.168.1.105:8080 : sunucu IP adresi ve portu

Yine -h anahtarı ile histogram çıktısı faydalı olabilir.

Hatırlatmakta fayda var, sunucu tarafında -s anahtarından sonra sunucunun IP adresi ve portu olmalı, sıra önemli.

Hiç yorum yok: