Ir al contenido


Foto

[RESUELTO] Ping y Windows7


  • Por favor identifícate para responder
5 respuestas en este tema

#1 madiazg

madiazg

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 04 septiembre 2011 - 03:35

Hola,
estoy intentando saber si estoy o no conectado a internet haciendo un ping a google.com.


He probado utilizando los ejeplos descritos en estas páginas web:
http://delphi.about....l/aa081503a.htm
http://neftali.clubdelphi.com/?p=562


Por ejemplo, utilizando la Unit raw_ping.pas y simplemente ejecutando la instrucción:


delphi
  1. uses raw_ping;
  2. ...
  3. if ping('google.com') then Label1.caption := 'conectado' else label1.caption := 'desconectado';


funciona correctamente en Windows XP, no así en Windows 7 que siempre da como resultado False (o sea, desconectado).


¿Alguien puede ayudarme a solucionar este problema?


Saludos...
Miguel Angel

  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 04 septiembre 2011 - 06:25

Échale un vistazo a esto.

Si realizas una búsqueda con la palabra ping saldrán muchos resultados.


Saludos.


  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 septiembre 2011 - 05:29

He visto que no aparece una función en el foro, que realice un ping como el que buscas en delphi, es decir pasando la dirección como una url y no como una IP.

En un rato libre me entretenido en realizar una unit, en delphi 7, para realizar ping. El código de la función es el siguiente:


delphi
  1. function Ping(Addr: PCHAR; Rep: integer = 3): boolean;
  2. var
  3.   WSA: TWSAData;
  4.   hIcmpFile: Cardinal;
  5.   Reply: ICMP_ECHO_REPLY;
  6.   He: Phostent;
  7. begin
  8.   Result:= false;
  9.  
  10.   // Inicializar WinSock
  11.   if WSAStartup(MAKEWORD(1, 1), WSA) <> 0 then exit;
  12.  
  13.   //Obtener IP de Addr
  14.   He:= gethostbyname(Addr);
  15.   if He = nil then exit;
  16.  
  17.   // Envia Ping
  18.   hIcmpFile:= IcmpCreateFile;
  19.   repeat
  20.     Result:= IcmpSendEcho(hIcmpFile, PULONG(He.h_addr_list^)^, 0, 0, 0, PCHAR(@Reply), sizeof(ICMP_ECHO_REPLY), 1000) <> 0;
  21.     if Result then
  22.       Result:= Reply.Status = 0; // Error en Ping el Host no lo recibe....
  23.     dec(Rep);
  24.   until Result or (Rep = 0);
  25.  
  26.   // Cerrar...
  27.   IcmpCloseHandle(hIcmpFile);
  28.   WSACleanup;
  29. end;


Addr: La dirección, se puede pasar como una IP clásica o como una URL.
Rep: Número de intentos de envío antes de dar por fracasado el ping, por defecto 3.

Un ejemplo de uso:

delphi
  1.   if Ping('[url=http://www.google.es]www.google.es[/url]') then
  2.     Label1.Caption := 'Exito'
  3.   else
  4.     Label1.Caption := 'Fracaso';


Subo el código de la UNIT y una aplicación de ejemplo.

Espero que pueda ser de utilidad.


PD: madiazg, lo he probado en una VM con Win 7 en red y me funciona con IP y Nombres de PC. No he podido probar contra URL en internet por problemas del proxy, pero creo que debe funcionar. Cuando pueda hacer la prueba completa aviso si alguien no lo hace antes.

Saludos.
  • 0

#4 madiazg

madiazg

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 05 septiembre 2011 - 12:56

Hola escafandra,
lo he podido probar tanto en Windows XP como en Windows 7 y funciona correctamente.
¿Sería posible adaptar el código para que pueda trabajar detrás de un proxy?. En mi conexión de casa no tengo problemas pero en mi trabajo, por ejemplo, no funcionaría.


Gracias y saludos...
Miguel Angel
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 septiembre 2011 - 04:36

...lo he podido probar tanto en Windows XP como en Windows 7 y funciona correctamente.

Si, también lo he comprobado.  :)
 

¿Sería posible adaptar el código para que pueda trabajar detrás de un proxy?.

Me temo que no. Pero existe otra solución. Lee esto y esto.


Saludos.


  • 0

#6 madiazg

madiazg

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 06 septiembre 2011 - 06:52

Hola escafandra,
gracias por tu ayuda. Ahora no puedo probar la autenticación en el proxy ya que estoy de vacaciones. Probaré el código cuando regrese al trabajo.
Como el ping funciona tanto en Windows XP como en Windows 7 doy por resuelta esta consulta.

Saludos...
Miguel Angel
  • 0




IP.Board spam blocked by CleanTalk.