rendered paste body#!/usr/bin/perl
use Tk;
use IO::Socket;
my ($sfile, $nfrm, $entry, $file, $but, $fromport, $toport, $neww, $nwww, $hlpm, $flmn, $menu, $save, $mw, $mid, $win, $prt, $l);
$save = "0";
$mw = MainWindow->new();
$mw->configure(-background => 'black');
$mw->title(" Perl/Tk Port Scanner");
$menu = $mw->Frame(-relief => 'groove', -border => 3, -background => 'grey')->pack('-side' => 'top', -fill => 'x');
$flmn = $menu->Menubutton(-text => 'File', -tearoff => 0, -background => 'grey', -activebackground => 'white', -foreground => 'black')->pack(-side => 'left');
$hlpm = $menu->Menubutton(-text => 'Help', -tearoff => 0, -background => 'grey', -activebackground => 'white', -foreground => 'black')->pack(-side => 'right');
$neww = $mw->Frame(-background => 'black')->pack(-side => 'top', -fill => 'x');
$nwww = $neww->Frame(-background => 'black')->pack(-side => 'left', -ipady => 9, -padx => 8);
$hlpm->command(-label => 'Info', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{info()});
#$hlpm->command(-label => 'Help', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{help()});
$hlpm->separator();
#$hlpm->command(-label => 'Ports', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{ports()});
#$hlpm->command(-label => 'Upgrade', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{upgrade()});
$flmn->command(-label => 'Scan', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{scan($entry, $fromport, $toport, $file)});
$flmn->command(-label => 'Info', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => sub{info()});
$flmn->separator();
$flmn->command(-label => 'Exit', -activebackground => 'black', -foreground => 'black', -activeforeground => 'green', -command => [$mw,'destroy']);
$nwww->Label(-background => 'black', -relief => 'sunken', -foreground => 'green', -text => "Hostname/IP:")->pack;
$nwww->Label(-background => 'black', -relief => 'sunken', -foreground => 'green', -text => "Starting port:")->pack;
$nwww->Label(-background => 'black', -relief => 'sunken', -foreground => 'green', -text => "End port:")->pack;
$nwww->Label(-background => 'black', -relief => 'sunken', -foreground => 'green', -text => "File to write to:")->pack;
$nwww->Label(-background => 'black', -relief => 'sunken', -foreground => 'green', -text => "Write to file?")->pack;
$nfrm = $neww->Frame(-background => 'black')->pack(-side => 'left', -pady => 2, -padx => 15);
$entry = $nfrm->Entry(-background => 'white', -foreground => 'black', -borderwidth => 2, -relief => 'sunken', -width => 30)->pack;
$entry->insert('end', "localhost");
$fromport = $nfrm->Entry(-background => 'white', -foreground => 'black', -borderwidth => 2, -relief => 'sunken', -width => 6)->pack;
$fromport->insert('end', "1");
$toport = $nfrm->Entry(-background => 'white', -foreground => 'black', -borderwidth => 2, -relief => 'sunken', -width => 6)->pack;
$toport->insert('end', "1024");
$file = $nfrm->Entry(-background => 'grey', -foreground => 'grey', -borderwidth => 2, -width => 30)->pack;
$nfrm->Checkbutton(-background => 'white', -command => sub{save()})->pack;
$but = $mw->Frame(-borderwidth => 0, -background => 'black', -relief => 'groove')->pack(-side => 'top', -fill => 'x');
$but->Button(-background => 'black', -foreground => 'white', -text => 'Info', -command => sub{info()})->pack(-side => 'left');
$but->Button(-background => 'black', -foreground => 'white', -text => 'Scan', -command => sub{scan($entry, $fromport, $toport, $file)})->pack(-side => 'left');
#$prt = $mw->Label(-text => "Waiting for acknowledgement...", -foreground => 'green', -background => 'black', -pady => 4)->pack();
$but->Button(-background => 'black', -foreground => 'white', -text => 'Exit', -command => [$mw,'destroy'])->pack(-side => 'right');
$mid = $mw->Frame(-background => 'black', -foreground => 'green')->pack(-side => 'top', -fill => 'y', -expand => 'y');
$win = $mid->Frame(-background => 'black', -foreground => 'green')->pack(-side => 'left', -ipady => 2, -padx => 2);
#$mw->Photo('imggif', -file => "lxban.gif");
#$l = $mw->Label('-image' => 'imggif', -border => 0)->pack;
MainLoop;
sub scan {
my ($entry, $fromport, $toport, $file, $scan, $true, $con, $top1);
($entry, $fromport, $toport, $file) = @_;
if ($save %2 != 0) {
$sfile = get $file;
}
$sentry = get $entry;
$sfromport = get $fromport;
$stoport = get $toport;
$scan;
do {
$true = "0";
$con = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => $sentry,
PeerPort => $sfromport) or $true++;
if ($true == "0") {
$scan .= "Port $sfromport open\n";
if ($save == 1) {
if ($sfile eq "") {
$sfile = "/tmp/tkscan.log";
}
open(FILE, ">>$sfile");
print FILE "Port $sfromport open on $sentry\n";
}
}
$sfromport++;
}
while ($sfromport <= $stoport);
if ($save %2 != 0) {
close(FILE);
}
$top1 = $mw->Toplevel;
$top1->title(" Ports");
$top1->Label(-text => "Ports open on $sentry\n\n$scan")->pack;
}
sub info {
my $top2 = $mw->Toplevel;
$top2->Label(-text => "Perl/Tk port scanner\nwritten by epoch\n\nhttp://epoch.zoomshare.com/files/Gothic_Site.swf\n")->pack;
}
sub save {
$save++;
if ($save %2 != 0) {
$file->configure(-background => 'white', -foreground => 'black', -relief => 'sunken');
$file->delete(0, 'end');
$file->insert('end', "/tmp/tkscan.log");
}
else {
$file->configure(-background => 'grey', -foreground => 'grey');
$file->delete(0, 'end');
}
}