Foro de elhacker.net

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:
Código
  1. int CreateRawSocket(int protocol_to_sniff){
  2. //Crea un raw socket
  3.        int rawsock;
  4.        if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1)
  5.        {
  6.                perror("Error creating raw socket: ");
  7.                exit(-1);
  8.        }
  9.  
  10.  
  11.        return rawsock;
  12. }

El bind lo hago asi:
Código
  1. int BindRawSocketToInterface(char *device, int rawsock, int protocol){
  2. //Hace un bind del socket con la interfaz de red
  3.  
  4.        struct sockaddr_ll sll;
  5.        struct ifreq ifr;
  6.  
  7.        bzero(&sll, sizeof(sll));
  8.        bzero(&ifr, sizeof(ifr));
  9.  
  10.        strncpy((char *)ifr.ifr_name, device, IFNAMSIZ);
  11.        if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1)
  12.        {
  13.                printf("Error getting Interface index !\n");
  14.                exit(-1);
  15.        }
  16.  
  17.        sll.sll_family = AF_PACKET;
  18.        sll.sll_ifindex = ifr.ifr_ifindex;
  19.        sll.sll_protocol = htons(protocol);
  20.  
  21.  
  22.        if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1)
  23.        {
  24.                perror("Error binding raw socket to interface\n");
  25.                exit(-1);
  26.        }
  27.  
  28.        return 1;
  29.  
  30. }

Luego creo un char * con los datos a enviar y lo envio con esta funcion:
Código
  1. int SendRawPacket(int rawsock, char *pkt, int pkt_len){
  2. //Envia un raw packet
  3.        int sent=0;
  4.  
  5.        if((sent = send(rawsock, pkt, pkt_len,TH_FLAGS)) != pkt_len)
  6.        {
  7.                /* Error */
  8.                printf("Could only send %d bytes of packet of length %d\n", sent, pkt_len);
  9.                return 0;
  10.        }
  11.  
  12.        return 1;
  13. }

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??