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é.