create - python sockets 3
socket.error:[Errno 10013] Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso (7)
Estoy intentando crear una pila TCP personalizada utilizando Python 2.6.5 en Windows 7 para atender solicitudes de página http válidas en el puerto 80 localmente. Pero, me encontré con un problema con lo que parece ser la seguridad reforzada de Windows 7. 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 = "<html><body>some page</body></html>"
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 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) File "", línea 1, en enlacesocket.error: [Errno 10013] Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso
¿Cómo hago para que esto funcione en Windows 7?
[Editar en 5/5/2010 @ 2344 PDT] Esta answer explica que el error es causado por 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 eso trabajos. Sin embargo, todavía me gustaría saber por qué mi cuenta de administrador local no puede acceder al puerto 80.
Acabo de encontrar el mismo problema, mi sistema es Win7. simplemente use el comando en la terminal como: netstat -na | findstr port, verá que se ha usado el puerto. Entonces, si desea iniciar el servidor sin este mensaje, puede cambiar otro puerto que no se haya utilizado.
En Windows Vista / 7, con UAC, las cuentas de administrador ejecutan programas en modo no privilegiado de forma predeterminada.
Los programas deben solicitar acceso de administrador antes de que se ejecuten como administrador, con el cuadro de diálogo de UAC siempre familiar. Como los scripts de Python no son ejecutables directamente, no hay una opción de 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 solicitar el diálogo de UAC si es necesario.
Encontré una solución para resolver este problema en Python.
vaya a c: / python27 / directory y rigtlcick python.exe y tab a compaitbility y seleccione la opción de privilegio admin y aplique los cambios. Ahora emite el comando que permite crear la conexión de socket.
McAfee me lo estaba bloqueando. Tuve que permitir que el programa en las reglas de protección de acceso
- Abra VirusScan
- Haga clic derecho en Protección de acceso y elija Propiedades
- Haga clic en "Protección estándar de antivirus"
- Seleccione la regla "Impedir que los gusanos de correo masivo envíen correo" y haga clic en Editar
- Agregue la aplicación a la lista de 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í, me 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 (encuadernados) ejecutando
netstat -ban
Tuve que permitir ... / python27 / python.exe en el firewall de Windows. No necesito hacer esto en WinXP o Win8.
socket.error: [Errno 10013] Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso
Tengo esto con el matraz :
Significa que el puerto al que intentas enlazar ya está siendo usado 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)