Last active
December 29, 2022 05:39
-
-
Save rkulla/1116085 to your computer and use it in GitHub Desktop.
Simple Perl-based Port Scanner
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
# Easy port scanner | |
# I wrote this in the 90s to help learn socket programming | |
# ./quickscan -h for usage | |
use Socket; | |
$| = 1; # so \r works right | |
my ($ip, $protocol, $port, $myhouse, $yourhouse, $log); | |
$protocol = getprotobyname('tcp'); | |
($ip, $port, $port_stop, $log) = @ARGV; | |
if ($ip eq "-h") { | |
&usage(); | |
} | |
$ip = "localhost" if not $ip; | |
$port = 1 if not $port; | |
$port_stop = 1024 if not $port_stop; | |
$log = "qsopenports.txt" if not $log; | |
unless (open(LOG_FILE, ">>$log")) { | |
die "Can't open log file $log for writing: $!\n" | |
} | |
# Make file handle hot so the buffer is flushed after every write | |
select((select(LOG_FILE), $| = 1)[0]); | |
print LOG_FILE "The following ports are open on $ip between port $port and $port_stop\n\n"; | |
print "Checking $ip for open ports..\n"; | |
for (; $port < $port_stop; $port += 1) { | |
socket(SOCKET, PF_INET, SOCK_STREAM, $protocol); | |
$yourhouse = inet_aton($ip); | |
$myhouse = sockaddr_in($port, $yourhouse); | |
if (!connect(SOCKET, $myhouse)) { | |
printf "%d\r", $port; | |
} else { | |
printf "%d <- open\n", $port; | |
print LOG_FILE "$port\n"; | |
close SOCKET || die "close: $!"; | |
} | |
} | |
close LOG_FILE || die "close: $!"; | |
printf "QuickScan complete.\n"; | |
printf "Those are the open ports for: $ip\n"; | |
sub usage() { | |
print "Usage: ./quickscan [host] [start port] [stop port] [logfile]\n"; | |
print "Defaults to localhost and port 1 and port 1024 qsopenports.txt\n"; | |
exit 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment