Je suis dans un environnement avec beaucoup d'ordinateurs qui n'ont pas été correctement inventoriés. Fondamentalement, personne ne sait quelle adresse IP va avec quelle adresse mac et quel nom d'hôte. Donc, j'ai écrit ce qui suit:Inverser DNS dans Ruby?
# 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}\n")
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 inverse.
Exemple de sortie que je reçois est la suivante:
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
puis-je obtenir le DNS inverse correct si qui montre que ma machine est de voir le serveur DNS. J'ai essayé Socket.gethostbyname
, gethostbyaddr
, mais cela ne fonctionne pas.
Tout guidage sera très apprécié.
En fait, cela ne fait pas de recherche inversée. Vous devez faire le 7ème paramètre 'true':' Socket.getaddrinfo (code_intéressant, 0, Socket :: AF_UNSPEC, Socket :: SOCK_STREAM, nil, Socket :: AI_CANONNAME, true) ' – akostadinov