z

BLOG ARTICLE IP Helper | 1 ARTICLE FOUND

  1. 2008.02.12 ICMP Echo Message (using Win32 IPHelper Functions)

#include <Winsock2.h>
#include <Iphlpapi.h>
#include <Icmpapi.h>
#include <stdio.h>
#include <windows.h>

bool sendIcmpEcho(TCHAR * dstAddr,  //목적지 IP Addr
     DWORD tmOut,                              //요청 타임아웃
     LPVOID pData,                             //데이터
     DWORD dataSize,                        //데이터 사이즈
     ULONG * status)                         //응답 상태코드
{
 HANDLE hIcmpFile = null;
 DWORD dwRetVal = 0;
 LPVOID ReplyBuffer = null;
 bool bRet  = false;

 if((hIcmpFile = IcmpCreateFile()) == INVALID_HANDLE_VALUE)
  return bRet;

 ReplyBuffer = (VOID*) new byte[sizeof(ICMP_ECHO_REPLY) + dataSize];

 if((dwRetVal = IcmpSendEcho(hIcmpFile, inet_addr(dstAddr), pData, dataSize,
     NULL, ReplyBuffer, dataSize + sizeof(ICMP_ECHO_REPLY), tmOut)) != 0)
 {
 
  /*
  ICMP_ECHO_REPLY * p = (ICMP_ECHO_REPLY *)ReplyBuffer;

  printf("st Address %d\n",p->Address);
  printf("st Status %d\n",p->Status);
  printf("st RoundTripTime %d\n",p->RoundTripTime);
  printf("st DataSize %d\n",p->DataSize);
  printf("st Reserved %d\n",p->Reserved);
  printf("st Data %s\n",p->Data);
  */
 
  bRet = !bRet;
  *status = ((ICMP_ECHO_REPLY *)ReplyBuffer)->Status;
 }

 delete[] ReplyBuffer;
 CloseHandle(hIcmpFile);

 return bRet;
}

Link to iphlpapi.lib, ws2_32.lib

별로 세밀한 제어?를 할 수는 없지만 .. ICMP Echo를 이용해 특별한 일을 할 일은 없을 듯 하여, 이 정도로도 충분히 사용가능 할듯하다. IcmpSendEcho2()를 이용하면 이벤트를 이용해
비동기 처리도 가능하다.

AND