perl etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
perl etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Haziran 2017 Pazartesi

Perl ile bir IP adresinin IPV4 uyumluluğunun kontrolü

Perl ile yazdığınız script içinde alttaki basit SUB ile bu kontrolü yapmanız mümkün.



sub checkIPformat {

    my ($ip) = @_;
    my $ipformat = 0;

    if($ip=~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)/ && ( $1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 )) {  
        $ipformat=1; #1 is ok
    }
    return $ipformat;
}



27 Temmuz 2016 Çarşamba

Bir IP adresinin verilen Subnet içinde olup olmadığını Perl script yazarak anlamak.

Merhaba,

Verilen bir ip adresinin verilen bir subnet içinde olup olmadığını anlamak için basit bir perl scripti.

$ip = 192.168.10.11
$subnet = 192.168.10.0/24

sub checkip {
        my ($ip, $subnet) = @_;
        my $result = 0;

        my @iparr = split(/\./, $ip);
        my $ipval = $iparr[0] * 2**24 + $iparr[1] * 2**16 + $iparr[2] * 2**8 + $iparr[3];

        my @temparr = split(/\//, $subnet);
        my $ipsub = $temparr[0];
        my $netmask = $temparr[1];

        my @ipsubarr = split(/\./, $ipsub);
        $ip2val = $ipsubarr[0] * 2**24 + $ipsubarr[1] * 2**16 + $ipsubarr[2] * 2**8 + $ipsubarr[3];

        if( $ipval >> (32-$netmask) == $ip2val >> (32-$netmask) ) {
            $result = 1;
        }
        return $result;
}

Sonuç değeri olarak $result=1 geldiğinde ip adresinin ilgili subnete ait olduğunu anlamış oluruz.

27 Nisan 2016 Çarşamba

Port dinleyen script

Merhaba,

Bir sistem üzerinde port dinlemek ve bağlantı kabul etmek için basit bir perl script paylaşıyorum.
Bu scripti çalıştıracağımız sistem üzerinde herhangi bir portu dinlemeye geçirmek ve başka bir makineden telnet ile test etmek mümkün.

Böylece herhangi iki network arasında yada herhangi bir cihaz üzerinde ilgili port üzerinden iletişim olup olmadığını test edebileceksiniz.

Script, bağlantı kabul edecek makine (10.10.1.11) üzerinde, port no verilerek alttaki şekilde çalıştırılır,

c:\test>perl conntest.pl 8071

Bağlanacak makinede ise alttaki şekilde telnet client çalıştırılır,

c:\telnet 10.10.1.11 8071

Telnet çalıştırdığınız makinede alttaki çıktıyı göreceksiniz.

-----------------------------------------------------------------------------
Port 8071 Ayakta. Baglandiginiz Sistem : TRISTN0H408852

                                                       **Baglanti Kesiliyor**

Connection to host lost.
-----------------------------------------------------------------------------


#!/usr/bin/perl -w
use strict;
use Socket;
my $port = shift or die "\nPort Belirtilmedi.\nKullanim : \"perl conntest.pl 8088\"";
my $protocol = getprotobyname('tcp');
my $hostname = `hostname`;
# Soket Oluştur
socket(SERVER, PF_INET, SOCK_STREAM, $protocol) or die "socket: $!";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
# Lokal Port
my $ipaddress = sockaddr_in($port, INADDR_ANY);
# Portu Dinlemeye Başla
bind(SERVER, $ipaddress) or die "bind: $!";
listen(SERVER, SOMAXCONN) or die "listen: $!";
# Bağlantıyı Kabul Et
my $client_addr;
while ($client_addr = accept(CLIENT, SERVER)) {
    # Mesaj Bas, Bağlantı Kapa
    print CLIENT "\nPort $port Ayakta. Sistem : $hostname\n*Baglanti Kesiliyor*";
    close CLIENT;
}




Teşekkürler,
Cem Selmanoğulları

2 Ocak 2015 Cuma

Linux / Unix sistemlerde disk doluluğunu izleyen bir script

Merhaba,

Linux makinelerde disk doluluğunu bulup belli bir yüzdenin altında ise alarm üreten bir script yazalım.


use strict;
use warnings;
use Filesys::
DiskSpace;


 # /log izlenecek
my $dir = "/log";

my $kritik_seviye=10;

# /log için df ciktisini alalim - burada ciktidaki tab ile ayrilmis kolonlar aliniyor - linux versiyonuna # gore degisiklik gosterebilir.
my ($fs, $fs_description, $used, $available, $filesystemused, $fmountedon) = df $dir;

# /log icin bos alan yuzdesini hesaplayalim
my $logfree = (($available) / ($available+$filesystemused)) * 100.0;


# display message
my $cikti = sprintf("$dir icin bos disk alani == %0.2f\n",$logfree);print $cikti;


if($logfree < $kritik_seviye{
    print "Alarm";
    #Bu asamada email yada sms gonderilebilir
}


Teşekkürler,
Cem Selmanoğulları

28 Aralık 2014 Pazar

Perl ile XML dosyasından verileri parse edip HTML dosyası oluşturan basit bir script

Merhaba,

Basit bix XML dosyasından verileri alıp HTML dosyası oluşturan bir perl scripti paylaşmak istiyorum.

Öncelikle XML dosyasını alttaki şekilde fooxml.xml dosyası olarak oluşturalım.


  <config logfiles="/var/log/foologs/" debugfile="/tmp/foo.dbg" misc="mytest">
    <server name="ankara" osname="unix" osversion="2.6.5.3">
       <ipaddress>
             <address>10.1.0.101</address>
             <address>10.1.1.102</address>
       </ipaddress>
       <macaddress>
             <address>10:54:E5:12:43:A4:E2:21</address>
             <address>10:54:E5:12:45:A4:A4:41</address>
       </macaddress>
    </server>
    <server name="istanbul" osname="linux" osversion="6.6.5.3">
       <ipaddress>
            <address>10.16.0.105</address>
            <address>10.16.1.106</address>
      </ipaddress>
      <macaddress>
            <address>10:54:E5:12:43:A4:B2:31</address>
            <address>10:54:E5:12:43:E4:6Y:65</address>
      </macaddress>
    </server>
  </config>


Yukarıda gösterile XML dosyasını parse edecek scriptimizi perl ile oluşturacağız. Dosya ismi fooxmlparser.pl ve içeriği alttaki gibi olsun.



#!/usr/bin/perl

###Gerekli XML kutuphaneleri
  use XML::Simple qw(:strict);
  use Data::Dumper;

###XML dosyasini parse edip ekrana bastiralim
  my $config = XMLin("C:\\Otomasyon\\PerlXMLparser\\fooxml.xml", KeyAttr => { server => 'name' }, ForceArray => [ 'server', 'address' ]);

  print "Parse Edilecek XML Ciktisi : \n\**********\n";
  print Dumper($config);
  print "\n*************\n";

  ###Config icinde tanimli degerleri almaniz gerekirse alttakileri kullanabilirsiniz.###
  #print $config->{logdir};
  #print "\n";
  #print $config->{debugfile};
  #print "\n";
  #print $config->{misc};

###HTML dosyasina yazacagimiz degiskenlere atama yapalim

  my $srvankara="ankara";
  my $srvankaraip1 = $config->{server}->{ankara}->{ipaddress}->{address}->[1];
  my $srvankaramac1 = $config->{server}->{ankara}->{macaddress}->{address}->[1];
  my $srvistanbul="istanbul";
  my $srvistanbulip1 = $config->{server}->{istanbul}->{ipaddress}->{address}->[1];
  my $srvistanbulmac1 = $config->{server}->{istanbul}->{macaddress}->{address}->[1];
 
###HTML dosyasina yazacagimiz degiskenleri ayrica ekrana bastiralim
  print "Server : ANKARA\n\n";
  print "IP Address 1: ";
  print $config->{server}->{ankara}->{ipaddress}->{address}->[1];
  print "\n\n";
  print "MAC Address 1: ";
  print $config->{server}->{ankara}->{macaddress}->{address}->[1];
  print "\n";

  print "Server : ISTANBUL\n\n";
  print "IP Address 1: ";
  print $config->{server}->{istanbul}->{ipaddress}->{address}->[1];
  print "\n\n";
  print "MAC Address 1: ";
  print $config->{server}->{istanbul}->{macaddress}->{address}->[1];
  print "\n\n\n";
 
###HTML dosya içeriğini oluşturalım
  print "HTML Ciktisi : \n\n";
  print "<html>\n\n<meta>\n<title>XML Ciktisi</title>\n</meta>\n\n<body>\n\n<table>";
  print "\n<tr><td>".$srvankara."</td></tr>";
  print "\n<tr><td>".$srvankaraip1."</td></tr>";
  print "\n<tr><td>".$srvankaramac1."</td></tr>";
  print "\n<tr><td>".$srvistanbul."</td></tr>";
  print "\n<tr><td>".$srvistanbulip1."</td></tr>";
  print "\n<tr><td>".$srvistanbulmac1."</td></tr>\n</table>\n\n</body>\n</html>";
 
 
 
 
 
 
 

23 Aralık 2014 Salı

Bir hata durumunda Alarm üreten, email atan script - (Alarm Clear özelliği ile birlikte)

Merhaba,

PERL ile basit bir monitoring uygulaması yazalım.
Bu uygulama linux makineye ssh ile bağlansın. Bir script çalıştırarak bu scriptin çıktısında içinde Alarm geçen satırlar olması durumunda email atsın. Çıktıdaki Alarm kelimeleri yok olduğunda ise hata düzeldi şeklinde email atsın.

Bunun için Perl ün Net::SSH2 kütüphanesini kullanıyoruz.
Linux makineye ssh ile bağlandıktan sonra ilgili scripti çalıştırıp çıktıyı alıyor ve işlemlerimize alttaki scriptteki açıklamalar ile devam ediyoruz.

Burda script kendi makinenizde çalışmakta ve uzaktaki makineye ssh ile bağlanmakta ve komut gönderip çıktısını alıp yine kendi makinenizde çıktıyı işlemektedir.


#!/usr/bin/perl -w
use Net::SSH2;
use warnings;
use strict;
no warnings 'uninitialized';


my $host = "192.168.10.1";
my $user = "myuser";
my $password = "mypassword";
my $ssh = Net::SSH2->new();

### SSH ile yukarıdaki ip adresine bağlanılır
   if(!$ssh->connect($host)){
     print("SSH Baglantisi Saglanamadi - $@ \n");
       exit(1);
   }
   if(!$ssh->auth_password($user,$password)){
     print("Kullanici Otantikasyon Sorunu - $@");
       exit(1);
   }

### Script çıktısı ve alarmları yazmak için Alarms.txt ve output.txt dosyaları oluşturulur.
my $myfilepath = "C:\\Otomasyon\\Alarms.txt";
unlink $myfilepath;
$myfilepath = "C:\\Otomasyon\\output.txt";
unlink $myfilepath;
my $output;

### showlines.pl scripti ssh bağlantısı üzerinden çalıştırılır ve çıktısı output a alınır.
        my $channel = $ssh->channel();
        $channel->shell();
        my @output;
        my $r=0;
        print $channel ("showlines.pl\n");
        @output=$channel->READLINE();
        print @output;
        $channel->close;
        $ssh->disconnect;                              
        print scalar @output;                              
                              
        for($r=0; $r < (scalar @output);$r++){
             print $output[$r]."\n";
        }
       
### Alınan çıktı output.txt dosyasına yazılır
        open (MYFILE, '>> C:\Otomasyon\output.txt');
        for($r=0; $r < (scalar @output);$r++){
              print MYFILE $output[$r]."\n";
        }                     
        close (MYFILE);                              

my $old_alarm_state = 0;                             
my $line="";

### Her kontrolde bir önceki kontrolde alınan alarmların sayıları ToplamAlarmSayisi.txt dosyasında tutulur
### Burada bir önceki kontrolde kaç alarm olduğu çekilir
        open (MYFILE, 'C:\Otomasyon\ToplamAlarmSayisi.txt');
          while (<MYFILE>) {
              chomp;
              $line = $_;                        
              $old_alarm_state = $line;
         }
                              
my $alarm_state = 0;
my $alarms="";                        
      
### Yeni kontrolde kaç alarm olduğu ve hangi satırlarda alarm olduğu çekilir
        open (MYFILE, 'C:\Otomasyon\output.txt');
          while (<MYFILE>) {
              chomp;
              $line = $_;
              if($line=~ m/Alarm/ || $line=~ m/alarm/ || $line=~ m/ALARM/){
                     $alarm_state++;
                     $alarms = $alarms.$line."\n";
              } else { }
          }

### Yeni alarm sayısı ToplamAlarmSayisi.txt dosyasına yazılır. Böylece bir sonraki kontrolde kullanılacak.
         open (MYFILE, '> C:\Otomasyon\ToplamAlarmSayisi.txt');
         print MYFILE $alarm_state;
         close (MYFILE);
               
### Eğer en az 1 alarm alındı ise Alarms.txt dosyasına alarm olan satırlar eklenir.
       if($alarm_state!=0) {
             open (MYFILE, '>> C:\Otomasyon\Alarms.txt');
             print MYFILE $alarms;
             close (MYFILE);
               
             open (MYFILE, '> C:\Otomasyon\ToplamAlarmSayisi.txt');
             print MYFILE $alarm_state;
             close (MYFILE);
       }

### Eski alarm sayısı sıfırdan büyük (yani eskiden alarm vardı). Yeni alarm sayısı sıfır ise alarm temizlendi demektir. Mailler temizlendi şeklinde Clear mesajı atılır.
       if($old_alarm_state!=0 && $alarm_state==0) {
            print "\n\nAlarm Temizlendi - Mail Gonderildi \n\n";
            system("wscript C:\\Otomasyon\\alarmtemizlendi.pl "."\"".$alarms."\"");
       }

### Eski alarm sayısı ve yeni alarm sayısı sıfır ise Alarm yok demektir ve mail atılmaz
### Eski alarm sayısı ve yeni alarm sayısı eşit ise bir değişiklik yok demektir email atılmaz
### Eski alarm sayısı sıfır ve yeni alarm sayısı en az 1 ise yeni alarm geldi demektir mail atılır.
### Eski alarm sayısı sıfırdan fazla ise ve yeni alarm sayısı eski alarmsayısından en az 1 fazla ise yeni bir   ### alarm geldi demektir. Mail atılır.

      if($old_alarm_state==0 && $alarm_state==0) {
            print "\n\nAlarm YOK >>>> Mail Gonderilmedi \n\n";
      } elsif($old_alarm_state==$alarm_state) {
            print "\n\nDurum Degisikligi Yok  >>>> Mail Gonderilmedi \n\n";
      } elsif($old_alarm_state==0 && $alarm_state!=0) {
            print "\n\nYeni Alarm Olustu >>>> Hic Alarm Yoktu -  Yeni Alarm Geldi";
            system("wscript C:\\Otomasyon\\alarmmailigonder.pl "."\"".$alarms."\"");
      } elsif($old_alarm_state!=0 && $alarm_state>$old_alarm_state) {
            print "Daha Once Alarm Vardi >>>> Ek Alarm Satiri Geldi";
            system("wscript C:\\Otomasyon\\alarmmailigonder.pl "."\"".$alarms."\"");
      }


Teşkkürler,
Cem Selmanoğulları

19 Aralık 2014 Cuma

HP Network Automation Ürününü Tanıyalım

Merhaba,

Uzunca süre üzerinde çalıştığım ve çeşitli projeler yaptığım HP Network Automation ürününden bahsetmek isterim. Birçoğunuz HP NA olarak da tanıyorsunuz bu ürünü. HP nin Network Management ürün ailesine ait bir ürün olan HP NA oldukça sağlam ve oturmuş bir ürün.

Birçok kişinin paralel çalışarak günler içinde yapabileceği çalışmaları saatler ve hatta dakikalar içinde yapabiliyor. 500 tane router a 1 saat içinde değişik konfigurasyonlar yapabildiğinizi hayal edin ?

Ürünün yeteneklerine göz atalım;

Konfigurasyon Değişikliği Yönetimi :

Konfigurasyonlardaki değişiklikler kaydedilir. Buna snapshot diyoruz Geriye dönük eski konfigurasyonlara erişimi sağlar. İhtiyaç anında hızlı bir şekilde eski konfigurasyona dönülür. Yeni ve eski konfigurasyonlardaki değişiklikler satır satır karşılaştırılarak gösterilir. Böylece eski konfigurasyonda nelerin değiştitildiği, silindiği, eklendiği ve bunların kimler tarafından nezaman yaptığı bilgisi tutulur.

Uyumluluk kuralları (Complience Check) :

Tüm network cihazları bu kurallara göre taranır. Uyumsuzluk durumunda alarm üretilir yada uyumsuzluğu giderecek bir aksiyon oluşturulur (Remedation Script). Örnek vermek gerekirse networkünüzde cihazlarınız üzerinde telnet ayarı kalmadığından ve sadece ssh ayarlandığından nasıl emin olabilirsiniz ? NA tüm cihazlara belli periyodlarda bağlanıp kontrol eder. Unutulan bir telnet konfigurasyonu olması durumunda uyarı verir ve konfigurasyonu düzeltir. Anlayacağınız herhangi bir cihazda telnet konfigurasyonu unutuldu ise NA bunu silecek yerine SSH konfigurasyonu yazacaktır.

Araştırmalara göre network adminleri zamanlarının %45 ine kadarını manuel operasyonlarda harcamaktadırlar. 

Networkte Manuel Hatalar :

Network çalışanlarının pekçok zaman start-up konfigurasyon ve running konfigurasyonu kaydetmeyi unuttukları gözlenmektedir. Akabinde olabilecek herhangi bir kesinti yada sistem restartında yeni konfigurasyon kaybedilecektir. Bunun önüne geçmek için bu konfigurasyonların eşit olup olmadığı hergün NA tarafından kontrol edilir. Gerekirse eşit olmayanlar eşitlenir.

> HP NNM (Network Node Manager) ile entegre edilebilir. Envanterler NNM üzerinden güncellenebilir. Ayrıca NA kendisi de Network cihazlarını keşfedebilir. Network haritalandırması yapabilir.

> ITIL, COSO, SOX, PCI,CoBIT standartlarına uyunluğu araştırıp raporlar. Uyumsuzlukları force etme imkanı sağlar.

> NA güçlü bir ACL otomasyonu sağlar. Hazır templateler yada yeni oluşturulabilecek otomasyon scriptleri ile detaylı bir ACL otomasyonu sunar.

> Cihazların IOSların saklar. Gerekli durumlarda yeni IOS yüklenmesi ve güncellenmesine olanak sağlar.
IOS versiyonları envanterini tutar ve güncelliği kontrol eder. Güncel olmayanlar durumunda raporlama yapar.

> İş akışı onay mekanizması çalıştırabilirsiniz.

> HP Server Automation ile NA entegre çalışabilir ve Serverların hangi network cihazlarındaki hangi değişikliklerden etkilendiği gibi bilgilerin üretilmesi sağlanabilir.

> Patchlerin topluca cihazlara geçilmesine  olanak sağlar.

> Güçlü bir envanter takibi ve raporlaması sunar.

> Schedule joblar yada job grupları çalıştırılabilir.

> Gelişmiş command scriptleri hazırlanıp cihazlara grup bazlı basılmasına izin verir.

> CLI komutlarınız izlenerek yaptığınız işlerin bir script halinde kaydına izin verilir. Böylece bir cihazda yaptığınız değişiklikleri başka cihazlara script olarak topluca basabilirsiniz.

> Cihazlara bağlantılar sınırlandırılabilir. Sadece SSH yada SSH-2 kullanılabilecek şekilde force edilebilir.

> Cihaz konfigurasyonları NA arayüzünden değiştirilebilir, inline commentler eklenebilir ve deploy edilebilir.


Düşünün...

Onlarca satırlık ACL tanımlamanız olan 300 ün üzerinde cihazınız var. Bu ACL lerden 23 tanesi belli kriterlere göre silinecek, 12 tanesi değiştirilecek, 6 tane yeni eklenecek. Bu düzenlemeyi elle yapmak her cihaza bağlanarak nekadar zamanınızı alır ? Network Automation ile birkaç saat içinde bu işin bittiğini düşünün. Hem de manuel yaparken oluşabilecek hatalardan uzak bir şekilde.

Bir güvenlik açığı olduğunu ve bir gecede 1500 cihaza patch geçmeniz yada konfigurasyon değişikliği yapmanız gerektiğini düşünün. Paralel çalışarak kaç kişi kaç günde halledebilir bu işi.
Ya Otomasyonla kaç saate biter bu iş ?

Teşekkürler,
Cem Selmanoğulları

Üzerinde SNMP agent bulunduran tüm cihazlardan snmp verisi çekmek için basit bir script...

Merhaba,

Network cihazları, sunucular ve üzerinde SNMP agent bulunduran tüm cihazlardan snmp verisi çekmek için basit bir script paylaşmak istiyorum.

Perl Net::SNMP kütüphanesini kullandığımız bu scriptte SNMP bağlantısı kurup belirlediğimiz bir OID ye karşılık gelen değer için istekte bulunuyor ve elde ettiğimiz sonucu ekrana bastırıyoruz.

IP, Community String ve istenen OID değerini scripte arguman olarak dışarıdan veriyoruz.

Bu scripti geliştirerek basit bir monitoring uygulaması yazmak mümkün olacaktır.


use Net::SNMP;

# SNMP OID değeri arguman olarak disaridan alinir
my $OID => $ARGV[2]

# IP adresi ve SNMP community string disaridan arguman olarak alinir
($session,$error) = Net::SNMP->session(IP => $ARGV[0],Community => $ARGV[1]);
die "SNMP Baglanti Hatasi: $error" unless ($session);

# Alinan SNMP OID degeri ile SNMP istegi yapilarak sonuc degiskenine atanir
$sonuc = $session->get_request($OID);

die "SNMP Istegi Hatasi: ".$session->error unless (defined $sonuc);

$session->close;

# SNMP OID degerine karsilik gelen deger ekrana bastirilir
print "SNMP OID Degeri: ".$sonuc->{".$OID."}";

16 Haziran 2014 Pazartesi

Script yazarak ping atmak

Merhaba,

Daha önceki yazmızda Perl kütüphanelerinden yararlanarak bir PING MONITOR yazmıştık.

Şimdi ise hiçbir kütüphane kullanmadan direkt olarak bir script ile ping atmayı deneyelim.

Ping atalım. Sonucu bir text dosyasına alalım. Text dosyasındaki sonucu inceleyelim.

  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::Ping;
  4. my $ipdurum = "UP";
  5. my $file = "C:\\pinggecici.txt";
  6. unlink $file;
  7. system("ping 10.1.1.10 >> C:\\pinggecici.txt");
  8. open (MYFILE, 'C:\\pinggecici.txt')
  9. while (<MYFILE>) {
  10.     chomp;
  11.     $line = $_;
  12.     if($line =~ m/100% loss/)
  13.     {
  14.         $pingdurum = "DOWN";
  15.         $ipdurum = "DOWN";
  16.      } else {
  17.          pingdurum = "UP";
  18.      }
  19. }
Teşekkürler,
Cem Selmanoğulları

Ping monitor (Perl Script)

Merhaba,

Basit bir ping monitor nasıl yazılır, görelim.

Genelde tercihim perl script dilidir. Diğer dillerde de yazmak mümkündür.
Perl kütüphanelerini kullanabilir yada kendimiz de direkt olarak yazabiliriz.
Öncelikli olarak perl Net::Ping kütüphanesinin kullanımını görelim.

5 adet ip adresine ping attırıp sonucu almaya çalışalım.

Bu 5 ip adresi pinglenecek sonuç ekrana bastırılacak. Ayrıca C:\ipsonuclari.txt isimli dosyaya yazılacak.

Öncelikle 5 ip adresini bir dizide toplayacağız. Sonrasında bu dizi içinde bir for döngüsü ile dönüp her ip adresini pingleyeceğiz.

  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::Ping;
  4. my $ip1 = "10.1.1.1";
  5. my $ip2 = "10.1.1.2";
  6. my $ip3 = "10.1.1.3";
  7. my $ip4 = "10.1.1.4";
  8. my $ip5 = "10.1.1.5";
  9. my $ip_durum = "";
  10. my @array = ($ip1,$ip2,$ip3,$ip4,$ip5);
  11. foreach (@array) {
  12.     my $ipadres = $_; 
  13.     chomp($ipadres);
  14.     print $_."\n"
  15.     my $p = Net::Ping->new(icmp);
  16.     if($p->ping($ipadres)) {
  17.         print "BASARILI";
  18.         $ip_durum = $ip_durum." ".$ipadres.":OK ";
  19.     } else {
  20.     print "BASARISIZ";
  21.     $ip_durum = $ip_durum." ".$ipadres.":BASARISIZ ";
  22.     }
  23. }
  24. print $ip_durum;
  25. my $dosyasil = "C:\\ipsonuclari.txt";
  26. unlink $dosyasil;
  27. open(MYFILE, '>> C:\\ipsonuclari.txt');
  28. print MYFILE $dosyasil
  29. close (MYFILE);

Buradaki önemli noktalardan birisi new(icmp); fonksiyonunun çalışabilmesi için bu scriptin hem icmp paketleri göndermeye hem de gelen cevapları dinlemeye iznimizin olmasıdır.
Aksi takdirde ping atılamayan bazı ip ler ayakta gibi görünecektir.

Teşekkürler,
Cem Selmanoğulları