Tôi đang ở trong một môi trường có nhiều máy tính chưa được kiểm kê đúng cách . Về cơ bản, không ai biết IP nào đi kèm với địa chỉ mac và tên máy chủ nào. Vì vậy, tôi đã viết như sau:Đảo ngược DNS trong Ruby?
# 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
Mọi thứ hoạt động ngoại trừ nó không tìm thấy DNS đảo ngược.
Mẫu đầu ra mà tôi nhận được là:
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
Nếu tôi làm nslookup 10.26.6.12
sau đó tôi nhận được DNS ngược chính xác để cho thấy rằng máy tính của tôi đang chứng kiến các máy chủ DNS.
Tôi đã thử Socket.gethostbyname
, gethostbyaddr
, nhưng nó không hoạt động.
Mọi hướng dẫn sẽ được đánh giá cao.
Trong thực tế, điều này không làm tra cứu ngược lại. Bạn cần phải thực hiện tham số thứ 7 'true':' Socket.getaddrinfo (thú_chọn, 0, Socket :: AF_UNSPEC, Socket :: SOCK_STREAM, nil, Socket :: AI_CANONNAME, true) ' – akostadinov