Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Verificar conexión

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Jun 21, 2007 10:23 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Verificar conexión Responder citando

Hola gente , les cuento el problema :
Actualmente tengo un script de Perl que uso de dialer para la conexión de ADSL, el problema es que cuando lo termino de correr tengo que chequear si realmente conecto mediante "ping google.com" o cualquier otro server .. , mi pregunta es cómo hacer para que Perl se dé cuenta si la conexión se genero correctamente o no ..

Muchas gracias Smile
Mensaje Vie Jun 22, 2007 2:53 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Pues... haciendo el ping.... Smile

Lo ejecutas y miras lo que sale. Si alguna de las líneas se parece a un paquete respondido de forma correcta, pues es que hay conexión.

Pero hay otra forma: lo ejecutas con la opción '-c 4' para que sólo haga 4 intentos (yo lo uso con sólo '-c 1' en red local) y miro el valor devuelto con el system() del Perl (recordar que está un 'poco' escondido). Según la página de manual de ping:

Código:
     Si ping no recibe ningún paquete de respuesta en absoluto, se cerrará con
     un código 1. Si ocurre un error, mostrará el código 2. En cualquier otro
     caso, el programa terminará con un código 0. Esto hace posible utilizar
     los códigos de terminación del programa para comprobar si el ordenador al
     que se dirige el ping da señales de vida o no.
Así que si recibo un 0, es que todo va bien y hay conexión.
Mensaje Sab Jun 23, 2007 1:18 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

¿Cómo es que el ping devuelve 0, dónde aplico la función system()?

¿Me podrías dar una manito y pegarme ese pedacito de script?

Muchísimas gracias
Mensaje Sab Jun 23, 2007 1:49 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Hay varias formas... puedes interntar usar Net::Ping o usar Socket.

Perl:
use Socket;
if(inet_aton("perl.com")){
  print "Hay conexión\n";
}
else {
  print "No hay conexión\n";
}

Esto trata de resolver el domonio/ip de X servidor (en IPv4).
Mensaje Sab Jun 23, 2007 2:39 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

Muchas gracias , consiso y bien explicado , me sirve un monton , una pregunta , este Socket es el socket.h de C no ?
Mensaje Sab Jun 23, 2007 4:58 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

rklz escribió:
¿Cómo es que el ping devuelve 0, dónde aplico la función system()?

¿Me podrías dar una manito y pegarme ese pedacito de script?
En los foros Intermedio y Experto no se suele presentar código sino es estrictamente necesario.

También podías haber buscado 'ping' en el sistema de búsqueda de este foro. Aquí tienes un ejemplo usando el comando ping del sistema.
Mensaje Sab Jun 23, 2007 6:59 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

rklz escribió:
Muchas gracias , consiso y bien explicado , me sirve un monton , una pregunta , este Socket es el socket.h de C no ?

Sí y no, verás, resulta que Socket es un módulo que viene con perl (no hay que instalarlo, a no ser que estes en BeOS o algo así).
Este módulo es una conexión a socket.h por medio de .xs, solo lee el manual y te enteras:

Socket description at CPAN
explorer escribió:
En los foros Intermedio y Experto no se suele presentar código sino es estrictamente necesario.

También podías haber buscado 'ping' en el sistema de búsqueda de este foro. Aquí tienes un ejemplo usando el comando ping del sistema.


Lo bueno de usar ping (ya sea por el comando o por el módulo) es toda la información que puede tener, además de los diferentes protocolos que te da.
Mensaje Sab Jun 23, 2007 7:04 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

¿El ping da protocolos? Tenía entendido que el ping sólo usaba el protocolo ICMP:

Código:
DESCRIPTION
       ping  uses  the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a
       host or gateway.  ECHO_REQUEST datagrams (``pings'') have an IP and ICMP header, followed by a  struct
       timeval and then an arbitrary number of ``pad'' bytes used to fill out the packet.
Mensaje Dom Jun 24, 2007 2:09 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

explorer escribió:
¿El ping da protocolos? Tenía entendido que el ping sólo usaba el protocolo ICMP:

Código:
DESCRIPTION
       ping  uses  the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a
       host or gateway.  ECHO_REQUEST datagrams (``pings'') have an IP and ICMP header, followed by a  struct
       timeval and then an arbitrary number of ``pad'' bytes used to fill out the packet.

Deberías de leer sobre Net::Ping
En cuanto al comando, depende de que implementación uses. Wink
Mensaje Dom Jun 24, 2007 3:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Pues entonces debes especificar. El comando ping sólo usa el ICMP. En tu comentario anterior has igualado la funcionalidad del comando ping UNIX con el del Net::Ping.
Mensaje Dom Jun 24, 2007 5:56 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

explorer escribió:
Pues entonces debes especificar. El comando ping sólo usa el ICMP. En tu comentario anterior has igualado la funcionalidad del comando ping UNIX con el del Net::Ping.

Bien, je, je... en la implementación de UNIX (no POSIX.3,X ni estandar) ping es otro cuento.

Aparte de eso hay otros como ARPing o la nueva implementación (estandar) para el "estandar IPv6", de hecho se supone que ping soporta IPv6...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group