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.