Ruby DNS Ters?

oy
17

Ben düzgün envantere henüz bilgisayarların bir sürü bir ortamda değilim. Temel olarak, hiç kimse bir IP hangi mac adresi ve hangi hostname hangisiyle gittiğini bilir. Bu yüzden aşağıdaki yazdı:

# 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

Her şey bir Ters DNS bulamazsa bunun dışında çalışır.

Ben alıyorum Örnek çıktı şudur:

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

Ben yaparsam nslookup 10.26.6.12o benim makine DNS sunucusunu görmek olduğunu göstermektedir yüzden doğru ters DNS olsun.

Ben denedim Socket.gethostbyname, gethostbyaddrama çalışmıyor.

Herhangi bir rehberlik çok takdir edilecektir.

Oluştur 06/08/2008 saat 02:07
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
24

Bugün de ters DNS araması gerekli ve ben çok basit standart çözüm bulduk:

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

O kaba durumlarda yardımcı olur zaman aşımı kullanır gibi görünüyor.

Cevap 04/04/2011 saat 22:52
kaynak kullanıcı

oy
8

Ben kontrol ederim getaddrinfo. Eğer çizgiyi değiştirin:

host_name = Socket.gethostbyname(current_ip)

ile:

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

getaddrinfoFonksiyon diziler içeren bir dizi döner. Bu konuda daha fazla okuyabilir:

Yakut Soket Dokümanlar

Cevap 06/08/2008 saat 02:56
kaynak kullanıcı

oy
2

Bu aynı zamanda çalışır:

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

Neden emin değilim gethostbyaddrde işe yaramadı.

Cevap 06/08/2008 saat 13:04
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more