Bueno aquí tenéis el código fuente del programilla y la presentación es
en modo texto. He incluido algún retardo con Delay y dado que los pings
que realiza son al host local tal como está no es de mucha utilidad, espero que os sirva para aprender como mínimo en como poner texto en pantalla y a diferentes colores.
{ Este programa es meramente did ctico, no se da ninguna garant¡a ni implicita ni
expl¡cita, de hecho ni siquiera se ofrece en formato binario, para que funcione es
necesario compilarlo. Util¡zalo bajo tu propia responsabiliad. Puede
contener errores y no soy un programador profesional.
Dejo puestas las direcciones de localhost y 127.0.0.1 a modo de ejemplo para que
se vea que aparte de la ip se puede poner un nombre.
Yo por ejemplo lo he probado con mi router en la direcci¢n privada y con equipos
en subredes, es un programa muy simple y su funcionalidad radica en las librerias
de ARARAT SYNAPSE
http://www.synapse.ararat.cz/doku.php en concreto he realizado
las pruebas con la release 39 (2009-10-08).
Leer las condiciones de la licencia de uso bien en la citada p gina web o en el
fichero README.
Dentro del fichero podemos encontrar una buena documentaci¢n sobre su utilizaci¢n.
Aparte de esto agradecer los ejemplos escritos en FreePascal que contiene y que
este mismo programa si es de su inter‚s lo puedan distribuir libremente junto
con los actuales.
El programa tiene secciones repetitivas por lo que se puede simplificar mucho pero
as¡ es m s f cil de modificar.
A fecha de editar esto la versi¢n estable de FreePascal es la 2.2.4
07-08-2009
}
{$MODE DELPHI}
Program testping;
uses
crt,dos,pingsend,sysutils;
VAR
salir:boolean;
PROCEDURE Portada;
VAR
Color_Marco:integer;
Color_Relleno:integer;
Color_Encabezado:integer;
begin
CursorOff;
ClrScr;
Color_Marco:=10;
Color_Relleno:=10;
Color_Encabezado:=14;
GotoXY (1,1);
TextColor (Color_Marco);
Write('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍ»');
GotoXY (1,2); Write ('º');
TextColor (Color_Relleno);
Write (' º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º ');
TextColor (Color_Marco); Write ('º');
GotoXY (1,3); Write ('Ì');
TextColor (Color_Relleno);
Write ('ÍÍÍÍÍÍÍÍÍÍÍÍÍͼ º');
TextColor (Color_Encabezado);
Write (' PRUEBA DE PING SIMPLE ');
TextColor (Color_Relleno);
Write (' º ÈÍÍÍÍÍÍÍÍÍÍÍÍ');
TextColor (Color_Marco); Write ('¹');
GotoXY (1,4); Write ('º');
TextColor (Color_Relleno);
Write ('±±±±±±±±±±±±±±± ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ±±±±±±±±±±±±±');
TextColor (Color_Marco); Write ('º');
GotoXY (1,5); Write ('º');
Write ('±±±±±±±±±±±±±±ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ ±±±±±±±±±±±º');
GotoXY (1,6); Write ('º');
Write ('±±±±±±±±±±±±±±³ EQUIPO ³ DIRECCION IP ³ ESTADO ³ RETARDO ³ ±±±±±±±±±±±º');
GotoXY (1,7); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,8); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 1 ³ localhost ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,9); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,10); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 2 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,11); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,12); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 3 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,13); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,14); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 4 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,15); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,16); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 5 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,17); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,18); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 6 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,19); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,20); Write ('º');
Write ('±±±±±±±±±±±±±±³ Equipo 7 ³ ---.---.---.--- ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,21); Write ('º');
Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
GotoXY (1,22); Write ('º');
Write ('±±±±±±±±±±±±±±³ LocalHost ³ 127.000.000.001 ³ ³ ³ ±±±±±±±±±±±º');
GotoXY (1,23); Write ('º');
Write ('±±±±±±±±±±±±±±ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ ±±±±±±±±±±±º');
GotoXY (1,24);
Write ('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
GotoXY (1,24); Insline;
GotoXY (1,24); Write ('º');
Write ('±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±º');
end;
PROCEDURE Realizar_Ping;
var
ping:TPingSend;
Equipo1: string; { Establecemos el tipo para los equipo como string o cadena }
Equipo2: string;
Equipo3: string;
Equipo4: string;
Equipo5: string;
Equipo6: string;
Equipo7: string;
Equipo8: string;
Equipo1_Estado: shortint; { Establecemos el estado obtenido a tipo shortint }
Equipo2_Estado: shortint;
Equipo3_Estado: shortint;
Equipo4_Estado: shortint;
Equipo5_Estado: shortint;
Equipo6_Estado: shortint;
Equipo7_Estado: shortint;
Equipo8_Estado: shortint;
Equipo1_retardo: integer; { Establecemos el tiempo retornado como integer }
Equipo2_retardo: integer; { recordar que el tiempo viene dado en ms y que }
Equipo3_retardo: integer; { lo normal es que dentro de nuestra LAN los ti-}
Equipo4_retardo: integer; { empos se encuetren cercanos a 0 por ejemplo 0 }
Equipo5_retardo: integer; { o 1, fuera de nuestra LAN ser n superiores de-}
Equipo6_retardo: integer; { pendiendo de la rapidez de las comunicaciones }
Equipo7_retardo: integer; { por ejemplo si existen unos cuantos dispositi-}
Equipo8_retardo: integer; { vos intermedios entre origen y destino, cada }
{ uno nos aumentara en mayor o menor medida el }
{ total }
begin
Equipo1:='localhost'; { Cadena de Equipo1 nombre o direcci¢n IP }
Equipo2:='A DEFINIR'; { Cadena de Equipo2 nombre o direcci¢n IP }
Equipo3:='A DEFINIR'; { Cadena de Equipo3 nombre o direcci¢n IP }
Equipo4:='A DEFINIR'; { Cadena de Equipo4 nombre o direcci¢n IP }
Equipo5:='A DEFINIR'; { Cadena de Equipo5 nombre o direcci¢n IP }
Equipo6:='A DEFINIR'; { Cadena de Equipo6 nombre o direcci¢n IP }
Equipo7:='A DEFINIR'; { Cadena de Equipo7 nombre o direcci¢n IP }
Equipo8:='127.0.0.1'; { Cadena de Equipo8 nombre o direcci¢n IP }
{ Si por ejemplo cambiamos 'A DEFINIR' por una direcci¢n externa
nuestra LAN obtendremos tiempos de ping en ms mayores que
cero, yo en mis pruebas he obtenido tiempos de 78ms
En este ejemplo dejo puesto 'localhost' que hace referencia al bucle
local por nombre o bien su equivalente en IP '127.0.0.1' }
ping:=TPingSend.Create;
Repeat
TextColor (10); { Color de Texto para fecha y hora }
GotoXY (5,2);Write (timetostr(time));
GotoXY (69,2);Write (datetostr(date));
{ Esto hace permite escribir la fecha y la hora en la parte superior al
tiempo que nos hace espaciar un poco el tiempo entre cada vuelta del
bucle de pings, l¢gicamente si una direcci¢n no es v lida o no se al-
canza en los reintentos que realiza hace que el tiempo que tarda en
realizar el bucle sea variable }
ping.ping (Equipo1); { realiza el ping al equipo cuya direcci¢n pongamos
en la variable de cadena Equipo1 }
if ping.pingtime >= 0 then Equipo1_Estado:=1 else Equipo1_Estado:=0;
Equipo1_retardo:=ping.pingtime;
ping.ping (Equipo1);
GotoXY (48,8); Write (' ');
IF (Equipo1_Estado >= 1) then
begin
GotoXY (48,8);
TextColor (10);
Write ('Activo');
end
else
begin
GotoXY (48,8);
Write (' ');
TextColor (12);
GotoXY (48,8);
Write ('SinResp');
end;
GotoXY (60,8);
Write (' ');
GotoXY (60,8);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo2);
if ping.pingtime >= 0 then Equipo2_Estado:=1 else Equipo2_Estado:=0;
Equipo2_retardo:=ping.pingtime;
ping.ping (Equipo2);
IF (Equipo2_Estado >= 1) then
begin
GotoXY (48,10);
TextColor (10);
Write ('Activo');
end
else
begin
GotoXY (48,10);
Write (' ');
TextColor (12);
GotoXY (48,10);
Write ('SinResp');
end;
GotoXY (60,10);
Write (' ');
GotoXY (60,10);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo3);
if ping.pingtime >= 0 then Equipo3_Estado:=1 else Equipo3_Estado:=0;
Equipo3_retardo:=ping.pingtime;
ping.ping (Equipo3);
GotoXY (48,12); Write (' ');
IF (Equipo3_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,12);
Write ('Activo');
end
else
begin
GotoXY (48,12);
Write (' ');
TextColor (12);
GotoXY (48,12);
Write ('SinResp');
end;
GotoXY (60,12);
Write (' ');
GotoXY (60,12);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo4);
if ping.pingtime >= 0 then Equipo4_Estado:=1 else Equipo4_Estado:=0;
Equipo4_retardo:=ping.pingtime;
ping.ping (Equipo4);
GotoXY (48,14); Write (' ');
IF (Equipo4_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,14);
Write ('Activo');
end
else
begin
GotoXY (48,14);
Write (' ');
TextColor (12);
GotoXY (48,14);
Write ('SinResp');
end;
GotoXY (60,14);
Write (' ');
GotoXY (60,14);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo5);
if ping.pingtime >= 0 then Equipo5_Estado:=1 else Equipo5_Estado:=0;
Equipo5_retardo:=ping.pingtime;
ping.ping (Equipo5);
GotoXY (48,16); Write (' ');
IF (Equipo5_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,16);
Write ('Activo');
end
else
begin
GotoXY (48,16);
Write (' ');
TextColor (12);
GotoXY (48,16);
Write ('SinResp');
end;
GotoXY (60,16);
Write (' ');
GotoXY (60,16);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo6);
if ping.pingtime >= 0 then Equipo6_Estado:=1 else Equipo6_Estado:=0;
Equipo6_retardo:=ping.pingtime;
ping.ping (Equipo6);
GotoXY (48,18); Write (' ');
IF (Equipo6_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,18);
Write ('Activo');
end
else
begin
GotoXY (48,18);
Write (' ');
TextColor (12);
GotoXY (48,18);
Write ('SinResp');
end;
GotoXY (60,18);
Write (' ');
GotoXY (60,18);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo7);
if ping.pingtime >= 0 then Equipo7_Estado:=1 else Equipo7_Estado:=0;
Equipo7_retardo:=ping.pingtime;
ping.ping (Equipo7);
GotoXY (48,20); Write (' ');
IF (Equipo7_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,20);
Write ('Activo');
end
else
begin
GotoXY (48,20);
Write (' ');
TextColor (12);
GotoXY (48,20);
Write ('SinResp');
end;
GotoXY (60,20);
Write (' ');
GotoXY (60,20);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
ping.ping (Equipo8);
if ping.pingtime >= 0 then Equipo8_Estado:=1 else Equipo8_Estado:=0;
Equipo8_retardo:=ping.pingtime;
ping.ping (Equipo8);
GotoXY (48,22); Write (' ');
IF (Equipo8_Estado >= 1) then
begin
TextColor (10);
GotoXY (48,22);
Write ('Activo');
end
else
begin
GotoXY (48,22);
Write (' ');
TextColor (12);
GotoXY (48,22);
Write ('SinResp');
end;
GotoXY (60,22);
Write (' ');
GotoXY (60,22);
if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
else
Writeln ('***'+' ms');
Delay (100);
if keypressed then salir:=true;
Until salir=true;
ping.Free;
end;
begin
salir:=false;
Portada;
Realizar_Ping;
ClrScr;
end.
{ Lo siguiente es un comentario de lo elemental en lo que hay que centrarse
lo dem s es presentaci¢n y control
uses
crt,dos,pingsend,sysutils; ya que vamos a necesitar la unit pingsend
ping:=TPingSend.Create;
ping.ping (Equipo1); donde Equipo1 es una variable de tipo string
Equipo1_retardo:=ping.pingtime donde Equipo1_retardo es del tipo integer
Si el valor retornado es menor que 0 entonces vemos que el equipo destino
no nos devuelve el eco, no significa necesariamente que est‚ caido, a partir
de ah¡ podemos examinar los diferentes valores para obtener m s informaci¢n
pero aqu¡ simplemente se compara si es >=0 o < 0.
ping.Free; { liberamos los recursos una vez que ya no los necesitamos
Hay que tener en cuenta la jerarqu¡a de las units ya que por ejemplo pingsend
puede a su vez depender de otras units, por lo cual es conveniente es tenerlas
todas en tiempo de compilaci¢n.
}