Jump to content


Photo

Saber si hay conexión de internet


  • Please log in to reply
23 replies to this topic

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 posts
  • LocationRepública Dominicana

Posted 12 April 2009 - 03:39 PM

Hola, ¿hay manera de saber con delphi si existe conección a internet?.

Fleon xD




Edito para corregir el título. escafandra.
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 12 April 2009 - 04:21 PM

Existe una API para eso, InetIsOffline. El caso es que esa API informa que estamos conectados con sólo tener una tarjeta de red conectada. No sirve para el propósito buscado.

La mejor manera de saber si estamos conectados es hacer un Ping a una IP conocida y de respuesta estable y segura (en lo posible), como puede ser Google.com (64.233.187.99 ó 64.233.183.99 etc).

Saludos.
  • 0

#3 root

root

    MR.

  • Miembro Platino
  • PipPipPip
  • 534 posts
  • LocationMexico D.F:

Posted 13 April 2009 - 07:58 AM

o puedes hacerle ping a la pagina
66.96.134.34

hay creo la pregunta que queda es ¿se pueden invocar comandos de DOS desde delphi ?

asi como para hacer ping y en el caso de que haya respuesta te mande un mensaje, ilumine un boton o algo asi ??



  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 13 April 2009 - 08:12 AM

Creo que se puede invocar comandos DOS en delphi, pero ya existen componentes para ello, están las indy que traen por defecto Delphi y ví­a API como éste de nuestro colega chackall.

Saludos.


  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 13 April 2009 - 09:47 AM

Efectivamente, el ping de puede hacer con las Indy, pero también de puede implementar una función propia. Revisa el código de cHackAll y este artí­culo: Implementing PING without using raw sockets.

Escribí­ hace algún tiempo una función Ping en C, por lo que, de momento, no tiene sentido publicarla aquí­.

Saludos.
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 13 April 2009 - 02:10 PM

A parte del viable ping... yo me pregunto... ¿se puede emplear la función InternetGetConnectedState de WinInet?

Mi duda es si es que funcionará... por lo de LAN + modem/router.

Saludos,
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 13 April 2009 - 03:12 PM

A parte del viable ping... yo me pregunto... ¿se puede emplear la función InternetGetConnectedState de WinInet?

Mi duda es si es que funcionará... por lo de LAN + modem/router.

Saludos,


Pues, a priori, pensar en InternetGetConnectedState es una buena idea. El problema es que sólo informa del tipo de conexión, no si realmente existe dicha conexión. Si apagas el router devuelve false, pero al encenderlo devuelve true inmediatamente, sin esperar a que se sincronice la ADSL y sin disponer, por tanto, de conexión. Lo mismo sucede si se desconecta el cable telefónico del router, simplemente informa true y el tipo de conexión, pero no la tenemos. Podéis realizar la prueba...

La forma más fiable es, a mi entender, un ping, ya que se enví­an y reciben paquetes. El punto débil es la caí­da de la IP destino, por eso uso IPs de Google, pensando que es bastante estable.

Saludos.
  • 0

#8 joseme

joseme

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 62 posts
  • LocationCosta Rica

Posted 14 April 2009 - 04:38 AM

el amigo Escafandra tiene razón, el ping es la mejor/más sencilla/más segura forma de saber si estamos conectados. Es mejor en mi opinión hacer el ping a una url que a un ip, porque podrí­a cambiar.
  • 0

#9 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 14 April 2009 - 07:06 AM

el amigo Escafandra tiene razón, el ping es la mejor/más sencilla/más segura forma de saber si estamos conectados. Es mejor en mi opinión hacer el ping a una url que a un ip, porque podrí­a cambiar.


Efectivamente. De una URL sacas por código, con facilidad, la IP que es en definitiva el sujeto del Ping. :)

Saludos.
  • 0

#10 root

root

    MR.

  • Miembro Platino
  • PipPipPip
  • 534 posts
  • LocationMexico D.F:

Posted 14 April 2009 - 07:59 AM

Asi es
yo también opino que es mejor darle ping a un dominio
ya que así­ también compruebas que tengas resolución de dns
por que me ha ocurrido ocasiones en las que responden al ping
pero no hay resolucion de dns ( bueno me sucedio con cableacces )

Root
  • 0

#11 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 posts
  • LocationRepública Dominicana

Posted 14 April 2009 - 08:05 AM

Hola amigos, muchas gracias por su respuesta, por lo que veo es muy sencillo con el asunto del ping, pero tengo una duda al hacer ping a un dominio y no IP, intenté hacer PIng en CMD a google y no me sale, ¿cual es la manera correcta de hacerla?.

Fleon xD
  • 0

#12 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 14 April 2009 - 08:13 AM



asm
  1. ping google.com.mx



...y debe regresar la IP 74.125.91.104

Saludos  :D
  • 0

#13 root

root

    MR.

  • Miembro Platino
  • PipPipPip
  • 534 posts
  • LocationMexico D.F:

Posted 14 April 2009 - 08:20 AM

pies solo escrives ping y el nombre del dominio
c:\ping google.com
hara cuatro pings

si requieres que el proceso sea permanente
necesitas agregarle un " -t "
para detenerlo es como un archivo por lotes
" Ctrl + C "

mmmm no pude anexar el print screen



  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 14 April 2009 - 09:27 AM

Hola amigos, muchas gracias por su respuesta, por lo que veo es muy sencillo con el asunto del ping, pero tengo una duda al hacer ping a un dominio y no IP, intenté hacer PIng en CMD a google y no me sale, ¿cual es la manera correcta de hacerla?.

Fleon xD


¿Tu conexión es mediante proxy?

Saludos.
  • 0

#15 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 posts
  • LocationRepública Dominicana

Posted 14 April 2009 - 09:39 AM

¿Tu conexión es mediante proxy?


En efecto sí­.

Fleon xD
  • 0

#16 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 14 April 2009 - 10:57 AM

Pues en ese caso no sirve. Ping usa el protocolo ICMP para la comunicación, sin embargo Proxy Server sólo soporta paquetes TCP y UDP.

En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.

Saludos.
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 14 April 2009 - 11:11 AM

Pues en ese caso no sirve. Ping usa el protocolo ICMP para la comunicación, sin embargo Proxy Server sólo soporta paquetes TCP y UDP.

En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.

Saludos.


Una pregunta, y que pasa si la página que consultas esta en cache?

Salud OS
  • 0

#18 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 14 April 2009 - 12:46 PM


Pues en ese caso no sirve. Ping usa el protocolo ICMP para la comunicación, sin embargo Proxy Server sólo soporta paquetes TCP y UDP.

En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.

Saludos.


Una pregunta, y que pasa si la página que consultas esta en cache?

Salud OS


Hola egostar. No generarí­a ningún problema pues utilizas InternetOpenUrl con el parámetro INTERNET_FLAG_RELOAD forzando la lectura de la página, no del caché.

Saludos.
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 14 April 2009 - 12:49 PM

Pues ya está, duda aclarada (y)

Salud OS
  • 0

#20 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 14 April 2009 - 12:56 PM

Bueno, para dar una idea de como quedarí­a la lectura sin caché dejo este ejemplo en C:



cpp
  1. //---------------------------------------------------------------------------
  2. // Lee una Web en Buffer hasta size.
  3. bool InternetReadWeb(char* URL, char* Buffer, int size)
  4. {
  5.   HINTERNET hNet;
  6.   HINTERNET hUrl;
  7.   DWORD BytesRead = 0;
  8.   bool Result = false;
  9.  
  10.   if(InternetAttemptConnect(0) != ERROR_SUCCESS) return false;
  11.  
  12.   hNet = InternetOpen("MyApplication", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
  13.   if (hNet){
  14.     hUrl = InternetOpenUrl(hNet, URL, NULL, 0, INTERNET_FLAG_RELOAD, 0);
  15.     if (hUrl){
  16.       ZeroMemory(Buffer, size);
  17.       // Lee la pagina web...
  18.       for(int ind=0; ; ind+=BytesRead){
  19.         Result = InternetReadFile(hUrl, Buffer+ind, size-1-ind, &BytesRead);
  20.         if(Result && BytesRead==0) break;
  21.       }
  22.       InternetCloseHandle(hUrl);
  23.     }
  24.     InternetCloseHandle(hNet);
  25.   }
  26.  
  27.   return Result;
  28. }



Saludos.
  • 0




IP.Board spam blocked by CleanTalk.