]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/nslookup.rb
Fri Jul 29 13:07:56 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / nslookup.rb
index 92da1ba779e2f4250d219cc5155a68d503278b6e..160fee85f7aa133ce1d0673505e14ce8dccde2bb 100644 (file)
@@ -1,56 +1,43 @@
 class DnsPlugin < Plugin
-  begin
-    require 'resolv-replace'
-    def gethostname(address)
-      Resolv.getname(address)
-    end
-    def getaddresses(name)
-      Resolv.getaddresses(name)
-    end
-  rescue LoadError
-    def gethostname(address)
-      Socket.gethostbyname(address).first
-    end
-    def getaddresses(name)
-      a = Socket.gethostbyname(name)
-      list = Socket.getaddrinfo(a[0], 'http')
-      addresses = Array.new
-      list.each {|line|
-       addresses << line[3]
-      }
-      addresses
-    end
+  require 'resolv'
+  def gethostname(address)
+    Resolv.getname(address)
+  end
+  def getaddresses(name)
+    Resolv.getaddresses(name)
   end
 
   def help(plugin, topic="")
-    "nslookup|dns <hostname|ip> => show local resolution results for hostname or ip address"
+    "dns <hostname|ip> => show local resolution results for hostname or ip address"
   end
-  def privmsg(m)
-    unless(m.params)
-      m.reply "incorrect usage: " + help(m.plugin)
-      return
+  
+  def name_to_ip(m, params)
+    Thread.new do
+      begin
+        a = getaddresses(params[:host])
+        if a.length > 0
+          m.reply m.params + ": " + a.join(", ")
+        else
+          m.reply "#{params[:host]}: not found"
+        end
+      rescue StandardError => err
+        m.reply "#{params[:host]}: not found"
+      end
     end
+  end
+  
+  def ip_to_name(m, params)
     Thread.new do
-      if(m.params =~ /^\d+\.\d+\.\d+\.\d+$/)
        begin
-         a = gethostname(m.params)
+         a = gethostname(params[:ip])
          m.reply m.params + ": " + a if a
        rescue StandardError => err
-         m.reply "#{m.params}: not found"
-       end
-      elsif(m.params =~ /^\S+$/)
-       begin
-         a = getaddresses(m.params)
-         m.reply m.params + ": " + a.join(", ")
-       rescue StandardError => err
-         m.reply "#{m.params}: not found"
+         m.reply "#{params[:ip]}: not found (does not reverse resolve)"
        end
-      else
-       m.reply "incorrect usage: " + help(m.plugin)
-      end
-    end
+     end
   end
 end
 plugin = DnsPlugin.new
-plugin.register("nslookup")
-plugin.register("dns")
+plugin.map 'dns :ip', :action => 'ip_to_name', 
+                      :requirements => {:ip => /^\d+\.\d+\.\d+\.\d+$/}
+plugin.map 'dns :host', :action => 'name_to_ip'