PDA

Ver la Versión Completa : ¿Como hacer Ping desde codigo?


escafandra
29-12-2007, 16:31:10
No encuentro la forma de hacer un ping desde código C++ a una dirección de Internet. El código en delphi también me puede servir aunque prefiero C++.

Si tenéis alguna sugerencia os lo agradecería mucho.

Saludos.

duilioisola
29-12-2007, 19:26:09
En Delphi puedes usar las Indi Clients - TIdIcmpClient.


procedure TForm1.BtnPingClick(Sender: TObject);
begin
IdIcmpClient1.Host := '192.168.1.1';
IdIcmpClient1.Ping;
end;

procedure TFMMain.IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
{TReplyStatus = record
BytesReceived: integer;
FromIpAddress: string;
MsgType: byte;
SequenceId: word;
MsRoundTripTime: longword;
TimeToLive: byte;
ReplyStatusType:
TReplyStatusTypes;
end;

TReplyStatusTypes = (rsEcho, rsError, rsTimeOut, rsErrorUnreachable, rsErrorTTLExceeded);
}

end;

escafandra
29-12-2007, 20:05:23
Gracias por tu pronta respuesta. No se porque tengo problemas para instalar Indi en mi viejo C++ Builder 5. Lo instalo pero no me funciona bien.

Si sabeis de otros componentes para hacer un ping o como hacerlo directamente por código.....

dec
29-12-2007, 20:36:43
Hola,

Creo que el artículo Implementing PING without using raw sockets (http://delphi.about.com/od/internetintranet/l/aa081503a.htm), de Zarko Gajic (http://delphi.about.com/), puede serte de utilidad.

escafandra
29-12-2007, 23:45:27
Hola,

Creo que el artículo Implementing PING without using raw sockets (http://delphi.about.com/od/internetintranet/l/aa081503a.htm), de Zarko Gajic (http://delphi.about.com/), puede serte de utilidad.

Gracias por tu respuesta. Voy a mirar ese artículo.

escafandra
30-12-2007, 13:39:43
He mirado el artículo y funciona compilado en delphi, pero no ma funciona con Builder. El problema esta que una vez compilado con Builder C++ y al hacer el linkado, no encuentra las funciones externas que deben estar en icmp.dll y no puede crear el ejecutable.:confused:

escafandra
30-12-2007, 18:29:32
He conseguido linkar esas funciones externas de icmp.dll y ejecutar una prueba según lo que se exponía en: http://delphi.about.com/od/internetintranet/l/aa081503a.htm

Pero no funciona bien, si reinicio el Router no debería poder hacer un ping a Google.com (64.233.187.99), por ejemplo. Sin embargo, en el momento que el Router me asigna una IP privada (Lan) puedo hacer ese ping, a pesar de no tener conexión Wan :confused:.

Mi intención es precisamente esa, saber si tengo conexión a internet, no red local. Para eso habia pensado, como solución, hacer un ping a una web estable como google o microsoft...

dec
30-12-2007, 18:40:21
Hola,

Echa un vistazo a la Introducción al API WinInet (http://lawebdejm.com/prog/cpp/wininetintro.html) de la Web de JM (http://lawebdejm.com/), particularmente, Funciones de estado de la conexión (http://lawebdejm.com/prog/cpp/wininetintro.html#apdo8). Tal vez te resulte útil. ;)

escafandra
02-01-2008, 21:12:41
Hola de nuevo.

Tras el fin de año....

He conseguido hacer ping por código. Gracias por las indicaciones. Por si a alguno le sirve, dejo unos links interesantes que me han servido para hacer mi código:
http://msdn2.microsoft.com/en-us/library/aa366050(VS.85).aspx (http://msdn2.microsoft.com/en-us/library/aa366050%28VS.85%29.aspx)
http://www.sockets.com/
http://www.sockets.com/ms_icmp.c
http://lawebdejm.com/prog/cpp/wininetintro.html#subapdo8

jachguate
02-01-2008, 21:39:20
Oye... un poco del código, quizás en forma de truco no nos vendría nada mal. ;)

Hasta luego.

;)

escafandra
03-01-2008, 11:38:06
Al parecer hay problemas con el editor de trucos. Cuando funcione con normalidad editare el truco.:D

Saludos.

jachguate
03-01-2008, 17:12:17
He reportado el problema en la sección de moderadores, a espera que Emilio lo revise.

Por lo que he podido ver, los problemas reportados tienen que ver con la integración de la página con el resto de los foros, pero supongo que si es posible publicar el truco.

Notificaré cuando el problema haya sido resuelto por el capo.

Hasta luego.

;)

jachguate
03-01-2008, 21:28:52
Hola de nuevo.

Emilio se ha ensuciado las manos, pero la sección de trucos está 100% ahora. Gracias por el reporte, y adelante... a escribir el truco!.

Hasta luego.

escafandra
04-01-2008, 11:15:14
El truco está publicado con el Nº 456.

Saludos:D