Jue Jun 21, 2007 10:23 pm
|
 |
rklz
Perlero Nuevo

|
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
|
|
| Verificar conexión |
|
|
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  |
|
|
|

Vie Jun 22, 2007 2:53 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
Pues... haciendo el ping....
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. |
|

Sab Jun 23, 2007 1:18 pm
|
 |
rklz
Perlero Nuevo

|
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
|
|
|
|
|
¿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 |
|
Sab Jun 23, 2007 1:49 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
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). |
|
Sab Jun 23, 2007 2:39 pm
|
 |
rklz
Perlero Nuevo

|
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
|
|
|
|
|
| Muchas gracias , consiso y bien explicado , me sirve un monton , una pregunta , este Socket es el socket.h de C no ? |
|
Sab Jun 23, 2007 4:58 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|

Sab Jun 23, 2007 6:59 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
| 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. |
|

Sab Jun 23, 2007 7:04 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
¿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. |
|
|

Dom Jun 24, 2007 2:09 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
| 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.  |
|
Dom Jun 24, 2007 3:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|
Dom Jun 24, 2007 5:56 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
| 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... |
|
Powered by phpBB © 2001, 2005 phpBB Group
|