ICMP ayuda?

Iniciado por <<<-Basura->>>, 25 Octubre 2011, 10:47 AM

0 Miembros y 1 Visitante están viendo este tema.

<<<-Basura->>>

Bueno estoy convencido, que no puedo por mi cuenta necesito la ayuda de ustedes, o asta donde pueden ayudarme, no les estoy pidiendo el código, sino que me vayan ayudando.

"he buscando en google y he encontrado códigos, pero están muy complejos para entenderlos yo."

Aclaro:

Estoy tratando de hacer un PING, de la forma mas simple, con programación C, sin llamar al sistema.

No se como empezar.


#include <stdio.h>
#include <stdlib.h>

#include <netinet/in.h>
#include <netinet/ip_icmp.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>


int main(int argc, char **argv){
//int sock = socket(AF_INET, SOCK_RAW, 0);
struct icmphdr icmp;
icmp.type = 0;
icmp.code = 0;
icmp.un.echo.id = 0;
icmp.un.echo.sequence = 0;
icmp.un.gateway = 0;
icmp.un.frag.__unused = 0;
icmp.un.frag.mtu = 0;
icmp.checksum = 0;
return 0;
}


He leiido que para hacer un paquete ping, o icmp se necesita trabajar con los socket raw.
Se como enviar y recibir paquetes.
Estuve leyendo el estándar RFC:  792   .
Cogí el código del checksum de otro código:

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 (unsigned short)(~sum);
}


Aclaro Quisiera que me orienten, o me ayuden a completar el código, se que es poco y pobre pero por algo se empieza.
<<<--Basura-->>>