NAME
POE::Component::IRC::Plugin::QueryDNS - A POE::Component::IRC plugin for IRC based DNS queries
SYNOPSIS
use strict;
use warnings;
use POE qw(Component::IRC Component::IRC::Plugin::QueryDNS);
my $nickname = 'qdns' . $$;
my $ircname = 'QueryDNS Bot';
my $ircserver = $ENV{IRCSERVER} || 'irc.bleh.net';
my $port = 6667;
my $channel = '#IRC.pm';
my $irc = POE::Component::IRC->spawn(
nick => $nickname,
server => $ircserver,
port => $port,
ircname => $ircname,
debug => 0,
plugin_debug => 1,
options => { trace => 0 },
) or die "Oh noooo! $!";
POE::Session->create(
package_states => [
'main' => [ qw(_start irc_001) ],
],
);
$poe_kernel->run();
exit 0;
sub _start {
# Create and load our QueryDNS plugin
$irc->plugin_add( 'QueryDNS' =>
POE::Component::IRC::Plugin::QueryDNS->new() );
$irc->yield( register => 'all' );
$irc->yield( connect => { } );
undef;
}
sub irc_001 {
$irc->yield( join => $channel );
undef;
}
DESCRIPTION
POE::Component::IRC::Plugin::QueryDNS is a POE::Component::IRC plugin that provides DNS query facilities to the channels it occupies and via private messaging.
It uses POE::Component::Client::DNS to do non-blocking DNS queries. By default the plugin attempts to use POE::Component::IRC's internal PoCo-Client-DNS resolver object, but will spawn its own copy. You can supply your own resolver object via the constructor.
CONSTRUCTOR
new
-
Creates a new plugin object. Takes some optional parameter:
'command', define the command that will trigger DNS queries, default is 'dns'; 'privmsg', set to a true value to specify that the bot should reply with PRIVMSG instead of NOTICE to privmsgs that it receives. 'resolver', specify a POE::Component::Client::DNS object that the plugin should use, the default is to try and use POE::Component::IRC's resolver;
IRC USAGE
The bot replies to requests in the following form, when addressed:
dns <query> <optional_type>
Of course, if you changed the command
in the constructor it will be something different to dns
.
query
maybe a hostname, a zone, an IP address, anything that you want to query DNS for.
type
can be A
, PTR
, CNAME
, NS
, MX
, TXT
, AAAA
, SRV
or SOA
. If it isn't specified the default is A
unless the query
is an IP address in which case the default is PTR
.
Some examples:
# No type, defaults to 'A'
< you> bot: dns www.perl.org
< bot> www.perl.org [ CNAME=x3.develooper.com. A=63.251.223.163 ]
# No type, defaults to 'PTR' because the query is an IP address
< you> bot: dns 63.251.223.163
< bot> 63.251.223.163 [ PTR=x3.develooper.com. ]
# Specify a type of 'MX'
< you> bot: dns perl.org mx
< bot> perl.org [ MX=5 mx.develooper.com. ]
# Specify a type of 'TXT'
< you> bot: dns perl.org txt
< bot> No answers for perl.org
# Specify a type of 'SOA'
< you> bot: dns perl.org soa
< bot> perl.org [ SOA=ns1.us.bitnames.com:dnsoper.bitnames.com:2008011304:5400:5400:604800:300 ]
AUTHOR
Chris BinGOs
Williams <chris@bingosnet.co.uk>
LICENSE
Copyright © Chris Williams.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.