Como hacer un ping a una maquina...
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Como hacer un ping a una maquina...
Hola a todos...
Necesito hacer un ping a una direccion para ver si puedo conectar con ella.Alguien sabe alguna forma sencilla de comprobar si una maquina está activa??
Un saludo y gracias..
Elías Torres...
Necesito hacer un ping a una direccion para ver si puedo conectar con ella.Alguien sabe alguna forma sencilla de comprobar si una maquina está activa??
Un saludo y gracias..
Elías Torres...
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Hola a todos...
He encontrado un codigo que se supone hace un ping a una direccion que le pongamos y nos dice si tiene conexion o no...
El codigo es el siguiente:
********************************************************************* PING.PRG
* *
* PING.PRG 01-10-2002 *
* *
* Hecho por JOSE MARIA GARCIA MARTINEZ *
* *
* Lenguaje de programación CLIPPER 5.3 *
* Librería Windows FIVEWIN 2.3a *
* Librería de proposito general FUNCKY-II *
* Linkador Windows/DOS BLINKER 5.0 *
* Herramientas de apoyo BORLAND WORK-SHOP 4.0 *
* Compilador de recursos RESOURCE COMPILER MS 7.0 *
* *
******************************************************************************
********************************************************************* INCLUDES
#include"FiveWin.ch"
*********************************************************************** Main()
function main()
local IcmpHandle,Replicas
local DestinationAddress:="direccionip",;
RequestData:="Esto es un ping",;
RequestSize:=15,;
RequestOptions:="",;
ReplyBuffer:=space(278),;
ReplySize:=278,;
Timeout:=2000 && Milisegundos de espera
DestinationAddress:=left(alltrim(DestinationAddress)+space(15),15)
MsgGet("Ping...","Introduzca dirección IP",@DestinationAddress)
*---
IcmpHandle:=IcmpCreateFile()
Replicas:=IcmpSendEcho(IcmpHandle,;
inet_addr(DestinationAddress),;
RequestData,;
RequestSize,0,;
ReplyBuffer,;
ReplySize,;
Timeout)
msginfo(Replicas)
IcmpCloseHandle(IcmpHandle)
*---
if Replicas>0
msginfo("La máquina "+alltrim(DestinationAddress)+" EXISTE")
else
msginfo("La máquina "+alltrim(DestinationAddress)+" NO existe")
endif
return nil
************************************************** LLAMADAS A DLL's DE WINDOWS
DLL32 FUNCTION inet_addr(cIP AS STRING) AS LONG PASCAL FROM "inet_addr" LIB "wsock32.dll"
DLL32 FUNCTION IcmpCreateFile() AS LONG PASCAL FROM "IcmpCreateFile" LIB "icmp.dll"
DLL32 FUNCTION IcmpCloseHandle(IcmpHandle AS LONG) AS LONG PASCAL FROM "IcmpCloseHandle" LIB "icmp.dll"
DLL32 FUNCTION IcmpSendEcho(IcmpHandle AS LONG,;
DestinationAddress AS LONG,;
RequestData AS STRING,;
RequestSize AS LONG,;
RequestOptions AS LONG,;
ReplyBuffer AS LPSTR,;
ReplySize AS LONG,;
Timeout AS LONG) AS LONG PASCAL FROM "IcmpSendEcho" LIB "icmp.dll"
DLL32 FUNCTION WSAGetLastError() AS _INT PASCAL FROM "WSAGetLastError" LIB "wsock32.dll"
******************************************************************************
/*
Compilar con Clipper 5.3:
clipper ping.prg /n/a/v/p
Linkar con Blinker 5.0:
blinker fi ping @COMPILA.LNK
COMPILA.LNK:
blinker incremental OFF
fi \bases\blinker5\BLXCLP53
DEFBEGIN
name FIVEEXE
description 'FiveWin Windows executable to call a DLL function'
exetype Windows 3.1
Stacksize 8500
Heapsize 8500
code preload moveable discardable
data preload moveable
segment 'PLANKTON_TEXT' nondiscardable
segment 'EXTEND_TEXT' nondiscardable
segment 'OM_TEXT' nondiscardable
segment 'OSMEM_TEXT' nondiscardable
segment 'SORTOF_TEXT' nondiscardable
segment 'STACK_TEXT' nondiscardable
DEFEND
lib Five,FiveC,Objects,WinApi
lib Clipper,Llibca51
lib Fivestub
lib Extend,DbfNtx,DbfCdx,Terminal
*/
El problema es que al ejecutarlo me da error en las dos dll que usa. Entonces mi pregunta es la siguiente hay que registrar las dll esas??. Si es así como lo hago??
Un saludo y gracias..
Elías Torres
He encontrado un codigo que se supone hace un ping a una direccion que le pongamos y nos dice si tiene conexion o no...
El codigo es el siguiente:
********************************************************************* PING.PRG
* *
* PING.PRG 01-10-2002 *
* *
* Hecho por JOSE MARIA GARCIA MARTINEZ *
* *
* Lenguaje de programación CLIPPER 5.3 *
* Librería Windows FIVEWIN 2.3a *
* Librería de proposito general FUNCKY-II *
* Linkador Windows/DOS BLINKER 5.0 *
* Herramientas de apoyo BORLAND WORK-SHOP 4.0 *
* Compilador de recursos RESOURCE COMPILER MS 7.0 *
* *
******************************************************************************
********************************************************************* INCLUDES
#include"FiveWin.ch"
*********************************************************************** Main()
function main()
local IcmpHandle,Replicas
local DestinationAddress:="direccionip",;
RequestData:="Esto es un ping",;
RequestSize:=15,;
RequestOptions:="",;
ReplyBuffer:=space(278),;
ReplySize:=278,;
Timeout:=2000 && Milisegundos de espera
DestinationAddress:=left(alltrim(DestinationAddress)+space(15),15)
MsgGet("Ping...","Introduzca dirección IP",@DestinationAddress)
*---
IcmpHandle:=IcmpCreateFile()
Replicas:=IcmpSendEcho(IcmpHandle,;
inet_addr(DestinationAddress),;
RequestData,;
RequestSize,0,;
ReplyBuffer,;
ReplySize,;
Timeout)
msginfo(Replicas)
IcmpCloseHandle(IcmpHandle)
*---
if Replicas>0
msginfo("La máquina "+alltrim(DestinationAddress)+" EXISTE")
else
msginfo("La máquina "+alltrim(DestinationAddress)+" NO existe")
endif
return nil
************************************************** LLAMADAS A DLL's DE WINDOWS
DLL32 FUNCTION inet_addr(cIP AS STRING) AS LONG PASCAL FROM "inet_addr" LIB "wsock32.dll"
DLL32 FUNCTION IcmpCreateFile() AS LONG PASCAL FROM "IcmpCreateFile" LIB "icmp.dll"
DLL32 FUNCTION IcmpCloseHandle(IcmpHandle AS LONG) AS LONG PASCAL FROM "IcmpCloseHandle" LIB "icmp.dll"
DLL32 FUNCTION IcmpSendEcho(IcmpHandle AS LONG,;
DestinationAddress AS LONG,;
RequestData AS STRING,;
RequestSize AS LONG,;
RequestOptions AS LONG,;
ReplyBuffer AS LPSTR,;
ReplySize AS LONG,;
Timeout AS LONG) AS LONG PASCAL FROM "IcmpSendEcho" LIB "icmp.dll"
DLL32 FUNCTION WSAGetLastError() AS _INT PASCAL FROM "WSAGetLastError" LIB "wsock32.dll"
******************************************************************************
/*
Compilar con Clipper 5.3:
clipper ping.prg /n/a/v/p
Linkar con Blinker 5.0:
blinker fi ping @COMPILA.LNK
COMPILA.LNK:
blinker incremental OFF
fi \bases\blinker5\BLXCLP53
DEFBEGIN
name FIVEEXE
description 'FiveWin Windows executable to call a DLL function'
exetype Windows 3.1
Stacksize 8500
Heapsize 8500
code preload moveable discardable
data preload moveable
segment 'PLANKTON_TEXT' nondiscardable
segment 'EXTEND_TEXT' nondiscardable
segment 'OM_TEXT' nondiscardable
segment 'OSMEM_TEXT' nondiscardable
segment 'SORTOF_TEXT' nondiscardable
segment 'STACK_TEXT' nondiscardable
DEFEND
lib Five,FiveC,Objects,WinApi
lib Clipper,Llibca51
lib Fivestub
lib Extend,DbfNtx,DbfCdx,Terminal
*/
El problema es que al ejecutarlo me da error en las dos dll que usa. Entonces mi pregunta es la siguiente hay que registrar las dll esas??. Si es así como lo hago??
Un saludo y gracias..
Elías Torres
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Elías,
Este código construye bien y funciona y puede servirte para continuar implementando lo que quieres:
Tienes que enlazar tambien (en buildce.bat ó en tu propio bat/make):
echo %vcdir%\lib\arm\icmplib.lib >> msvc.tmp
echo %vcdir%\lib\arm\winsock.lib >> msvc.tmp
Este código construye bien y funciona y puede servirte para continuar implementando lo que quieres:
Code: Select all
function Main()
MsgInfo( IcmpCreateFile() )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <icmpapi.h>
#include <hbapi.h>
HB_FUNC( ICMPCREATEFILE )
{
hb_retnl( ( LONG ) IcmpCreateFile() );
}
#pragma ENDDUMP
echo %vcdir%\lib\arm\icmplib.lib >> msvc.tmp
echo %vcdir%\lib\arm\winsock.lib >> msvc.tmp
Last edited by Antonio Linares on Wed Nov 22, 2006 4:36 pm, edited 1 time in total.
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Gracias Antonio..
Pero tengo que decirte que no entiendo el codigo.. Eso que has puesto que es? ¿Es la definicion de la funcion IcmpCreateFile() ? Disculpa pero esto se me hace un poco grande, puesto que principalmente desconozco el tratamiento que hay que hacer a los datos en redes,direcciones ip,etc...
Te agradeceria si me explicaras o me guiaras un poco en lo que tengo que hacer...
Saludos y mil gracias.
Elías Torres.
Pero tengo que decirte que no entiendo el codigo.. Eso que has puesto que es? ¿Es la definicion de la funcion IcmpCreateFile() ? Disculpa pero esto se me hace un poco grande, puesto que principalmente desconozco el tratamiento que hay que hacer a los datos en redes,direcciones ip,etc...
Te agradeceria si me explicaras o me guiaras un poco en lo que tengo que hacer...
Saludos y mil gracias.
Elías Torres.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Elías,
Este es el código completo, sin embargo en el emulador de Pocket PC está devolviendo cero. A ver si a ti te funciona,
Nos hemos guiado por este ejemplo: http://msdn.microsoft.com/library/defau ... ndecho.asp
Este es el código completo, sin embargo en el emulador de Pocket PC está devolviendo cero. A ver si a ti te funciona,
Nos hemos guiado por este ejemplo: http://msdn.microsoft.com/library/defau ... ndecho.asp
Code: Select all
function Main()
local hICMP := IcmpCreateFile()
local cData := "Esto es un ping"
local cReply := Space( ICMP_ECHO_REPLY() + Len( cData ) )
local nResult := IcmpSendEcho( hICMP, inet_addr( "192.168.0.16" ), cData,;
Len( cData ) + ICMP_ECHO_REPLY(), 0,;
cReply, Len( cData ), 1000 )
if nResult > 0
MsgInfo( "hay conexión con esa máquina" )
else
MsgInfo( "no hay conexión" )
endif
IcmpCloseHandle( hIcmp )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <icmpapi.h>
#include <winsock.h>
#include <hbapi.h>
HB_FUNC( ICMPCREATEFILE )
{
hb_retnl( ( LONG ) IcmpCreateFile() );
}
HB_FUNC( ICMPCLOSEHANDLE )
{
hb_retl( IcmpCloseHandle( ( HANDLE ) hb_parnl( 1 ) ) );
}
HB_FUNC( ICMPSENDECHO )
{
hb_retnl( IcmpSendEcho( ( HANDLE ) hb_parnl( 1 ),
( IPAddr ) hb_parnl( 2 ),
( LPVOID ) hb_parc( 3 ),
( WORD ) hb_parnl( 4 ),
( PIP_OPTION_INFORMATION ) hb_parnl( 5 ),
( LPVOID ) hb_parc( 6 ),
( DWORD ) hb_parnl( 7 ),
( DWORD ) hb_parnl( 8 ) ) );
}
HB_FUNC( INET_ADDR )
{
hb_retnl( inet_addr( hb_parc( 1 ) ) );
}
HB_FUNC( ICMP_ECHO_REPLY )
{
hb_retnl( sizeof( ICMP_ECHO_REPLY ) );
}
#pragma ENDDUMP
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Hola Antonio..
He probado el codigo (ante todo muchas gracias por tu tiempo) pero efectivamente a mi tambien me devuelve cero...
He probado a aumentarle el tiempo de respuesta por si acaso fuese que intenta conectar y se la acaba el tiempo antes....pero nada
Habrá que seguir probando.
Saludos.
Elías Torres.
He probado el codigo (ante todo muchas gracias por tu tiempo) pero efectivamente a mi tambien me devuelve cero...
He probado a aumentarle el tiempo de respuesta por si acaso fuese que intenta conectar y se la acaba el tiempo antes....pero nada
Habrá que seguir probando.
Saludos.
Elías Torres.
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Hola Antonio...
Por fin lo he solucionado. Te pongo el codigo para que le heches un vistazo y de paso por si le sirve a alguien..
function main()
local IcmpHandle,Replicas
local DestinationAddress:="192.168.0.31",;
RequestData:="Esto es un ping",;
RequestSize:=15,;
RequestOptions:="",;
ReplyBuffer:=space(278),;
ReplySize:=278,;
Timeout:=1000 && Milisegundos de espera
*---
IcmpHandle:=IcmpCreateFile()
Replicas:=IcmpSendEcho(IcmpHandle,;
inet_addr(DestinationAddress),;
RequestData,;
RequestSize,0,;
ReplyBuffer,;
ReplySize,;
Timeout)
IcmpCloseHandle(IcmpHandle)
*---
if Replicas>0
msginfo("La máquina "+alltrim(DestinationAddress)+" EXISTE")
else
msginfo("La máquina "+alltrim(DestinationAddress)+" NO existe")
endif
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <icmpapi.h>
#include <winsock.h>
#include <hbapi.h>
HB_FUNC( ICMPCREATEFILE )
{
hb_retnl( ( LONG ) IcmpCreateFile() );
}
HB_FUNC( ICMPCLOSEHANDLE )
{
hb_retl( IcmpCloseHandle( ( HANDLE ) hb_parnl( 1 ) ) );
}
HB_FUNC( ICMPSENDECHO )
{
hb_retnl( IcmpSendEcho( ( HANDLE ) hb_parnl( 1 ),
( IPAddr ) hb_parnl( 2 ),
( LPVOID ) hb_parc( 3 ),
( WORD ) hb_parnl( 4 ),
( PIP_OPTION_INFORMATION ) hb_parnl( 5 ),
( LPVOID ) hb_parc( 6 ),
( DWORD ) hb_parnl( 7 ),
( DWORD ) hb_parnl( 8 ) ) );
}
HB_FUNC( INET_ADDR )
{
hb_retnl( inet_addr( hb_parc( 1 ) ) );
}
HB_FUNC( ICMP_ECHO_REPLY )
{
hb_retnl( sizeof( ICMP_ECHO_REPLY ) );
}
#pragma ENDDUMP
Saludos y gracias por la ayuda...
Elías Torres.
Por fin lo he solucionado. Te pongo el codigo para que le heches un vistazo y de paso por si le sirve a alguien..
function main()
local IcmpHandle,Replicas
local DestinationAddress:="192.168.0.31",;
RequestData:="Esto es un ping",;
RequestSize:=15,;
RequestOptions:="",;
ReplyBuffer:=space(278),;
ReplySize:=278,;
Timeout:=1000 && Milisegundos de espera
*---
IcmpHandle:=IcmpCreateFile()
Replicas:=IcmpSendEcho(IcmpHandle,;
inet_addr(DestinationAddress),;
RequestData,;
RequestSize,0,;
ReplyBuffer,;
ReplySize,;
Timeout)
IcmpCloseHandle(IcmpHandle)
*---
if Replicas>0
msginfo("La máquina "+alltrim(DestinationAddress)+" EXISTE")
else
msginfo("La máquina "+alltrim(DestinationAddress)+" NO existe")
endif
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <icmpapi.h>
#include <winsock.h>
#include <hbapi.h>
HB_FUNC( ICMPCREATEFILE )
{
hb_retnl( ( LONG ) IcmpCreateFile() );
}
HB_FUNC( ICMPCLOSEHANDLE )
{
hb_retl( IcmpCloseHandle( ( HANDLE ) hb_parnl( 1 ) ) );
}
HB_FUNC( ICMPSENDECHO )
{
hb_retnl( IcmpSendEcho( ( HANDLE ) hb_parnl( 1 ),
( IPAddr ) hb_parnl( 2 ),
( LPVOID ) hb_parc( 3 ),
( WORD ) hb_parnl( 4 ),
( PIP_OPTION_INFORMATION ) hb_parnl( 5 ),
( LPVOID ) hb_parc( 6 ),
( DWORD ) hb_parnl( 7 ),
( DWORD ) hb_parnl( 8 ) ) );
}
HB_FUNC( INET_ADDR )
{
hb_retnl( inet_addr( hb_parc( 1 ) ) );
}
HB_FUNC( ICMP_ECHO_REPLY )
{
hb_retnl( sizeof( ICMP_ECHO_REPLY ) );
}
#pragma ENDDUMP
Saludos y gracias por la ayuda...
Elías Torres.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Ese soy yo...Elias Torres wrote:* Hecho por JOSE MARIA GARCIA MARTINEZ *
Bueno como podeis ver, en mi código fuente del ping, suelo ser de usar mucho el "wrapeado" de funciones en DLL del tipo "DLL32 FUNCTION...". Me ha ayudado mucho.
Pero ahora en FWPPC pregunto si la sintaxis es igual y cuales son las DLLs homónimas de las de FWH.
Los de las DLLs lo pregunto ya que he leído aquí que la "socket.dll" es la "ws2.lib", la "icmp.dll" no está ahora es "icmplib.lib".
¿ Entonces si linko las LIBs ya no tengo que hacer llamadas del tipo DLL32 FUNCTION ?
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013