I am trying to write a script that will connect to an IRC channel and check
if the server is a botnet c&c server. I have found several templates for
connecting to irc, but they all rely on the MOTD to confirm connectivity.
The problem is often botnets do not set up commands such as MOTD and LUSERS.
I would like to connect to the suspected ip and then issue a few commands
such as LUSER, LIST, WHO, STATS and MOTD, then exit. I am having trouble
finding a reference that discusses how to do this. Most of what I have seen
is for legite IRC, which has the script connect, join a channel and then do
a trival task. Can someone help me modify or point me to a good example of
how to accomplish this?

Here is my IRC subroutine that allows me to connect and then does nothing:

sub irc {

    # create the IRC object
    my $irc = new Net::IRC;
    print ("    Creating connection to IRC server...");
    my $conn = $irc->newconn(Server   => "$ip",
             Port     => $port,
             Nick     => "jsxpiid",
             Ircname  => "habvhgdjba",
             Username => "hvbcsrcx")
        or die ("Can't connect to IRC server.");
       print ("Connected\n");

    # action to take once connected
    sub on_connect {
            my $self = shift;
          print "*** Connected to IRC.\n";
    }

    # print any output data while connected
    sub on_init {
            my ($self, $event) = @_;
            my (@args) = ($event->args);
            shift (@args);

            print "*** @args\n";

    }

    # handle what happens when receiving public (channel) text.
    sub on_public {
            my ($self, $event) = @_;
            my @to = $event->to;
            my ($nick, $mynick) = ($event->nick, $self->nick); # Sender
text,
        +Bot nick
            my $host=$event->host; # Sender's hostname
            my ($arg) = ($event->args); # The message

            # parse the channel text
            print "<$nick> $arg\n";

    }

    # handles what happens when receiving private message text
    sub on_msg {
            my ($self, $event) = @_;
            my ($nick) = $event->nick; # Message Sender
            my ($arg) = ($event->args); # Message Text
            my $host=$event->host;

            # Here's where we want to "parse" message text
            print " - $nick -  $arg\n";

    }

    # use if nick is taken, setting it to an alternate nick.
    sub on_nick_taken {
            my ($self) = shift;

            $self->nick("fxcvbynru");
    }

    # install handler subs
    print ("    Installing local handlers...");
    $conn->add_handler('public', \&on_public);
    $conn->add_handler('msg',    \&on_msg);

    print ("Completed\n");
    print ("    Installing global handlers...");
    $conn->add_global_handler([ 251,252,253,254,302,255 ], \&on_init);
    $conn->add_global_handler(376, \&on_connect);
    $conn->add_global_handler(433, \&on_nick_taken);

    print ("Completed\n");

    # start irc connection
    $irc->start;

}
# end irc subroutine

Reply via email to