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

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

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

Как точно я заставляю это работать над Windows 7?

[Редактирование на 05.05.2010 23:44 PDT] Этот ответ объясняет, что ошибка вызывается потребностью в поднятом / полномочия суперпользователя при доступе к портам ниже, чем 1 024. Я собираюсь попытаться использовать более высокий номер порта, чтобы видеть, работает ли это. Однако я все еще хотел бы знать, почему моя локальная администраторская учетная запись не может порт доступа 80.

29
задан Community 23 May 2017 в 12:32
поделиться

1 ответ

В Windows Vista/7 с UAC учетные записи администраторов по умолчанию запускают программы в непривилегированном режиме.

Программы должны запрашивать доступ администратора, прежде чем запускаться от имени администратора, с помощью хорошо знакомого диалогового окна UAC. Поскольку сценарии Python не являются непосредственно исполняемыми, опция контекстного меню "Запуск от имени администратора" отсутствует.

Можно использовать ctypes.windll.shell32.IsUserAnAdmin(), чтобы определить, имеет ли скрипт доступ администратора, и ShellExecuteEx с глаголом 'runas' на python.exe, с sys.argv[0] в качестве параметра, чтобы вызвать диалог UAC, если необходимо.

18
ответ дан 28 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: