01.01.2013 Views

Liber 000 - Astrum Argentum

Liber 000 - Astrum Argentum

Liber 000 - Astrum Argentum

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!