Net::DNSBL::Utilities - functions for DNSBL daemons
use Net::DNSBL::Utilities qw( s_response not_found write_stats bystat statinit cntinit list2hash open_udpNB DO doINCLUDE list2NetAddr matchNetAddr list_countries setAUTH setRA A1271 A1272 A1273 A1274 A1275 A1276 A1277 ); s_response($mp,$resp,$id,$qdcount,$ancount,$nscount,$arcount); not_found($put,$name,$type,$id,$mp,$srp); write_stats($sfile,$cp,$sinit,$csize,$cache); $rv = bystat($cp); $timestamp = statinit($Sfile,$cp); cntinit($DNSBL,$cp); list2hash(\@list,$cp,$val); $sock = open_udpNB(); $rv = DO($file,$nowarnings) $rv = doINCLUDE($file,$nowarnings); $rv=list2NetAddr(\@inlist,\@NAobject); $rv = matchNetAddr($ip,\@NAobject); ($countries,$code3s,$names) = list_countries; setAUTH(true/false); setRA(true/false); $netaddr = A1271; $netaddr = A1272; $netaddr = A1273; $netaddr = A1274; $netaddr = A1275; $netaddr = A1276; $netaddr = A1277;
Net::DNSBL::Utilities contains functions used to build DNSBL emulator daemons.
s_response($mp,$resp,$id,$qdcount,$ancount,$nscount,$arcount);
Put a short response into the message buffer pointed to by $mp by sticking a new header on the EXISTING received query.
input: msg pointer, id of question, qd, an, ns, ar counts returns: nada
not_found($put,$name,$type,$id,$mp,$srp);
Put a new 'not found' response in the buffer pointed to by $mp.
input: put, name, type, id, message buffer pointer, SOA record pointer returns: nothing
write_stats($sfile,$cp,$sinit,$csize,$cache);
Write out the contents of the accumulated statistics buffer to the STATs file.
input: statistics file path, pointer to count hash, initial timestamp line text cache flag/max size current cache size returns: nothing
$rv = bystat($cp);
Return sort value +-1 or 0 for stat sort
input: $a,$b sort values pointer to count hash returns: sort decision value
$timestamp = statinit($Sfile,$cp);
Initialize the contents of the statistics hash with the file contents of $Sfile, if $Sfile exists and there are corresponding entries in the statistics hash. i.e. the statistics hash keys must first be initialized with the DNSBL (or LABEL) names.
input: statistics file path, pointer to count hash returns: timestamp line for file or undef on failure
cntinit($DNSBL,$cp);
Initialize the statistics count hash with DNSBL keys and set the counts to zero.
For compatibility with other applications, LABEL names other than the DNSBL's must NOT contain '.' Only the keys in the DNSBL hash that contain '.'s are added to the count hash.
The count hash is first emptied if it is not null to begin with.
input: pointer to DNSBL hash, pointer to counts hash returns: nothing
list2hash(\@list,$cp,$val);
Add a list of names as keys to the statistics count hash and set the hash value to $val or zero if $val is not present.
For compatibility with other applications, the labels in "list" must not contain the character '.'
input: pointer to list of labels, pointer to counts hash, value [optional] returns: nothing
$rv = DO($file,$nowarnings);
This is a fancy 'do file'. It first checks that the file exists and is readable, then does a 'do file' to pull the variables and subroutines into the current name space.
See the documentation File::SafeDO
input: file/path/name returns: last value in file or undef on error prints warning
$sock = open_udpNB();
Open and return a non-blocking UDP socket object
input: none returns: pointer to socket object or undef on failure
$rv=list2NetAddr(\@inlist,\@NAobject);
Build of NetAddr object structure from a list of IPv4 addresses or address ranges. This object is passed to matchNetAddr to check if a given IP address is contained in the list.
input: array reference pointer to a list of addresses i.e. 11.22.33.44 11.22.33.0/24 11.22.33.0/255.255.255.0 11.22.33.20-11.22.33.46 11.22.33.20 - 11.22.33.46 output: Number of objects created or undef on error
The NAobject array is filled with NetAddr::IP::Lite object references.
$rv = matchNetAddr($ip,\@NAobject);
Check if an IP address appears in a list of NetAddr objects.
input: dot quad IP address, reference to NetAddr objects output: true if match else false
($countries,$code3s,$names) = list_countries;
The function returns the list of 2 character, 3 character and country code names from the Geo::IP::PurePerl module if it is installed.
input: none returns: \@countries,\@code3s,\@names blessed into callers namespace
NOTE: this process is very inefficient and should not be called in a repetitive fashion.
If Geo::IP::PurePerl is not installed, the function returns and empty array and sets $@;
setAUTH(true/false);
Set the Authoratitive Answer bit true or false for all replys
input: true/false returns: nothing
setRA(true/false);
Set the Recursion Allowed bit true or false for all replys
$netaddr = A127x
Functions A1271, A1272, A1273, etc..., return the packed network address for 127.0.0.1, 127.0.0.2, etc.... respectively
Net::DNS::Codes Net::DNS::ToolKit
s_response not_found write_stats bystat statinit cntinit list2hash open_udpNB DO list2NetAddr matchNetAddr list_countries setAUTH setRA A1271 A1272 A1273 A1274 A1275 A1276 A1277
Michael Robinton, michael@bizsystems.com
Copyright 2003 - 2007, Michael Robinton & BizSystems This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Net::DNS::Codes, Net::DNS::ToolKit, Mail::SpamCannibal
To install Net::DNSBL::MultiDaemon, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::DNSBL::MultiDaemon
CPAN shell
perl -MCPAN -e shell install Net::DNSBL::MultiDaemon
For more information on module installation, please visit the detailed CPAN module installation guide.