DNS inverse dans Ruby ?

Je suis dans un environnement avec de nombreux ordinateurs qui n'ont pas été correctement inventorié. En gros, personne ne sait quelle adresse IP va avec quelle adresse mac et quel nom d'hôte. J'ai donc écrit ceci :

# This script goes down the entire IP range and attempts to
# retrieve the Hostname and mac address and outputs them
# into a file. Yay!

require 'socket'

TwoOctets = '10.26'

def computer_exists?(computerip)
 system('ping -c 1 -W 1 #{computerip}')
end

def append_to_file(line)
 file   = File.open('output.txt', 'a')
 file.puts(line)
 file.close
end


def getInfo(current_ip)
 begin
   if computer_exists?(current_ip)
     arp_output = `arp -v #{current_ip}`
     mac_addr = arp_output.to_s.match(/..:..:..:..:..:../)
     host_name = Socket.gethostbyname(current_ip)
     append_to_file('#{host_name[0]} - #{current_ip} - #{mac_addr}
')
   end
 rescue SocketError => mySocketError
   append_to_file('unknown - #{current_ip} - #{mac_addr}')
 end
end


(6..8).each do |i|
 case i
   when 6
     for j in (1..190)
       current_ip = '#{TwoOctets}.#{i}.#{j}'
       getInfo(current_ip)
     end
   when 7
     for j in (1..255)
       current_ip = '#{TwoOctets}.#{i}.#{j}'
       getInfo(current_ip)
     end
   when 8
     for j in (1..52)
       current_ip = '#{TwoOctets}.#{i}.#{j}'
       getInfo(current_ip)
     end
 end
end

Tout fonctionne sauf qu'il ne trouve pas de DNS inversé.

Exemple de sortie que j'obtiens :

10.26.6.12 - 10.26.6.12 - 00:11:11:9B:13:9F
10.26.6.17 - 10.26.6.17 - 08:00:69:9A:97:C3
10.26.6.18 - 10.26.6.18 - 08:00:69:93:2C:E2

Si je fais nslookup 10.26.6.12 alors j'obtiens le bon DNS inversé donc cela montre que ma machine voit le serveur DNS.

J'ai essayé Socket.gethostbyname, gethostbyaddr, mais ça ne marche pas.

Tout conseil sera très apprécié.

请先 登录 后评论