Line 5: | Line 5: | ||
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. | 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 [[User:gomix|Guillermo Gómez]], a primer on Ruby | This week's contribution is from [[User:gomix|Guillermo Gómez]], a primer on Ruby Ping. Enjoy! | ||
=== Ruby Ping === | === Ruby Ping === |
Revision as of 12:36, 17 March 2011
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
- 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_