Я пытаюсь создать пользовательский стек 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.
В Windows Vista/7 с UAC учетные записи администраторов по умолчанию запускают программы в непривилегированном режиме.
Программы должны запрашивать доступ администратора, прежде чем запускаться от имени администратора, с помощью хорошо знакомого диалогового окна UAC. Поскольку сценарии Python не являются непосредственно исполняемыми, опция контекстного меню "Запуск от имени администратора" отсутствует.
Можно использовать ctypes.windll.shell32.IsUserAnAdmin()
, чтобы определить, имеет ли скрипт доступ администратора, и ShellExecuteEx
с глаголом 'runas' на python.exe, с sys.argv[0] в качестве параметра, чтобы вызвать диалог UAC, если необходимо.