Tengo un problema con la funcion send(). Siempre me retorna -1 y no se porque....
El socket lo creo asi:
Código
int CreateRawSocket(int protocol_to_sniff){ //Crea un raw socket int rawsock; if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1) { } return rawsock; }
El bind lo hago asi:
Código
int BindRawSocketToInterface(char *device, int rawsock, int protocol){ //Hace un bind del socket con la interfaz de red struct sockaddr_ll sll; struct ifreq ifr; bzero(&sll, sizeof(sll)); bzero(&ifr, sizeof(ifr)); if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1) { } sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(protocol); if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1) { } return 1; }
Luego creo un char * con los datos a enviar y lo envio con esta funcion:
Código
int SendRawPacket(int rawsock, char *pkt, int pkt_len){ //Envia un raw packet int sent=0; if((sent = send(rawsock, pkt, pkt_len,TH_FLAGS)) != pkt_len) { /* Error */ return 0; } return 1; }
Y la funcion send() siempre me retorna -1 y no se porque...El socket esta bien creado...lo he mirado con gdb y tengo la variable rawsock=8. Y la variable pkt_len=strlen(pkt)=54
Si el socket esta bien creado y el bind es correcto...¿Por que no me envia los datos?
Gracias, un saludo.