রুবি রিস DNS?

আমি এমন পরিবেশে আছি যেগুলি অনেক কম্পিউটারের সাথে নেই সঠিকভাবে আবিষ্কার করা মূলত, কেউ জানে না যে কোনটি আইপি দিয়ে যায় ম্যাক ঠিকানা এবং কোন হোস্টনাম তাই আমি নিম্নলিখিত লেখা:

# 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 , কিন্তু এটি কাজ করে না।

কোন নির্দেশিকা অনেক প্রশংসা করা হবে।

0

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 ম প্যারামিটারটি true তৈরি করতে হবে: Socket.getaddrinfo (interesting_ip, 0, সকেট :: AF_UNSPEC, সকেট :: SOCK_STREAM, নিল, সকেট :: AI_CANONNAME, সত্য)
যোগ লেখক akostadinov, উৎস

আজ আমিও বিপরীত DNS সন্ধানের প্রয়োজন এবং আমি খুব সাধারণ মান সমাধান খুঁজে পেয়েছি:

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

মনে হচ্ছে এটি সময়সীমার ব্যবহার করে যা রুক্ষ ক্ষেত্রে সহায়তা করে।

0
যোগ