hi.
i wrote a little script . (Mass IP Pinger)
But I got an error :-s
Error :
···
---
/usr/lib/ruby/1.8/timeout.rb:60:in `timeout': execution expired from
/usr/lib/ruby/1.8/ping.rb:46:in `pingecho'
from a.rb:27
from a.rb:26:in `each'
from a.rb:26
---
and my script :
----
#!/usr/bin/env ruby
#Mass IP Pinger By MagicCoder (MagicC0d3r@gmail.com)
# www.magiccoder.ir
#-f = File
#-t = Time Out #Defualt = 0.5
#-p = Port #Defualt = 80
#
#sample : ruby magic.rb -f ip.txt -t 1 -p 22
#sample : ruby magic.rb -f ip.txt
require 'ping'
time_out = 0.5 #Defualt
port = 80 #Defualt
length = 0
while (length < ARGV.length)
file = ARGV[length+1] if ARGV[length] == '-f'
time_out = ARGV[length+1] if ARGV[length] == '-t'
port = ARGV[length+1] if ARGV[length] == '-p'
length += 1
end
if (file != nil)
File.open(file).each do |line|
result = Ping.pingecho(line.scan(/\d+.\d+.\d+.\d+/).to_s,
time_out.to_f , port.to_i)
if(result == true )
puts line.scan(/\d+.\d+.\d+.\d+/).to_s+"\t\t\tIs Up"
else
puts line.scan(/\d+.\d+.\d+.\d+/).to_s+"\t\t\tIs Down"
end
end
puts "Finish ..."
else
puts "\n\nMass IP Pinger By MagicCoder
(MagicC0d3r@gmail.com)\n\t\twww.magiccoder.ir"
puts "\n-f = File\n-t = Time Out\t#Defualt = 0.5\n-p =
Port\t#Defualt = 80"
puts "\nsample : ruby magic.rb -f ip.txt -t 1 -p 22"
puts "sample : ruby magic.rb -f ip.txt\n\n"
end
----
sh$ ruby magic.rb -f list.txt -t 0.5 -p 22
for sample Attached list
Thank you .
Attachments:
http://www.ruby-forum.com/attachment/4722/list.txt
--
Posted via http://www.ruby-forum.com/.
Hmmm, what platform are you running it from? Just ran in from Mac OS 10.5.8
with Ruby 1.8.7 and it ran fine (ruby 1.8.7 (2009-06-12 patchlevel 174)
[i686-darwin9.7.0]).
Maybe a tcp stack implementation difference between platforms? I did notice
you had some addresses that have colons in them (e.g. 123456:201.92.93).
Still handled fine on my machine but maybe not on others. Anyone else?
···
On Wed, May 12, 2010 at 8:49 AM, Sajjad Po <magicc0d3r@gmail.com> wrote:
hi.
i wrote a little script . (Mass IP Pinger)
But I got an error :-s
Error :
---
/usr/lib/ruby/1.8/timeout.rb:60:in `timeout': execution expired from
/usr/lib/ruby/1.8/ping.rb:46:in `pingecho'
from a.rb:27
from a.rb:26:in `each'
from a.rb:26
---
and my script :
----
#!/usr/bin/env ruby
#Mass IP Pinger By MagicCoder (MagicC0d3r@gmail.com)
# www.magiccoder.ir
#-f = File
#-t = Time Out #Defualt = 0.5
#-p = Port #Defualt = 80
#
#sample : ruby magic.rb -f ip.txt -t 1 -p 22
#sample : ruby magic.rb -f ip.txt
require 'ping'
time_out = 0.5 #Defualt
port = 80 #Defualt
length = 0
while (length < ARGV.length)
file = ARGV[length+1] if ARGV[length] == '-f'
time_out = ARGV[length+1] if ARGV[length] == '-t'
port = ARGV[length+1] if ARGV[length] == '-p'
length += 1
end
if (file != nil)
File.open(file).each do |line|
result = Ping.pingecho(line.scan(/\d+.\d+.\d+.\d+/).to_s,
time_out.to_f , port.to_i)
if(result == true )
puts line.scan(/\d+.\d+.\d+.\d+/).to_s+"\t\t\tIs Up"
else
puts line.scan(/\d+.\d+.\d+.\d+/).to_s+"\t\t\tIs Down"
end
end
puts "Finish ..."
else
puts "\n\nMass IP Pinger By MagicCoder
(MagicC0d3r@gmail.com)\n\t\twww.magiccoder.ir"
puts "\n-f = File\n-t = Time Out\t#Defualt = 0.5\n-p =
Port\t#Defualt = 80"
puts "\nsample : ruby magic.rb -f ip.txt -t 1 -p 22"
puts "sample : ruby magic.rb -f ip.txt\n\n"
end
----
sh$ ruby magic.rb -f list.txt -t 0.5 -p 22
for sample Attached list
Thank you .
Attachments:
http://www.ruby-forum.com/attachment/4722/list.txt
--
Posted via http://www.ruby-forum.com/\.
Sajjad Po wrote:
/usr/lib/ruby/1.8/timeout.rb:60:in `timeout': execution expired from
/usr/lib/ruby/1.8/ping.rb:46:in `pingecho'
from a.rb:27
from a.rb:26:in `each'
from a.rb:26
What if you just run it from irb? I get the following under Linux:
$ irb --simple-prompt
require 'ping'
=> true
Ping.pingecho('1.1.1.1', 2, 80)
=> false
RUBY_VERSION
=> "1.8.7"
RUBY_PATCHLEVEL
=> 174
Looking at the source code for ping.rb around line 46:
begin
timeout(timeout) do
s = TCPSocket.new(host, service)
s.close
end
rescue Errno::ECONNREFUSED
return true
rescue Timeout::Error, StandardError
return false
end
I don't understand why the exception isn't being caught. You could try
adding:
rescue Exception => e
$stderr.puts "Actual exception: #{e.class.inspect}"
just before the 'end', see if that shows anything.
Incidentally, if you're trying to ping lots of hosts, 'multiping' may be
a better tool. It can ping them all in parallel, and you can run it from
ruby using IO.popen or %x{..} to collect the results.
···
--
Posted via http://www.ruby-forum.com/\.
Sven Schott wrote:
Hmmm, what platform are you running it from? Just ran in from Mac OS
10.5.8
with Ruby 1.8.7 and it ran fine (ruby 1.8.7 (2009-06-12 patchlevel 174)
[i686-darwin9.7.0]).
Maybe a tcp stack implementation difference between platforms? I did
notice
you had some addresses that have colons in them (e.g. 123456:201.92.93).
Still handled fine on my machine but maybe not on others. Anyone else?
My Platform Linux and FreeBSD.
ruby 1.8.7 (2010-01-10 patchlevel 249).
···
--
Posted via http://www.ruby-forum.com/\.