Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente pragmático

Código fuente pragmático

#¿Incluir? " stdafx.h "

#¿Contiene? ltstdio.h gt

#¿Contiene? ltwindows.hgt?

#¿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)

{

¿Manejar? iHwnd

iHwnd =(HANDLE)obteniendo HANDLE();

IPAddr? pAddr

pAddr=(IPAddr)inet_addr? ((char?*)pIPAddr);

icmp_echo_reply? pData

for(int?I = 1; ilt= LoopSendi)

{

fIcmpSendEcho(iHwnd, pAddr, NULL, 0, NULL, (LPVOID) amp;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.options.Ttl);

}

Otro

{

Printf("La prueba de ping falló. ..\ n ");

}

}

¿Si? (!fIcmpCloseHandle(iHwnd))? printf("¿Cerrar? ¿Identificador? ¿Hay uno? ¡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 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