#! /usr/local/bin/srinterpreter probe = Scriptroute::Udp.new(12) probe.ip_dst = ARGV[0] unreach = false puts "Traceroute to #{ARGV[0]} (#{probe.ip_dst})" catch(:unreachable) do ( 1..64 ).each { |ttl| ( 1..3 ).each { |rep| probe.ip_ttl = ttl packets = Scriptroute::send_train([ Struct::DelayedPacket.new(0,probe) ]) response = (packets[0].response) ? packets[0].response.packet : nil if(response) then puts '%d %s %5.3f ms' % [ ttl, response.ip_src, packets[0].rtt * 1000.0 ] if(response.is_a?(Scriptroute::Icmp)) then unreach = true if(response.icmp_type == Scriptroute::Icmp::ICMP_UNREACH) end else puts ttl.to_s + ' *' end $stdout.flush } throw :unreachable if(unreach) } end