socket.error: Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso

Estoy tratando de crear una stack TCP personalizada usando Python 2.6.5 en Windows 7 para servir solicitudes de página http válidas en el puerto 80 localmente. Pero, me he encontrado con un problema con lo que parece que Windows 7 reforzó la seguridad. Este código funcionó en Vista.

Aquí está mi código de muestra:

import SocketServer import struct class MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): headerText = """HTTP/1.0 200 OK Date: Fri, 31 Dec 1999 23:59:59 GMT Content-Type: text/html Content-Length: 1354""" bodyText = "some page" self.request.send(headerText + "\n" + bodyText) if __name__ == "__main__": HOST, PORT = "localhost", 80 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever() 

C: \ python> python TestServer.py Traceback (última llamada más reciente):
Archivo “TestServer.py”, línea 19, en el servidor = SocketServer.TCPServer ((HOST, PORT), MyTCPHandler) Archivo “C: \ Python26 \ lib \ SocketServer.py”, línea 400, en init self.server_bind () Archivo “C: \ Python26 \ lib \ SocketServer.py”, línea 411, en server_bind self.socket.bind (self.server_address) Archivo “”, línea 1, en bind

socket.error: [Errno 10013] Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso

¿Cómo consigo exactamente que esto funcione en Windows 7?

[Editar en 5/5/2010 @ 2344 PDT] Esta respuesta explica que el error se debe a la necesidad de privilegios elevados / de superusuario cuando se accede a puertos inferiores a 1024. Voy a intentar usar un número de puerto más alto para ver si trabajos. Sin embargo, todavía me gustaría saber por qué mi cuenta de administrador local no puede acceder al puerto 80.

En Windows Vista / 7, con UAC, las cuentas de administrador ejecutan progtwigs en modo no privilegiado de forma predeterminada.

Los progtwigs deben solicitar el acceso del administrador antes de que se ejecuten como administrador, con el diálogo de UAC siempre tan familiar. Como los scripts de Python no son ejecutables directamente, no existe la opción del menú contextual “Ejecutar como administrador”.

Es posible usar ctypes.windll.shell32.IsUserAnAdmin() para detectar si el script tiene acceso de administrador, y ShellExecuteEx con el verbo ‘runas’ en python.exe, con sys.argv [0] como parámetro para abrir el cuadro de diálogo UAC si es necesario.

Me acabo de encontrar el mismo problema, mi sistema es Win7. solo use el comando en la terminal como: netstat -na | findstr port, verá que el puerto ha sido usado. Por lo tanto, si desea iniciar el servidor sin este mensaje, puede cambiar otro puerto que no se haya utilizado.

McAfee me lo estaba bloqueando. Tuve que permitir el progtwig en las reglas de protección de acceso.

  1. Abrir VirusScan
  2. Haga clic derecho en Protección de acceso y elija Propiedades
  3. Haga clic en “Protección estándar antivirus”
  4. Seleccione la regla “Evitar que los gusanos de correo masivo envíen correo” y haga clic en Editar
  5. Agregue la aplicación a la lista Procesos para excluir y haga clic en Aceptar

Consulte http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee

Para mí, se estaba quejando así en Windows 7 x64 cuando ya tenía otro proceso escuchando en ese mismo puerto.

Es posible ver los puertos actualmente ocupados (enlazados) ejecutando

 netstat -ban 

socket.error: [Errno 10013] Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso

Conseguí esto con el matraz :

Significa que el puerto al que está tratando de enlazar, ya está en uso por otro servicio o proceso : obtuve una pista sobre esto en mi código desarrollado en Eclipse / windows:

 if __name__ == "__main__": # Check the System Type before to decide to bind # If the system is a Linux machine -:) if platform.system() == "Linux": app.run(host='0.0.0.0',port=5000, debug=True) # If the system is a windows /!\ Change /!\ the /!\ Port elif platform.system() == "Windows": app.run(host='0.0.0.0',port=50000, debug=True) 

Tuve que permitir .. \ python27 \ python.exe en el firewall de Windows. No necesito hacer esto en WinXP o Win8.

Intente ejecutar el servidor en un puerto diferente. Trabajó para mi:

 python manage.py runserver 127.0.0.1:7000 

Explicación:

como se menciona en la documentación de Django:

Si ejecuta este script como un usuario con privilegios normales (recomendado), es posible que no tenga acceso para iniciar un puerto en un número de puerto bajo. Los números de puerto bajos están reservados para el superusuario (raíz).

Este servidor utiliza el objeto de aplicación WSGI especificado por la configuración WSGI_APPLICATION.

NO USE ESTE SERVIDOR EN UN AJUSTE DE PRODUCCIÓN. No ha pasado por auditorías de seguridad o pruebas de rendimiento. (Y así es como se mantendrá. Estamos en el negocio de crear marcos web, no servidores web, por lo que mejorar este servidor para poder manejar un entorno de producción está fuera del scope de Django).

Simplemente ejecútelo en puertos por encima de 1024, cualquier cosa a continuación tiene privilegios, es el mismo trato con Linux, yo uso 5000, por ejemplo, en victorias sin ningún escalamiento de privacidad de UAC.

Parece que el puerto 80 ya está en uso. Intente usar algún otro puerto que no esté en uso por ninguna otra aplicación en su sistema.

Encontré una solución para resolver este problema en Python.

vaya al directorio c: \ python27 \ y haga clic en python.exe y haga clic en tab para compaitbility y seleccione la opción de privilegio de administrador y aplique los cambios. Ahora usted emite el comando que le permite crear la conexión de socket.