Código fuente de la herramienta de ping por lotes
#¿Contiene? & ltstdio.h & gt
#¿Contiene? <windows.h>?
#¿Incluir? & ltwininet.h & gt
#pragma? comentario(lib,?" ws2_32.lib ")
#pragma? comentario(lib, ? "wininet.lib")
typedef? DWORD(__stdcall?*IcmpSendEcho)(HANDLE, IPAddr, LPVOID, WORD, PIP_OPTION_INFORMATION, LPVOID, DWORD, DWORD);
typedef? ¿manejar? (__stdcall?* IcmpCreateFile)(void);
typedef? ¿Booleano? (__stdcall?*IcmpCloseHandle)(handle);
icmpcreatefileficimpcreatefile;
icmpsendechoficimpsendecho;
IcmpCloseHandle? fIcmpCloseHandle
¿Booleano? InitFun(void)
{
¿HMÓDULO? lModl
lModl=(HMODULE)¿Cargar biblioteca? ("iphlpapi.dll");
¿Si? (lModl==0)? {
printf("¿Cargar? ¿Eso? ¿Biblioteca? ¿Hay alguna? ¡Error!\n ");
¿Volver? Falso;
}
De lo contrario{
fIcmpCreateFile =(IcmpCreateFile)GetProcAddress? (lModl, "IcmpCreateFile");
fIcmpSendEcho = (IcmpSendEcho)GetProcAddress? (lModl, "IcmpSendEcho");
fIcmpCloseHandle = (IcmpCloseHandle)GetProcAddress? (lModl, "IcmpCloseHandle");
¿Si? (fIcmpCreateFile==NULL?||?fIcmpSendEcho==NULL?||?fIcmpCloseHandle==NULL){
printf("¿Cargar? ¿Esa? ¿Función? ¿Está ahí? ¡Error!\n ");
¿Volver? Falso;
}
¿Devolver? Verdadero;
}
}
LPHANDLE? GetPingHandle(void)
¿Manejar? pHandle
pHandle = fIcmpCreateFile();
¿Si? ((int)pHandle==-1){
printf("¿Cargar? ¿ICMP? ¿Identificar? ¿Sí? ¡Error!\n ");
¿Volver? 0;
}
En caso contrario {
¿Devolver? (identificador LP)pHandle;
}
}
¿Booleano? Ping(LPSTR?pIPAddr)
{
¿Identificar? iHwnd
iHwnd =(HANDLE)obteniendo HANDLE();
IPAddr? pAddr
pAddr=(
IPAddr)inet_addr? ((char?*)pIPAddr);
icmp_echo_reply? pData
for(int?I = 1;i<= LoopSendi++)
{
fIcmpSendEcho(iHwnd, pAddr, NULL, 0, NULL, (LPVOID) &pData,sizeof(icmp_echo_reply),0);
¿Si? (pData.Status==0)
{
printf("Resultados devueltos por la prueba de ping:? Time=%dms?TTL=%d?\n ", (int) pData. RoundTripTime, (int) pData Ttl);
}
Otro
{
Printf("Error en la prueba de ping. ..\n ");
}
}
¿Y si? (!fIcmpCloseHandle(iHwnd))? printf("¿Cerrar? ¿Identificador? ¿Hay alguno? ¡Error!\n ");
¿Regresar? Verdadero;
}
En cuanto a la función principal, puede escribirla usted mismo. Simplemente pase una dirección IP a la función Ping y se ejecutará.
Código del módulo VB correspondiente.
¿Privado? ¿declarar? ¿Función? ¿IcmpCrearArchivo? ¿Lib? ¿"iphlpapi.dll"? ()?¿como? Largo
¿Privado? ¿declarar? ¿Función? ¿IcmpEnviarEcho? ¿Lib? ¿"iphlpapi.dll"? (¿ByVal?IcmpHandle?As?Dragon,?ByVal?DestinationAddress?As?Dragon,?ByVal?RequestData?As?String,?ByVal?RequestSize?As?Dragon,?ByVal?RequestOptions?as?Dragon,? ReplyBuffer?ICMP_ECHO? ¿Responder? ¿ByVal? ¿Como? Largo
¿Privado? ¿declarar? ¿Función? ¿IcmpCloseHandle? ¿Lib? ¿"iphlpapi.dll"? (¿PorVal?IcmpHandle?¿Como?Dragón)? ¿Como? Largo
¿Privado? ¿declarar? ¿Función? inet_addr? ¿Lib? ¿"wsock32.dll"? (¿PorVal?cp?como?Cadena)? ¿Como? Largo
¿Privado? ¿tipo? IP_options_info
ttl? ¿Como? Bytes''Tiempo de vida
Tosas? ¿byte? ? Tipo de servicio
¿Marcar? ¿Como? Bytes ""Indicador de encabezado IP
OpcionesTamañoAs? ¿byte? ? Tamaño de los datos de opciones, en bytes
OptionsData? ¿Como? ¿Cuánto tiempo? Puntero a datos de opción
¿Fin? Tipo
¿Privado? ¿tipo? ICMP_ECHO_Reply
¿Dirección como? El '''' largo contiene la dirección IP a la que se responde.
¿Estado a? Long ' 'Contiene el estado de la respuesta (consulte la sección Constantes a continuación).
¿Medición de ida y vuelta? ¿dragón? ? Tiempo de ida y vuelta RTT (milisegundos)
DataSizeAs? ¿Entero? Tamaño de los datos de respuesta (bytes)
¿Suscrito? ¿Entero? ¿Mantener
ptrDataAs? ¿dragón? ? Puntero a los datos de respuesta
¿Opción a? ¿IP_OPCIÓN_INFORMACIÓN? Opciones de respuesta
¿Datos como servicio? ¿Cadena? *?250
¿Fin? Tipo
¿Público? ¿tipo? Rtn _ ICMPTestMessage
¿Dirección? ¿Como? ¿Estado de línea
? ¿Como? ¿Cadena? "" se escribe usando funciones.
prueba¿Éxito? ¿Como? ¿Booleano? '' ¿Prueba exitosa?
¿Tiempo? ¿Como? ¿Tamaño largo? ¿Como? ¿TTL largo? ¿Como? Largo
¿El final? Tipo
¿Público? ¿Función? RtnICMPTestMessage(¿PorVal?PruebaIP?Como?Cadena,?PorVal?Tiempo de espera?Como?Dragón,?PorVal?Paquete?como?Dragón)? ¿Como? Rtn _ ICMPTestMessage
¿Atenuado? ¿IcmpMango? ¿Como? ¿IcmpHandle largo
? =?IcmpCreateFile ' ' 'Crear un identificador de prueba.
¿Oscuro? ¿ICMPResponder? ¿Como? ICMP_ECHO_REPLY
¿Atenuado? ¿LongIPAdde? ¿Como? Long
LongIPAddr? =?inet_addr
¿Atenuado? ¿Enviar datos? ¿Como? La cadena ' ' ' ' está configurada para el tamaño del paquete.
¿Enviar datos? =?Espacio(tamaño del paquete)
IcmpSendEcho? ¿IcmpMango? LongIPAddr,? Enviar datos,? Len(EnviarDatos),? 0,?ICMPRespuesta,? len(respuesta de ICM),? Tiempo de espera
¿Y si? ICMPRespuesta. ¿estado? =?0?Entonces
RtnICMPTestMessage. ¿DIRECCIÓN? =?TestIP
RtnICMPTestMessage.size? =?ICMPRespuesta. Tamaño de datos
RtnICMPTestMessage. ¿estado? =?RtnICMPState(respuesta ICM.Estado)
RtnICMPTestMessage.time? =?ICMPRespuesta. Tiempo de ida y vuelta
RtnICMPTestMessage.ttl? =?ICMPRespuesta. Opciones.ttl
RtnICMPTestMessage.test¿Éxito? =?True ' ' 'Prueba exitosa.
Otro
RtnICMPTestMessage. ¿DIRECCIÓN? =?PruebaIP
RtnICMPTestMessage. ¿estado? =?RtnICMPState(Respuesta ICM.Estado)
RtnICMPTestMessage.testSuccess? =?Falso ' ' 'La prueba falló.
¿Fin? Si
IcmpCloseHandle? IcmpHandle
¿Fin? Función