• Lunes 13 de Mayo de 2024, 13:55

Autor Tema:  Winsock RAW sockets  (Leído 1428 veces)

mathew

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Winsock RAW sockets
« en: Miércoles 3 de Junio de 2009, 00:18 »
0
Hola,

Estoy usando RAWSOCKETs para conectar dos programas. EL envio funciona perfectamente, y puedo ver los paquetes que llegan a la maquina destino, pero esta no captura ningun paquete, se queda en la funcion recvfrom() bloqueada e ignorando todos los paquetes que llegan....


El codigo es mas o menos:

s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
...
    se.sin_family      = AF_INET;
    se.sin_addr.s_addr = htonl(INADDR_ANY);
     se.sin_port = 0;

   if (   bind(s, (struct sockaddr *) &se, seSize) <0)
      printf("Error bindingn");
.....
   iReceivedLen = recvfrom(s, buf, receivesize, 0, (struct sockaddr *)&se, &seSize);

No se si tengo que hacer algo mas... recvfrom() simplemente se bloquea como si ningun paquete llegase.
Tambien he intentado WSAIoctl -SIO_RCVALL aunque siempre tengo un error 10022.

POR FAVOR necesito ayuda!!!  Gracias

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Winsock RAW sockets
« Respuesta #1 en: Miércoles 3 de Junio de 2009, 19:07 »
0
puede que el fallo este en:
Código: C
  1. se.sin_port = 0;
  2.  
puesto que no le indicas en que puerto tiene que escuchar, sino que escoga uno libre cualquiera.

lo lógico es especficar un puerto. Por ejemplo:
Código: C
  1.  se.sin_port = htons(26000);
  2.  
y luego enviar los mensajes a ese puerto.

mathew

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Winsock RAW sockets
« Respuesta #2 en: Jueves 4 de Junio de 2009, 14:08 »
0
Gracias por tu respuesta.
He estado probando eso tambien y parece que no es el problema.... Ademas que como uso directamente IP no deberia necesitar ningun puerto... y el emisor no esta enviando los paquetes a ningun puerto especifico...
Alguna sugerencia??

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Winsock RAW sockets
« Respuesta #3 en: Viernes 5 de Junio de 2009, 19:48 »
0
Si no quieres recibir por un puerto en concreto sino capturar todo lo que se recibe creo que debería quitar la función bind.
Prueba a comentar ese trozo de código a ver si funciona.

mathew

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Winsock RAW sockets
« Respuesta #4 en: Lunes 8 de Junio de 2009, 15:27 »
0
Cita de: "punteroNULO"
Si no quieres recibir por un puerto en concreto sino capturar todo lo que se recibe creo que debería quitar la función bind.
Prueba a comentar ese trozo de código a ver si funciona.

Mmm... no. Sin el bind() sigue sin recibir nada : (
Quiza el truco este en el propio bind, pero lo he configurado de 1000 maneras sin exito... realmente estoy atascado.