elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Send() return -1 en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Send() return -1 en C  (Leído 2,439 veces)
soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Send() return -1 en C
« 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.


« Última modificación: 1 Noviembre 2012, 03:00 am por soyloqbuskas » En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Re: Send() return -1 en C
« Respuesta #1 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....


En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Send() return -1 en C
« Respuesta #2 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!¡.
En línea

The Dark Shadow is my passion.
soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Re: Send() return -1 en C
« Respuesta #3 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??
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Return Fire2
Juegos y Consolas
juanjorome 2 2,285 Último mensaje 3 Febrero 2005, 03:48 am
por juanjorome
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines