jump to navigation

Host Scanning dengan Perl February 5, 2008

Posted by puji in Programming.
trackback

Perl merupakan sebuah interpreted language. Pada awalnya perl di desain sebagai sebuah text manipulation language, namun kemudian perl berkembang menjadi sebuah bahasa pemrograman multi-purpose yang potensial. Perl memiliki kekuatan pada area network programming, lebih sederhana daripada C akan tetapi mempunyai kemampuan yang handal.
Perl membuat network programming menjadi lebih mudah dengan menyediakan fungsi-fungsi built-in yang dapat digunakan untuk membuat program-program jaringan. Banyak modul-modul yang tersedia secara bebas sehingga memungkinkan pembuatan program untuk tugas-tugas umum jaringan menjadi sederhana dan cepat.

Menggunakan perintah ping boleh dikatakan pekerjaan yang sering dilakukan oleh seorang praktisi jaringan. Dengan perintah ini diantaranya bisa diketahui konektifitas sebuah mesin ke mesin lain dalam jaringan.

Perintah ping merupakan pegiriman paket ICMP ECHO REQUEST (type=8) ke host tujuan, jika host tujuan sedang hidup, maka ia akan segera membalas dengan paket ICMP ECHO REPLY (type=0). Untuk lebih jelasnya, perhatikan format pada paket ICMP yang diilustrasikan dalam gamber di bawah ini.

icmp.jpg
Gambar 1. Format ICMP

Jeni-jenis pesan pada ICMP (header type)
0: Echo reply
3: Destination unreachable
4: Source quench
5: Redirect
8: Echo request
9: Router advertisement
10: Router solicitation
11: Time exceeded
12: Parameter problem
13: Timestamp request
14: Timestamp reply
15: Information request (obsolete)
16: Information reply (obsolete)
17: Address mask request
18: Address mask reply
30: Traceroute
31: Datagram conversion error
32: Mobile host redirect
33: IPv6 Where-Are-You
34: IPv6 I-Am-Here
35: Mobile registration request
36: Mobile registration reply
37: Domain name request
38: Domain name reply
39: SKIP
40: Photuris

Contoh perintah lain selain ping yang mengirimkan paket ICMP adalah traceroute yang berguna untuk mengetahui route ke host tujuan.

Penggunaan ping seperti contoh di bawah ini

[iwan@rooting /]$ ping 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=255 time=0.356 ms
64 bytes from 10.10.1.1: icmp_seq=2 ttl=255 time=0.190 ms
64 bytes from 10.10.1.1: icmp_seq=3 ttl=255 time=0.159 ms
64 bytes from 10.10.1.1: icmp_seq=4 ttl=255 time=0.197 ms

— 10.10.1.1 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.159/0.225/0.356/0.078 ms

Output diatas menunjukkan bahwa koneksi ke host 10.10.1.1 berjalan dengan baik terlihat dari tidak adanya paket yang hilang (lost) dan waktu balasan yang singkat.

Bagaimana kalau kita ingin mengecek koneksi ke banyak host, atau bahkan semua host dalam jaringan? di ping satu-satu saja kenapa? Di-ping satu-satu juga bisa, tapi mungkin Anda akan terlihat seperti orang ‘pinter’. Untuk melatih kreativitas dan membiasakan dengan program, kita akan coba membuat script yang bisa mengirimkan paket ping ke seluruh host sesuai rentang IP address yang kita inginkan.

Oke saatnya kita masuk ke koding. Kode program host scanning seperti di bawah ini

use Net::Ping;

$ip1 = $ARGV[0];
$ipn = $ARGV[1];
print “\nPinging $ip1 to $ipn… \n\n”;
@hst0=split(“\\.”,$ip1);
@hstn=split(“\\.”,$ipn);
$net=join(“.”,$hstn[0],$hstn[1],$hstn[2]);
$p = Net::Ping->new();

for ($i=$hst0[3];$i<=$hstn[3];$i++){
$trgt = join(“.”,$net,$i);
if (!($p->ping($trgt)))
{print “$trgt: Dead… \n”;}
else
{print “$trgt: Alive on “, scalar(localtime),”\n”;
$n++;}
sleep 1;
}
print “\nFinished, $n host connected.\n\n”;

Pada baris pertama program meng-include-kan modul Net::Ping dimana fungsi-fungsi pengecekan hubungan dengan remote host di definisikan. Baris berikutnya didefinisikan variable untuk menampung parameter range IP yang diinputkan. Selanjutnya program memberikan instruksi menampilkan pesan range ip yang akan di ping. Variabel-variabel @hst0 dan @hstn merupakan array yang berisi nilai-nilai ip yang dipecah untuk menentukan nilai host id dan network id yang akan digunakan pada saat proses looping.
Kemudian objek ping diciptakan yang ditunjukkan oleh pernyataan $p = Net::Ping->new()
Pada baris-baris berikutnya dilakukan perulangan eksekusi perintah ping sebanyak host yang diinputkan dan pesan hasil ping ditampilkan sesuai dengan status koneksi setiap host.
Untuk mengeksekusi script diatas dengan sintaks seperti berikut

perl [file_script] [ip_awal] [ip_akhir]

Seperti contoh berikut

[iwan@rooting]$ perl host_scanning.pl 10.10.1.1 10.10.1.5

Pinging 10.10.1.1 to 10.10.1.5…

10.10.1.1: Alive on Wed Aug 4 11:08:08 2004
10.10.1.2: Alive on Wed Aug 4 11:08:09 2004
10.10.1.3: Alive on Wed Aug 4 11:08:10 2004
10.10.1.4: Dead…
10.10.1.5: Alive on Web Aug 4 11:08:12 2004

Finished, 4 host connected.

Dengan script ini kita dapat mengecek banyak host dengan otomatis, selain itu yang paling penting adalah melatih kreativitas kita. Mudah-mudahan tulisan ini bermanfaat

Referensi
1.TCP IP Tutorial and Technical Overview, IBM Corporation
2. Perl by Example, Sam Publishing

 

Penulis
Iwan Nurwandana (Admin SMA3 Bandung, Alumnus STMIK-AMIKBANDUNG dan CSRG Angkatan-1)

Comments»

1. Remo Harsono - April 16, 2008

Nice tutorial, gmana kl ping ke banyak host skaligus (multithread)?

2. ana - March 6, 2009

mas,caraxscanning situs gman?trims. please notice me at purepink_11@yahoo.com