2 * DNS Blacklist support
4 * Check the client against a blacklist before connection to an IRC server
7 var dns
= require('dns'),
8 kiwiModules
= require('../server/modules');
11 // The available DNS zones to check against
13 dronebl
: '.dnsbl.dronebl.org'
16 // The DNS zone we should use
17 var current_bl
= 'dronebl';
20 var module
= new kiwiModules
.Module('DNSBL');
22 module
.on('irc connecting', function (event
, event_data
) {
25 var client_addr
= event_data
.connection
.state
.client
.websocket
.handshake
.real_address
;
27 isBlacklisted(client_addr
, function(is_blocked
) {
29 var err
= new Error('DNSBL blocked (' + client_addr
+ ')');
30 err
.code
= 'Blacklisted';
32 event_data
.connection
.emit('error', err
);
33 event
.preventDefault();
44 // The actual checking against the DNS blacklist
45 function isBlacklisted(ip
, callback
) {
46 var host_lookup
= reverseIp(ip
) + bl_zones
[current_bl
];
48 dns
.resolve4(host_lookup
, function(err
, domain
) {
60 function reverseIp(ip
) {
61 return ip
.split('.').reverse().join('.');