¡Buenas a todos!
Tengo un problema con la funcion send(). Siempre me retorna -1 y no se porque....
El socket lo creo asi:
int CreateRawSocket(int protocol_to_sniff){
//Crea un raw socket
int rawsock;
if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1)
{
perror("Error creating raw socket: "); }
return rawsock;
}
El bind lo hago asi:
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));
strncpy((char *)ifr.
ifr_name, device
, IFNAMSIZ
); if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1)
{
printf("Error getting Interface index !\n"); }
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)
{
perror("Error binding raw socket to interface\n"); }
return 1;
}
Luego creo un char * con los datos a enviar y lo envio con esta funcion:
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 */
printf("Could only send %d bytes of packet of length %d\n", sent
, pkt_len
); 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.