Cuando intento vincular el puerto 80 a un socket en c, siempre obtengo el error, que no tengo permiso para usar este puerto. ¿Hay alguna manera fácil de obtener este permiso?Encuadernación de un socket al puerto 80 en ansi c
Respuesta
Normalmente, solo el superusuario (raíz) puede vincularse a puertos 'privilegiados' (es decir, los números de puerto inferiores a 1024).
Esto significa que o bien tiene que ejecutar su programa como root o hacer que su ejecutable sea 'suid root'.
Ambos tienen consecuencias para la seguridad por lo que es posible que desee considerar el uso del enfoque de suid y renunciar a los privilegios de superusuario, una vez se haya realizado la llamada bind.
Si usted está en un sistema compartido (como una computadora de la universidad) y no la raíz, entonces no hay manera 'fácil' para conseguir ese permiso, por diseño.
Encontrará this tutorial muy útil en la programación de la red con C/C++. Por favor, ANSI C no tiene forma de acceder a la red. Son las bibliotecas proporcionadas por el SO (la API de socket BSD, también portada a Windows como winsock
) que proporcionan esta capacidad.
La guía de enchufes de Beej es lo que aprendí de la programación de tomas en la universidad, junto con generaciones de otros estudiantes de informática. Es muy bueno. Además, las obras de W. Richard Stevens son un buen tutorial en este espacio. – ConcernedOfTunbridgeWells
Sí, aunque toma menos tiempo leer los tutoriales de Beej que las biblias de Stevens :-) –
Es tan @Charles Bailey pone ... y me gustaría añadir que esta es la razón que se utiliza para ver las direcciones del servidor HTTP en 8080 por la especificación de puerto en la URL como http://some.url: 8080/
Tradicionalmente sólo root puede unir a los puertos tomas bajo 1024.
puertos 1024 y por debajo de los llamados puertos privilegiados , la unión a estos puertos requiere el permiso elevada.
Los puertos de más de 1024 se llaman Emphemeral Ports. La vinculación a estos no requiere permisos especiales.
La manera más fácil de obtener acceso a puertos privilegiados es ser el usuario root.
Sí, puede enlazar fácilmente al puerto 80. Use Apache. Escribe una aplicación web. Apache se une al puerto 80 y ejecuta su aplicación web.
¿Estás tratando de escribir el próximo Apache? Si es así, deberá conocer la llamada a la API setuid en su sistema operativo.
Si no está escribiendo una nueva versión de Apache, la mayoría de las personas usan un puerto no privilegiado. 8000 es popular, 8080.
La respuesta de S.Lott puede haber provocado reacciones muy negativas, pero su idea no es estúpida: si la pregunta original es para un programa real (no una tarea escolar), desarrollándolo como un la aplicación detrás de un servidor HTTP es a menudo una elección razonable. De esta forma, puede dejar muchos detalles de bajo nivel en un programa bueno y bien depurado, Apache.
La aplicación no tiene que ser un CGI, puede ser un módulo de Apache. Apache, de la versión 2, ya no es solo un servidor HTTP. Ahora es una plataforma para desarrollar programas de red. Escribir un módulo Apache puede ser la respuesta correcta a la pregunta original (consulte Apache documentation)
Gracias. Me tomó un tiempo aprender * por qué * hay puertos privilegiados. Tiene que ver con las expectativas: esperas que el protocolo http en el puerto 80, y ya hay una buena pieza de software para manejar ese protocolo por ti. –
Los programas normales no pueden enlazar puertos "privilegiados", es decir, los que están por debajo de 1024.Esta es una característica de seguridad mayormente obsoleta de los sistemas operativos tipo UNIX.
Correr como superusuario, aunque sugerido por muchos otros aquí, es una mala solución a este problema. Si está ejecutando un sistema Debian o Ubuntu, le sugiero que instale el paquete authbind, que le permitirá otorgar permiso a su programa para abrir puertos con privilegios sin tener que darle a su programa ningún otro permiso especial.
Si está ejecutando en cualquier otro sistema, sugiero instalar debian o ubuntu ;-).
- 1. El reenvío de puertos desde el puerto 80 al puerto 80 de VirtualBox no funciona
- 2. Enlazar un servidor web al puerto 80 sin ser root
- 3. ¿Cómo escuchan dos navegadores simultáneamente en el puerto 80?
- 4. Ejecutando Sinatra en el puerto 80
- 5. Node.js: ECONNREFUSED en el puerto 80
- 6. IPN de PayPal en un puerto que no sea 80
- 7. ¿Cómo puedo cambiar el puerto predeterminado (8080) en Amazon EC al puerto 80
- 8. Múltiples conexiones en el mismo socket de puerto C++
- 9. ¿Es posible usar el puerto 80 para tráfico HTTP y socket web?
- 10. ¿Cuál es la diferencia de ANSI Smalltalk y Smalltalk-80?
- 11. Cómo ejecutar PyCharm usando el puerto 80
- 12. Servidor web en el puerto 80 en el iPhone
- 13. Apertura del puerto 80 con la aplicación Java en Ubuntu
- 14. Vuelva a vincular un puerto al socket de datagrama en un IP
- 15. Uso del puerto 80 con IIS Express dentro de VS2010
- 16. Cómo ejecutar los rieles s-p80 en el puerto 80?
- 17. ¿Por qué Web.py no me permite ejecutar un servidor en el puerto 80?
- 18. ¿Cómo vincular un Socket Raw a un puerto específico?
- 19. Apertura del puerto 80 EC2 Servicios web de Amazon
- 20. Apache e IIS uno al lado del otro (ambos escuchando el puerto 80) en windows2003
- 21. encuadernación tardía en C
- 22. Obtener puerto aleatorio para socket UDP
- 23. Redirigiendo el tráfico de websocket en el puerto 80 con lighttpd
- 24. Bloques de socket Java en la conexión a un servidor
- 25. Parse JSON en ANSI C
- 26. Cerrar un socket TCP de escucha en C
- 27. Cómo crear una conexión de socket TCP usando C a un puerto predefinido
- 28. C/Python Socket Performance?
- 29. Configurar Apache para escuchar en un puerto que no sea 80
- 30. Cómo configurar el puerto de origen en el socket UDP en c?
Los puertos 1024 y siguientes se llaman realmente "puertos con privilegios" y no "puertos seguros", todo lo que está por encima de 1024 son "puertos efímeros". Aclamaciones. – paxos1977