"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.
Código
#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:
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.