socket.error: [Errno 10013] Была сделана попытка получить доступ к сокету способом, запрещенным его правами доступа - PullRequest
27 голосов
/ 06 мая 2010

Я пытаюсь создать собственный стек TCP, используя Python 2.6.5 в Windows 7, чтобы локально обслуживать действительные запросы http-страницы через порт 80. Но я столкнулся с проблемой, связанной с усилением безопасности в Windows 7. Этот код работал на Vista.

Вот мой пример кода:

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 (последний вызов был последним):
Файл "TestServer.py", строка 19, в сервер = SocketServer.TCPServer ((HOST, PORT), MyTCPHandler) Файл "C: \ Python26 \ Lib \ SocketServer.py", строка 400, в init self.server_bind () Файл "C: \ Python26 \ lib \ SocketServer.py", строка 411, в server_bind self.socket.bind (self.server_address) Файл "", строка 1, в связке

socket.error: [Errno 10013] Попытка был сделан для доступа к сокету в пути запрещено его разрешениями на доступ

Как именно это заставить работать на Windows 7?

[Редактировать 5/5/2010 @ 2344 PDT] Этот ответ объясняет, что ошибка вызвана необходимостью повышенных / суперпользовательских привилегий при доступе к портам ниже 1024. используя более высокий номер порта, чтобы увидеть, работает ли это. Однако я все еще хотел бы знать, почему моя локальная учетная запись администратора не может получить доступ к порту 80.

Ответы [ 11 ]

0 голосов
/ 09 ноября 2014

Я нашел решение для решения этой проблемы в Python.

Перейдите в каталог c: \ python27 \ и Rigtlcick python.exe и перейдите на вкладку совместимости, выберите опцию привилегий администратора и примените изменения. Теперь вы вводите команду, позволяющую создать сокет-соединение.

...