From Fedora Project Wiki

< FWN‎ | Beats

No edit summary
Line 36: Line 36:


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


Line 54: Line 54:
  8 true
  8 true
  9 => nil
  9 => nil
10 >>  u = Net::Ping::UDP.new(host)
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>
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?
12 >> p u.ping?
13 false
13 false
</code>
</code>


Line 65: Line 65:


<code>
<code>
1 irb(main):011:0> host = "gomix.fedora-ve.org"  
1 irb(main):011:0> host = "gomix.fedora-ve.org"  
2 => "gomix.fedora-ve.org"  
2 => "gomix.fedora-ve.org"  
3 irb(main):015:0> u = Net::Ping::ICMP.new(host)
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>
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?
5 irb(main):016:0> p u.ping?
6 true
6 true
7 => nil
7 => nil
</code>
</code>


Line 77: Line 77:


<code>
<code>
1 >> u = Net::Ping:ICMP.new(host)
1 >> u = Net::Ping:ICMP.new(host)
2 RuntimeError: requires root privileges
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'
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'
4    from (irb):5:in `new'
5    from (irb):5
5    from (irb):5
6  
6  
</code>
</code>


Line 88: Line 88:


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



Revision as of 12:35, 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

  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_