Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
if (envia == -1) {<br />
perror("sendto()");<br />
exit(-1);<br />
}<br />
}<br />
Este é programa, observe que na função udp_send, está descrito a<br />
estrtura do cabeçalho e de como o mesmo será montado para que o raw<br />
sockets possa enviar o mesmo. Poderíamos fazer uma equivalência com o<br />
ICMP assim :<br />
icmp_echo(int msocket, unsigned long int origem, unsigned long int<br />
destino, int id, int seq, char *data, unsigned int datasize)<br />
{<br />
unsigned char *pacote;<br />
unsigned char *icmpdata;<br />
struct iphdr *ip;<br />
struct icmphdr *icmp;<br />
struct sockaddr_in vitima;<br />
int N;<br />
pacote = (char *)malloc(TAM_IPHDR + TAM_ICMPHDR + datasize + 1);<br />
if (pacote == NULL) {<br />
perror("malloc");<br />
exit(ERRO);<br />
}<br />
ip = (struct iphdr *)pacote;<br />
icmp = (struct icmphdr *)(pacote + TAM_IPHDR);<br />
icmpdata = (char *)(pacote + TAM_IPHDR + TAM_ICMPHDR);<br />
ip->saddr = end_origem;<br />
ip->daddr = end_destino;<br />
ip->version = 4;<br />
ip->ihl = 5;<br />
ip->ttl = 255;<br />
ip->protocol = 1;<br />
ip->tot_len = htons(TAM_IPHDR + TAM_ICMPHDR + datasize);<br />
ip->tos = 0;<br />
ip->id = 0;<br />
ip->frag_off = 0;<br />
ip->check = 0;<br />
ip->check = in_cksum(ip, TAM_IPHDR);<br />
icmp->type = 8;<br />
/* lembre-se que o ICMP tem vários tipos de comportamento veja a<br />
tabela abaixo :*/<br />
/*ICMP_ECHOREPLY 0 */<br />
/*ICMP_DEST_UNREACH 3 */<br />
/*ICMP_SOURCE_QUENCH 4*/<br />
/*ICMP_REDIRECT 5*/<br />
/*ICMP_ECHO 8 */<br />
55<br />
icmp->code = 0;<br />
icmp->checksum = 0;<br />
icmp->un.echo.id = id;