Citation:
typedef HANDLE (WINAPI* pfnHV)(VOID);
typedef DWORD (WINAPI* pfnDHDPWPipPDD)(HANDLE, DWORD, LPVOID, WORD,
PIP_OPTION_INFORMATION, LPVOID, DWORD, DWORD);
pfnHV pIcmpCreateFile;
pfnDHDPWPipPDD pIcmpSendEcho;
Avec ces structures :
Citation:
typedef struct {
unsigned char Ttl; // Time To Live
unsigned char Tos; // Type Of Service
unsigned char Flags; // IP header flags
unsigned char OptionsSize; // Size in bytes of options data
unsigned char *OptionsData; // Pointer to options data
} IP_OPTION_INFORMATION, * PIP_OPTION_INFORMATION;
typedef struct {
DWORD Address; // Replying address
unsigned long Status; // Reply status
unsigned long RoundTripTime; // RTT in milliseconds
unsigned short DataSize; // Echo data size
unsigned short Reserved; // Reserved for system use
void *Data; // Pointer to the echo data
IP_OPTION_INFORMATION Options; // Reply options
} IP_ECHO_REPLY, * PIP_ECHO_REPLY;
Puis lancer t'as fonction :
Citation:
char Ping()
{
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sin.sin_addr.s_addr = inet_addr(Ip1); // Fonction de convertion d'une chaine de caractère en IPv4
csin.sin_addr.s_addr = inet_addr(Ip2);
if ((pIcmpCreateFile == 0) || (pIcmpSendEcho == 0))
return 2;
// Open the ping service
HANDLE hIP = pIcmpCreateFile();
if (hIP == INVALID_HANDLE_VALUE)
return 3;
// Build ping packet
char acPingBuffer[64];
memset(acPingBuffer, '\xAA', sizeof(acPingBuffer));
PIP_ECHO_REPLY pIpe = (PIP_ECHO_REPLY)GlobalAlloc(
GMEM_FIXED | GMEM_ZEROINIT,
sizeof(IP_ECHO_REPLY) + sizeof(acPingBuffer));
if (pIpe == 0)
return 4;
pIpe->Data = acPingBuffer;
pIpe->DataSize = sizeof(acPingBuffer);
// Send the ping packet
Result1 = pIcmpSendEcho(hIP,sin.sin_addr.S_un.S_addr,
acPingBuffer, sizeof(acPingBuffer), NULL, pIpe,
sizeof(IP_ECHO_REPLY) + sizeof(acPingBuffer), 50);
Result2 = pIcmpSendEcho(hIP,csin.sin_addr.S_un.S_addr,
acPingBuffer, sizeof(acPingBuffer), NULL, pIpe,
sizeof(IP_ECHO_REPLY) + sizeof(acPingBuffer), 50);
// Shut down...
GlobalFree(pIpe);
return 0;
}