Glen Holcomb
9/18/2008 8:54:00 PM
[Note: parts of this message were removed to make it a legal post.]
On Thu, Sep 18, 2008 at 2:09 PM, Glen Holcomb <damnbigman@gmail.com> wrote:
> Is there a reliable "Ruby" method for pinging/checking whether hosts are
> up?
>
> I have been using Net::PingExternal as I'm pinging Windows machines and not
> all of them have port 7 open. However when I try to check 900 or so
> machines I get a SocketError after a while. It complains that there is no
> such service echo/tcp. When I try similar code in irb I get the socket
> error after a few minutes then if I try the loop again I get the socket
> error immediately.
>
> I've tried a generic ICMP packet but that doesn't work under Windows with
> the standard Ruby build and I don't have the tools/time to build it my self
> under Windows.
>
> --
> "Hey brother Christian with your high and mighty errand, Your actions speak
> so loud, I can't hear a word you're saying."
>
> -Greg Graffin (Bad Religion)
>
Here is the full method if anyone wants more context:
# Lets find MAC addresses for the machines in the list
def find_macs
# This technique will only give MAC addresses for the machines on our
subnet.
# However since those are the only ones we can wake it doesn't really
matter.
# It is nasty slow and a better way should be found some day.
DB[:computers].each do |computer|
begin
Net::PingExternal.new(computer[:name]).ping
rescue SocketError => exception
next
end
end
arp_table = `arp -a`.split("\n")[2..-1]
arp_table.each do |address|
full_name = Socket.gethostbyname(address.split(' ')[0])
comp = Computer.find :name => full_name.split('.')[0]
comp.mac = address.split(' ')[1].gsub!('-', ':')
comp.save
end
close()
end # find_macs
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)