रूबी में रिवर्स डीएनएस?

मैं ऐसे कई वातावरण वाले वातावरण में हूं जो नहीं हैं ठीक से आविष्कार किया गया। असल में, कोई भी नहीं जानता कि किस आईपी के साथ जाता है मैक पता और कौन सा मेजबाननाम। तो मैंने निम्नलिखित लिखा:

# 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

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

मुझे जो नमूना उत्पादन मिल रहा है वह यह है:

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 आज़माया है, लेकिन यह काम नहीं करता है।

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

0
जोड़ा संपादित
विचारों: 2

3 उत्तर

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

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

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

0
जोड़ा

मैं 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 फ़ंक्शन सरणी की सरणी देता है। आप इसके बारे में अधिक पढ़ सकते हैं:

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

0
जोड़ा
वास्तव में यह रिवर्स लुकअप नहीं कर रहा है। आपको 7 वां पैरामीटर <�कोड> सच्चा : सॉकेट.getaddrinfo (दिलचस्प_आईपी, 0, सॉकेट :: AF_UNSPEC, सॉकेट :: SOCK_STREAM, शून्य, सॉकेट :: AI_CANONNAME, सत्य) बनाने की आवश्यकता है
जोड़ा लेखक akostadinov, स्रोत

आज मुझे रिवर्स डीएनएस लुकअप की भी आवश्यकता है और मुझे बहुत ही सरल मानक समाधान मिला है:

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

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

0
जोड़ा