Perl ile Ping atmak

Yazan: Faruk Enes | Tarih 31 Temmuz 2001 | Yorum  1 Yorum
BerbatKötüOrtaGüzelHarika 1 kez puan verildi, Ortalama: 5 (5 üzerinden)
Loading ... Loading ...

'de ping atmak için kullanılabilecek modüllerden biri Net::Ping modülüdür. Bu modül birçok özelliklere sahiptir ve sırf ping yapmak için üretilmiştir.

Bir hostun ayakta olup olmadığını anlamak için birkaç yol vardır. Bu yollar tcp, udp ve icmp portlarını echolamaktır.

Tcp portunu echolamak için belli bir veri göndermeniz gerekmez. Ancak icmp ve udp portlarında bir takım büyüklükte veriler göndermeniz ve dönen veriyi, gönderilen veri ile karşılaştırmanız gerekir.

Şimdi biz modülümüze gelelim. Öncelikle Net::ping modülünü scriptimize eklememiz gerekiyor.

:
  1. use Net::Ping;

Bu modül, 'ün Object Oriented (Nesne Yönelimli) modüllerinden biridir. Bu sebeple bir ping nesnesi yaratmamız gerekiyor.

:
  1. my $parmak = Net::Ping->new('udp',30,32);

Burada bir ping nesnesi yaratıyoruz. Bundan sonra modül içindeki alt fonksiyonları $parmak değişkenini kullanarak yapabileceğiz.

Bağlantı açılırken new() komutunun alabileceği 3 paremetre var. İlki, udp, tcp ya da icmp paremetrelerini alabiliyor. Yani nereden ping yapmak istediğinizi belirtiyorsunuz. Eğer bir değer vermez iseniz, varsayılan değer olarak udp portu kullanılacaktır.

İkinci paremetre, timeout paremetresidir. Bu parametre ile, ping komutunun ne zaman, zamanaşımına uğrayacağını belirleyebilirsiniz. Timeout değeri 0'dan ve varsayılan değer olan 5 saniye'den büyük olmalıdır.

Son parametre ise, gönderilecek paketin byte cinsinden büyüklüğüdür. Eğer tcp protokolünü kullanarak ping yapıyorsanız herhangi bir paket boyutu belirtmeniz gerekmez. En küçük ve varsayılan değer udp protokolü için 1, diğer protokoller için 0'dır. En fazla 1024 byte veri ping yapabilirsiniz.

Yeni bir ping nesnesi yarattıktan sonra tek yapmamız gereken, host adresini yazıp ping() demekten ibarettir.

:
  1. $host = 'localhost';
  2. $parmak->ping($host);

Host bilgisinin değeri, bir host adı olabileceği gibi, numerik bir ip adresi de olabilir. Eğer host adresi yanlışsa ya da ip adresi bulunamazsa undef (tanımsız) değer döner. Eğer host pinglenebilirse 1 (yani true) pinglenemez ise 0 değeri döner.

O zaman scriptin son tarafını yazmak bizim için çok daha kolay olacaktır.

:
  1. print "Content-type:text/html\n\n";
  2.  
  3. if($parmak->ping($host)) {
  4. print "$host 32byte veri ile pinglendi. Bu host ayakta...";
  5. }
  6. else { print "Bu host olmus."; }
  7. $parmak->close();

close() ise açılan socket bağlantısının kapatılması için gereklidir.

:
  1. #!/
  2.  
  3. use Net::Ping;
  4.  
  5. my $parmak = Net::Ping->new('tcp',30,32);
  6. $host = 'www.perfectgate.net';
  7. $parmak->ping($host);
  8.  
  9. print "Content-type:text/html\n\n";
  10.  
  11. if($parmak->ping($host)) {
  12. print "$host 32bytes veri ile pinglendi. Bu host ayakta...";
  13. }
  14. else {
  15. print "Bu host olmus.";
  16. }
  17. $parmak->close();

#TCP paremetersi karşı hosta ulaşmaya çalışır. Eğer ulaşabilirse, true gönderir. Extra parametre istemez..

#UDP parametresi karşı hosta bir udp paketi gönderir. Eğer gönderilen paket geri gelirse, ve içeriği giden paket ile aynı ise, karşı host ayakta sayılır.

#ICMP parametresi de gene karşı tarafa bir icmp paketi gönderir.
Eğer geri dönen paket varsa ve içeriği gönderilen paket ile aynı ise, karşı host ayakta demektir.

Net::Ping->new([$proto [, $def_timeout [, $bytes]]]);
#Eğer yeni obje yaratılırken parametre verilmezse varsayılan değer olarak udp alınır.
#Timeout 0 dan ve varsayılan değerden büyük olmalıdır. Varsayılan değer 5 saniyedir.
#Eğer protocol tcp ise, $bytes verilmese de olur. Bu kaç byte veri ile karşı hostun echolanacağını gösterir. En küçük ve varsayılan değer udp protokolü için 1, diğer protokoller için 0'dır. En fazla tanımlanabilecek değer ise 1024bytes dır.

$p->ping($host [, $timeout]);
#Bu işlem karşı hostun pinglenmesini sağlar ve cevap beklenir. $host değeri bir hostadı olabileceği gibi bir ip numarası da olabilir. Timeout süresi seçimliktir ve 0 saniyeden büyük olması gerekir. Eğer hostadı bulunamazsa ya da ip adresinde bir hata olursa undef değeri döner. Eğer host erişilebilinir durumda ise 1, değilse 0 değeri döner.

$p->close();
#Bu bağlantıyı kapatmak için kullanır. İstenilirse undep $p şeklinde de kullanmak mümkündür

Yazdır Yazdır | 586 Görüntülenme | Kategori: Diğer Diller | Trackback  Geri İzleme
Etiketler  Etiketler: , ,

Benzer Yazılar


Yorum Yap


(gerekli)

(gerekli,yayınlanmaz)




XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>