From Kiril, 2 Years ago, written in JavaScript.
  1. /**
  2.  * DNS Blacklist support
  3.  *
  4.  * Check the client against a blacklist before connection to an IRC server
  5.  */
  6.  
  7. var dns = require('dns'),
  8.     kiwiModules = require('../server/modules');
  9.  
  10.  
  11. // The available DNS zones to check against
  12. //var bl_zones = {
  13.     //dronebl: '.dnsbl.dronebl.org'
  14. //};
  15.  
  16. var bl_zones = [
  17.        
  18.     '.dnsbl.dronebl.org',
  19.         '.tor.dnsbl.sectoor.de',
  20.         '.tor.kewlio.net.uk',
  21.         '.socks.dnsbl.sorbs.net',
  22.         '.dnsbl.dronebl.org',
  23.         '.rbl.efnet.org',
  24.         '.rbl.efnetrbl.org'
  25.  
  26. ];
  27.  
  28. // The DNS zone we should use
  29. //var current_bl = 'dronebl';
  30.  
  31. var module = new kiwiModules.Module('DNSBL');
  32.  
  33. module.on('irc connecting', function (event, event_data) {
  34.     event.wait = true;
  35.  
  36.     var client_addr = event_data.connection.state.client.websocket.meta.real_address;
  37.  
  38.     //isBlacklisted(client_addr, function(is_blocked) {
  39.         //if (is_blocked) {
  40.             //var err = new Error('DNSBL blocked (' + client_addr + ')');
  41.             //err.code = 'Blacklisted';
  42.  
  43.             //event_data.connection.emit('error', err);
  44.             //event.preventDefault();
  45.             //event.callback();
  46.  
  47.         //} else {
  48.             //event.callback();
  49.         //}
  50.     //});
  51.        
  52.         //lets walk through our array - @ivo
  53.         for(i = 0; i < bl_zones.length; i++) {
  54.        
  55.                 var host_lookup = reverseIp(client_addr) + bl_zones[i];
  56.                
  57.                 checkBlacklist(bl_zones[i], host_lookup, function(state, ip, blacklist) {
  58.                        
  59.                         if(state) {
  60.                                
  61.                                 var err = new Error('DNSBL blocked (' + client_addr + ') on (' + blacklist + '');
  62.                                 err.code = 'Blacklisted';
  63.  
  64.                                 event_data.connection.emit('error', err);
  65.                                 event.preventDefault();
  66.                                 event.callback();
  67.                                
  68.                         } else event.callback();
  69.                        
  70.                 });
  71.                
  72.         }
  73.  
  74. });
  75.  
  76. //we will check foreach host with that - @ivo
  77. function checkBlacklist(blacklist, ip, callback) {
  78.        
  79.         dns.resolve4(ip, function(err, domain) {
  80.                
  81.                 if (err) {
  82.                        
  83.                         callback(false, ip, blacklist);
  84.                        
  85.                 } else {
  86.                        
  87.                         callback(true, ip, blacklist);
  88.                        
  89.                 }
  90.                
  91.         });
  92.        
  93. }
  94.  
  95. // The actual checking against the DNS blacklist
  96. //function isBlacklisted(ip, callback) {
  97.   //  var host_lookup = reverseIp(ip) + bl_zones[current_bl];
  98.  
  99.     //dns.resolve4(host_lookup, function(err, domain) {
  100.         //if (err) {
  101.             // Not blacklisted
  102.             //callback(false);
  103.         //} else {
  104.             // It is blacklisted
  105.             //callback(true);
  106.         //}
  107.     //});
  108. //}
  109.  
  110.  
  111. function reverseIp(ip) {
  112.     return ip.split('.').reverse().join('.');
  113. }
captcha