From Fedora Project Wiki

< FWN‎ | Beats

Revision as of 12:34, 17 March 2011 by Pcalarco (talk | contribs)

LATAM Fedora!

LATAM Fedora is a regular column of Spanish language contributions around open source software. It is our first expansion into incorporating foreign language content into FWN.

This week's contribution is from Guillermo Gómez, a primer on Ruby PING. Enjoy!

Ruby Ping

En paralelo con el tutorial de Ruby, que pronto verá su segundo capítulo, vamos en paralelo para publicaciones más frecuentes como FWN a escribir acerca del uso del lenguaje en otras tareas específicas, hoy nos ocupa algunas formas de hacer "ping" con Ruby.

Ping: librería estandar

Ping.pingecho utiliza TCP echo no ICMP echo para determinar si un máquina remota esta "viva". En realidad puede utilizar "otros" puertos, no necesariamente echo tcp/7.

1 irb(main):013:0> require 'ping' 2 => true 3 irb(main):012:0> Ping.pingecho('gomix.fedora-ve.org', 10) 4 => true 5 irb(main):016:0> Ping.pingecho('gomix.fedora-ve.org', 10, 'http' ) 6 => true

NOTA: si existe un paquete de rechazo ICMP al puerto especificado, se considera que la máquina está viva, es decir, "respondió con ICMP", así que no asuma que el puerto está abierto por el hecho de que Ping.pingecho le devuelva true.

net-ping

  1. gem install net-ping

Fase común genérica para los siguientes ejemplos.

1 irb(main):001:0> require 'rubygems' 2 => true 3 irb(main):005:0> require 'net/ping' 4 => true

Ping UDP y TCP.

1 irb(main):011:0> host = "gomix.fedora-ve.org" 
2 => "gomix.fedora-ve.org" 
3 irb(main):012:0> u = Net::Ping::TCP.new(host)
4 => #<Net::Ping::TCP:0x7fb1cf3e16f0 @duration=nil, @timeout=5, @warning=nil, @exception=nil, @host="gomix.fedora-ve.org", @port=7>
5 irb(main):013:0> u.port = 80
6 => 80
7 irb(main):014:0> p u.ping?
8 true
9 => nil

10 >> u = Net::Ping::UDP.new(host) 11 => #<Net::Ping::UDP:0xb74b6a38 @duration=nil, @warning=nil, @data="ping", @timeout=5, @exception=nil, @bind_port=nil, @host="www.ruby-lang.org", @port=7, @bind_host=nil> 12 >> p u.ping? 13 false

NOTA: en este caso el rechazo tanto a nivel TCP como ICMP no es indicativo de que la "máquina" esté viva, es decir, aquí el PING es específico al servicio/puerto que se está probando, no a la máquina. Note en el último caso el ping-tcp al puerto 80 donde si hay respuesta porque hay un servidor web funcionando allí.

Ping ICMP con net-ping.

1 irb(main):011:0> host = "gomix.fedora-ve.org" 2 => "gomix.fedora-ve.org" 3 irb(main):015:0> u = Net::Ping::ICMP.new(host) 4 => #<Net::Ping::ICMP:0x7fb1d1358088 @pid=8696, @data="\000\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037 !\"\#$%&'()*+,-./012345678", @duration=nil, @data_size=56, @timeout=5, @bind_port=0, @warning=nil, @exception=nil, @seq=0, @host="gomix.fedora-ve.org", @bind_host=nil, @port=nil> 5 irb(main):016:0> p u.ping? 6 true 7 => nil

Tenga presente que:

1 >> u = Net::Ping:ICMP.new(host) 2 RuntimeError: requires root privileges 3 from /usr/lib/ruby/gems/1.8/gems/net-ping-1.4.0/lib/net/ping/icmp.rb:25:in initialize' 4 from (irb):5:in new' 5 from (irb):5 6

Ping "external", esta opción utiliza la utilidad "ping" de su sistema operativo.

1 >> host="200.44.32.12" 2 => "200.44.32.12" 3 >> u = Net::Ping::External.new(host) 4 => #<Net::Ping::External:0xb73fbd50 @duration=nil, @warning=nil, @timeout=5, @exception=nil, @host="200.44.32.12", @port=7> 5 >> p u.ping? 6 true

Por cierto, net-ping no está empaquetado en Fedora, ello es una buena oportunidad para que comiences tu primer proyecto de empaquetamiento de rubygems en Fedora, contáctame y suscribe en el grupo de desarrollo latinoamericano RPMDev .

Gomix_