Script Perl Port Scanner beserta penjelasannya

Hai devilzc0der :metal:

udah lama ane gak buat trit, kali ini ane mau share script perl port scanner

filename: portscan.pl



#!/usr/bin/perl
# TCP Port scanner
 
use IO::Socket;
 
# flush the print buffer immediately
$| = 1;
 
# Take input from user - hostname, start port , end port
print "Enter Target/hostname : ";
 
# Need to chop off the newline character from the input
chop ($target = <stdin>);
print "Start Port : ";
chop ($start_port = <stdin>);
print "End Port : ";
chop ($end_port = <stdin>);
 
# start the scanning loop
foreach ($port = $start_port ; $port <= $end_port ; $port++) 
{
    #\r will refresh the line
    print "\rScanning port $port";
     
    #Connect to port number
    $socket = IO::Socket::INET->new(PeerAddr => $target , PeerPort => $port , Proto => 'tcp' , Timeout => 1);
     
    #Check connection
    if( $socket )
    {
        print "\r = Port $port is open.\n" ;
    }
    else
    {
        #Port is closed, nothing to print
    }
}
 
print "\n\nFinished Scanning $target\n";
 
exit (0)

Penjelasan:

#!/usr/bin/perl

=> lokasi perl di linux

use IO::Socket;

=> menggunakan socket antara client dan server

$| = 1;

=> ketika kita mengambil port pertama angka 1 dan port terakhir angka 80. dalam proses angka dari nomor 1-80 tidak akan ditampilkan apabila tidak ada port yang aktif. Tetapi jika dalam hasil scanning ternyata port 25 dan 80 yang terbuka maka akan ditampilkan

i.e:
$ perl portscan.pl
Enter Target/hostname: 127.0.0.1
Start port: 1
End Port: 80
Scanning port:
Port 25 open
Port 80 open

(nomor port 2,3,4,5,6,7,dst tidak akan tampil)

chop ($target = <stdin>);

=> input nama hostname atau IP address

chop ($start_port = <stdin>);

=> input port pertama (i.e: masukan angka 1)

chop ($end_port = <stdin>);

=> input port terakhir (i.e: masukan angka 80)

foreach ($port = $start_port ; $port <= $end_port ; $port++)

=> apabila variabel string port sama dengan port pertama ($port = $start_port) dan variable string port sama dengan atau kurang dari port terakhir ($port <= $end_port), angka port akan terus ditambah ($port++). Jika input port pertama dengan angka 1 dan angka terakhir 80 maka scanning tidak akan lebih dari angka 80.

$socket = IO::Socket::INET->new(PeerAddr => $target , PeerPort => $port , Proto => 'tcp' , Timeout => 1);

=> PeerAddr adalah target atau hostname yang diambil dari variabel $target
=> PeerPort adalah perintah untuk menentukan port yang aktif pada server melalui variabel $port
=> Proto adalah tipe koneksi yang digunakan (tcp atau udp)
=> Timeout adalah nilai untuk menentukan berapa detik nomor scanning port akan dilanjutkan, jika lebih dari 1 detik maka proses scanning akan dilanjutkan ke nomor port berikutnya

if( $socket )
{
print "\r = Port $port is open.\n" ;
}

=> Apabila dalam proses scanning terdapat nomor port yang terbuka dari hasil variabel $socket, maka hasil nomor port akan dicetak

else
{
#Port is closed, nothing to print
}

=> Apabila dalam proses scanning tidak didapatkan port yang terbuka dari hasil variabel $socket, maka tidak ada nomor port yang akan ditampilkan

Sekian dulu ane sharing hari ini, semoga bermanfaat :metal:

Sumber:
https://www.binarytides.com/perl-port-scanner-code/
https://perldoc.perl.org/IO/Socket/INET.html
https://www.perlmonks.org/?node_id=280025

:mantap: penjelasannya…

Btw, klo ga ada port yang terbuka dan ga ada action yg mau dilakukan, else {} nya dibuang bisa kah om?

Bisa om dita, else itu untuk penjelas aja sih terserah mau ditambahin output “All port is closed” atau else {} nya di buang juga gak apa2 :metal:

mantap, detail… :mantap:

Wew :wew

:belajar

Ane ada buku perl gede banget :metal: tapi kagak ngarti ngarti :hammer

ane aja baru belajar ini om :hammer