Implicaciones de seguridad de configurar el indicador de difusión en un socket UDP

2

¿Hay efectos de seguridad negativos al configurar la opción SO_BROADCAST en un socket C UDP? Estoy escribiendo un programa en C y si simplemente configuro la opción de difusión en 1, todas las direcciones IP funcionan como se espera, pero si no la configuro, el núcleo solo aceptará las direcciones IP de unicast o multicast.

    
pregunta user 27.02.2018 - 21:41
fuente

1 respuesta

0

Por lo que sé, el envío de transmisiones a través del protocolo UDP es normal. Por lo tanto, no hay problema para usar SO_BROADCAST en setsockopt(2) .

Descargo de responsabilidad : lo único que DEBE conocer es el pequeño cambio de optval (en setsockopt(2) ) entre Linux y el entorno Solaris / sunOS.

ejemplo de código de fragmento:

  static int fd = -1;
/* Use the SVR4 macros to distinguish between Solaris and SunOS */
#if defined(sun) || defined(__sun) || defined(__SVR4) || defined(__svr4__)
/* Solaris || SunOS */
  char on = '1';
#else /* defined(__linux__) */
  uint32_t on = 1;
#endif
  if ((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))== -1)
  {
#ifndef NDEBUG
    dbg_err_fputs("Cannot open datagram: \"%s\"", strerror(errno));
#else
    dbg_err_fputs("Cannot open datagram");
#endif
  }


#ifdef SO_BROADCAST
  if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1)
  {
#ifndef NDEBUG
    dbg_err_fputs("Cannot set brodcast flag in socket optname: \"%s\"", strerror(errno));
#else
    dbg_err_fputs("Cannot set broadcast flag in socket optname");
#endif
  }
#endif /* SO_BROADCAST */

Si su plataforma de desarrollo es Solaris / sunOS, tendrá que agregar algunas marcas al final del comando durante la compilación: -lnsl -lsocket . Dependiendo de la versión de Solaris / SunOS, el socket solo funcionará si agrega el indicador -lxnet ... Si el error persiste: -lresolv .

    
respondido por el slayer owner 11.08.2018 - 12:47
fuente

Lea otras preguntas en las etiquetas