#include <stdio.h>
#include <windows.h>
#include <Winsock2.h>
#define ECHO_REQUEST 8
typedef struct icmp_hdr
{
unsigned short type; // ICMP Error type
unsigned short code; // Type sub code
unsigned short checksum;
unsigned short id;
unsigned short seq;
//unsigned long icmp_timestamp;
}ICMP_HDR;
int main(){
unsigned char *data = (char *)malloc(7500);
unsigned char *Buffer = (char *)malloc(7500);
char ip2[20]="209.85.148.105",ip[20]="192.168.1.66";
int sock,optval,tamano=1380;
struct sockaddr_in sin;
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2), &wsa) != 0)
{
printf("fallo lol");
exit(0);
}
sock = socket(AF_INET, SOCK_RAW,IPPROTO_ICMP);
ICMP_HDR *icmp=(ICMP_HDR *)Buffer;
data = sizeof(ICMP_HDR)+Buffer;
memset(data, '!',tamano);
icmp->type = ECHO_REQUEST; // echo request type
icmp->code = 0;
icmp->id = 13;
icmp->checksum =0;
icmp->seq = 0;
icmp->checksum=checksum(Buffer, sizeof(ICMP_HDR)+tamano);
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = inet_addr(ip2);
sendto(sock,Buffer,sizeof(ICMP_HDR)+tamano,0,(SOCK ADDR *)&sin, sizeof(sin));
return 0;
}
void checksum(unsigned short *addr, int len)
{
unsigned short answer = 0;
register int sum = 0;
register unsigned short *w = addr;
register int nleft = len;
while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *) (&answer) = *(u_char *) w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);/* add carry
answer = ~sum;/* truncate to 16 bits
}
Marcadores