Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 garg
garg

Reverse DNS în Ruby?

Sunt într-un mediu cu multe computere care nu au fost corect inventariate. Practic, nimeni nu știe care IP merge cu care adresa mac și ce nume de gazdă. Așa că am scris următoarele:

# 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

Totul funcționează, cu excepția faptului că nu găsește un DNS Reverse.

Eșantionul de ieșire pe care îl primesc este următorul:

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

Dacă fac nslookup 10.26.6.12 atunci primesc DNS invers corect corect care arată că aparatul meu vede serverul DNS.

Am încercat Socket.gethostbyname , gethostbyaddr , dar nu funcționează.

Orice îndrumare va fi mult apreciată.

21 2008-08-06T01:07:52+00:00 3
Programare
ruby
dns
sockets
nslookup
Comentarii la întrebare (0)
NilObject
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#3012

Aș verifica getaddrinfo . Dacă înlocuiți linia:

host_name = Socket.gethostbyname(current_ip)

cu:

host_name = Socket.getaddrinfo(current_ip, 0, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)[0][1]

Funcția getaddrinfo returnează o matrice de matrice. Puteți citi mai multe despre el la:

Documente Google Ruby Socket

0
0
Comentarii (0)
garg
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#3306

Acest lucru funcționează și:

host_name = Socket.getaddrinfo(current_ip,nil)
append_to_file("#{host_name[0][2]} - #{current_ip} - #{mac_addr}\n")

Nu sunt sigur de ce gethostbyaddr nu a funcționat de asemenea.

0
0
Comentarii (0)
gertas
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#5544777

Astăzi am avut nevoie de o căutare inversă DNS și am găsit soluția standard foarte simplă:

require 'resolv'
host_name = Resolv.getname(ip_address_here)

Se pare că folosește timpul de expirare care ajută în cazuri grave.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire