रूबी में DNS रिवर्स?

वोट
17

मुझे लगता है कि ठीक से inventoried नहीं किया गया है कंप्यूटर के एक बहुत कुछ के साथ एक वातावरण में हूँ। असल में, कोई नहीं जानता जो आईपी के साथ जो मैक पते और जो होस्ट नाम चला जाता है। तो मैं निम्नलिखित लिखा है:

# 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

सब कुछ यह छोड़कर काम करता है एक रिवर्स DNS नहीं मिल रहा है।

नमूना उत्पादन है कि मैं हो रही है यह है:

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

अगर मैं ऐसा nslookup 10.26.6.12तो मैं सही रिवर्स DNS मिल इतना है कि पता चलता है कि मेरी मशीन DNS सर्वर देख रहा है।

मैं कोशिश की है Socket.gethostbyname, gethostbyaddrहै, लेकिन यह काम नहीं करता।

किसी भी मार्गदर्शन की बहुत सराहना की जाएगी।

06/08/2008 को 02:07
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
24

आज मैं भी रिवर्स DNS लुकअप जरूरत है और मुझे बहुत ही सरल मानक समाधान मिल गया है:

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

यह समय समाप्त जो किसी न किसी तरह के मामलों में मदद करता है का उपयोग करता है लगता है।

04/04/2011 को 22:52
का स्रोत उपयोगकर्ता

वोट
8

मैं बाहर की जाँच करेगा getaddrinfo। आप लाइन की जगह हैं:

host_name = Socket.gethostbyname(current_ip)

साथ में:

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

getaddrinfoसमारोह सरणियों की एक सरणी देता है। आपको कम से इसके बारे में अधिक पढ़ सकते हैं:

रूबी सॉकेट डॉक्स

06/08/2008 को 02:56
का स्रोत उपयोगकर्ता

वोट
2

यह भी काम करता है:

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

मुझे यकीन है कि क्यों नहीं कर रहा हूँ gethostbyaddrभी काम नहीं किया।

06/08/2008 को 13:04
का स्रोत उपयोगकर्ता

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