Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 1 Noviembre 2012, 02:56 AM

Título: Send() return -1 en C
Publicado por: soyloqbuskas en 1 Noviembre 2012, 02:56 AM
¡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: ");
               exit(-1);
       }


       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");
               exit(-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)
       {
               perror("Error binding raw socket to interface\n");
               exit(-1);
       }

       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.
Título: Re: Send() return -1 en C
Publicado por: soyloqbuskas en 2 Noviembre 2012, 01:40 AM
Una pregunta....¿Es posible que el error sea por que creo 2 sockets? es decir, ¿una aplicacion de C en linux solo puede abrir un solo sockect?

Es que ya no se me ocurren mas ideas....
Título: Re: Send() return -1 en C
Publicado por: BlackZeroX en 2 Noviembre 2012, 03:29 AM
La pregunta del millón a quien le quieres enviar los datos?... si no mal recuerdo en este tipo de sockets debes crearles el header respectivo cuando quieres usar send()...

Dulces Lunas!¡.
Título: Re: Send() return -1 en C
Publicado por: soyloqbuskas en 2 Noviembre 2012, 04:02 AM
Pues...creo que si....el socket lo asocio con un bind() a la interfaz de red wlan0 y el paquete que le mando tiene un struct ethdr + struct iphdr + struct tcphdr , deberia mandar algon antes del struct ethdr??