SOCKET sockRaw;    
sockRaw=::WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0);
if (sockRaw!=INVALID_SOCKET)
{
int nTimeout=1000;
if (setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&nTimeout,   sizeof(nTimeout))!= SOCKET_ERROR) 
{
if (setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&nTimeout,   sizeof(nTimeout))!=SOCKET_ERROR)
{
#define DATA_SIZE 32
BYTE buffer[sizeof(CIcmpHeader)+DATA_SIZE];
CIcmpHeader* pIcmpHeader=(CIcmpHeader*) buffer;

pIcmpHeader->i_type=8; 
pIcmpHeader->i_code=0;
memset((LPVOID) (pIcmpHeader+1),'E',DATA_SIZE);
pIcmpHeader->i_cksum=CheckSum((USHORT*)pIcmpHeader,sizeof(CIcmpHeader)+DATA_SIZE);
pIcmpHeader->i_id=(USHORT)::GetCurrentProcessId();
pIcmpHeader->i_seq=0;
pIcmpHeader->timestamp=::GetTickCount(); SOCKADDR_IN dest; 
ZeroMemory(&dest,sizeof(dest));
dest.sin_addr.S_un.S_addr =uTargetIp; //uTargetIp是有效的IP地址
dest.sin_family=AF_INET;
//dest.sin_port=wPort;
if (::sendto(sockRaw,( char*)buffer,sizeof(buffer),0,(SOCKADDR*) &dest,sizeof(dest))!=SOCKET_ERROR)
{
BYTE bufRec[1024];
SOCKADDR_IN from;
int nFromLen;
nFromLen=sizeof(from);
int nReceive=::recvfrom(sockRaw,(char*)bufRec,sizeof(bufRec),0,(SOCKADDR*)&from,&nFromLen);
                                         //程序一直停在这里