Ir al contenido


Foto

Como hacer un ping en delphi ????


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

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 22 junio 2009 - 07:24

Tengo una función que no me acuerdo donde la tome, a veces funciona y aveces no, por lo que no se en cual de las lineas de codigo este el problema, no se si alguien tenga otra funcion ya probada solo ocupo saber si X direccion IP esta encendida ó este en linea para posteriormente conectarme, les paso la función:


delphi
  1. function TienePing(Host : string) : boolean;
  2. var
  3. Handle : THandle;
  4. InAddr : IPAddr;
  5. DW    : DWORD;
  6. rep    : Array[1..128] of byte;
  7. begin
  8.  
  9.   result := false;
  10.   Handle := IcmpCreateFile;
  11.  
  12.   if Handle = INVALID_HANDLE_VALUE then
  13.     Exit;
  14.  
  15.   TranslateStringToTInAddr(Host, InAddr);
  16.  
  17.   DW    := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0);
  18.   Result := (DW <> 0);
  19.  
  20.   IcmpCloseHandle(Handle);
  21.  
  22. end;



Agradezco cualquier información al respecto....
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 22 junio 2009 - 07:31

Hola, ¿no te funcionarí­a de esta manera?:

http://delphiaccess....-tidicmpclient/

Saludos.


  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 23 junio 2009 - 08:08

¿Que tal esto o esto otro?

Saludos.


  • 0

#4 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 23 junio 2009 - 08:43

Alguien puede volver a subir el archivo .7z porfavor ????


http://www.delphiaccess.com/forum/utilerias/ping-!/


Me intereza mas usar una funcion sin indys....

  • 0

#5 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 24 junio 2009 - 07:59

Alguien puede volver a subir el archivo .7z porfavor ????...


El problema ha sido tratado en el hilo respectivo.
 

...Me intereza mas usar una funcion sin indys....



delphi
  1. // . . .
  2.  
  3. uses WinSock;
  4.  
  5. function IcmpCreateFile: Integer; stdcall external 'iphlpapi'
  6. function IcmpSendEcho(Handle, Address: Integer; RequestData: PChar; RequestSize: Word; RequestOptions, ReplyBuffer: PChar; ReplySize, TimeOut: Cardinal): Cardinal; stdcall external 'iphlpapi';
  7.  
  8. procedure TForm1.Button1Click(Sender: TObject);
  9. var
  10. Reply: array [0..6] of Cardinal;
  11. icmp: Cardinal;
  12. begin
  13. icmp := IcmpCreateFile;
  14. if IcmpSendEcho(icmp, inet_addr('127.0.0.1'), nil, 0, nil, @Reply, SizeOf(Reply), 666) <> 0 then
  15.   MessageBox(0, 'Ok', '', MB_ICONINFORMATION)
  16. else
  17.   MessageBox(0, 'No', nil, MB_ICONERROR);
  18. CloseHandle(icmp);
  19. end;
  20.  
  21. // . . .


  • 0

#6 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 24 junio 2009 - 03:45

Gracias cHackAll, voy a probarlo....
  • 0

#7 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 25 junio 2009 - 01:07

Tengo maquinas viejitas con win98 usando, al actualizar el .exe en esas maquinas marca el error:

El archivo MiPrograma.Exe esta vinculado  a un IPHLPAPI.DLL.DLL:IcmpSendEcho de una exportación que no existe.


Con winXP si jala, quise copiar dicho .dll que tengo en una pc con winxp a la maquina con win98 al \windows\system y me marca que no se puede copiar el .dll por que esta en uso.

Alguien sabe si de plano tengo que usar winxp a fuerzas ????
  • 0

#8 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 25 junio 2009 - 03:15

Tengo maquinas viejitas con win98 usando, al actualizar el .exe en esas maquinas marca el error:

El archivo MiPrograma.Exe esta vinculado  a un IPHLPAPI.DLL.DLL:IcmpSendEcho de una exportación que no existe.


Reemplaza "iphlpapi" por "icmp.dll"

...quise copiar dicho .dll que tengo en una pc con winxp a la maquina con win98 al \windows\system y me marca que no se puede copiar el .dll por que esta en uso.

Alguien sabe si de plano tengo que usar winxp a fuerzas ????


Esa no es una buena practica ;)

  • 0

#9 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 26 junio 2009 - 09:03

Malas noticias, acabo de realizar una prueba con una IP publica, si entro al ms dos y le doy "ping Mi IP" si me regresa respuesta, pero si intento realizar la comprobación de la funcion me dice que no hay respuesta  :|
  • 0

#10 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 26 junio 2009 - 09:04

Solo jalan para IP's de redes locales ??
  • 0

#11 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 26 junio 2009 - 09:46

Malas noticias, acabo de realizar una prueba con una IP publica, si entro al ms dos y le doy "ping Mi IP" si me regresa respuesta, pero si intento realizar la comprobación de la funcion me dice que no hay respuesta  :|


Estoy confundido, estas haciendo referencia al codigo del otro hilo o al codigo que te deje en este hilo? porque el mensaje es del otro no?

PD; tendria que hacer una prueba en 9x a ver que cosilla se nos esta escapando.
  • 0

#12 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 26 junio 2009 - 06:10

Alguien puede volver a subir el archivo .7z porfavor ????...


El problema ha sido tratado en el hilo respectivo.

...Me intereza mas usar una funcion sin indys....



delphi
  1. // . . .
  2.  
  3. uses WinSock;
  4.  
  5. function IcmpCreateFile: Integer; stdcall external 'iphlpapi'
  6. function IcmpSendEcho(Handle, Address: Integer; RequestData: PChar; RequestSize: Word; RequestOptions, ReplyBuffer: PChar; ReplySize, TimeOut: Cardinal): Cardinal; stdcall external 'iphlpapi';
  7.  
  8. procedure TForm1.Button1Click(Sender: TObject);
  9. var
  10. Reply: array [0..6] of Cardinal;
  11. icmp: Cardinal;
  12. begin
  13. icmp := IcmpCreateFile;
  14. if IcmpSendEcho(icmp, inet_addr('127.0.0.1'), nil, 0, nil, @Reply, SizeOf(Reply), 666) <> 0 then
  15.   MessageBox(0, 'Ok', '', MB_ICONINFORMATION)
  16. else
  17.   MessageBox(0, 'No', nil, MB_ICONERROR);
  18. CloseHandle(icmp);
  19. end;
  20.  
  21. // . . .



Use el código de arriba ....
  • 0

#13 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 junio 2009 - 03:26

Mira a ver si el programa adjunto te funciona, es el código que te puse en C++.

Saludos.


  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 agosto 2009 - 04:42

Como explico en este hilo, la rutina la he corregido.

Coloco el nuevo enlace de descarga para la aplicación de ejemplo y el proyecto completo.  ;)

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.