Подтвердить что ты не робот

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 = "<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.pyTraceback (последний последний звонок):
Файл "TestServer.py", строка 19, в     server = 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, в bind

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я только столкнулся с той же проблемой, моя система - Win7. просто используйте команду на терминале, например: netstat -na | findstr port, вы увидите, что порт был использован. Поэтому, если вы хотите запустить сервер без этого сообщения, вы можете изменить другой порт, который не был использован.

Ответ 3

McAfee блокировал его для меня. Я должен был разрешить программе в правилах защиты доступа

  • Открыть VirusScan
  • Щелкните правой кнопкой мыши Защита доступа и выберите Свойства
  • Нажмите "Стандартная защита от вирусов"
  • Выберите правило "Запретить отправку почтовых сообщений червям почты" и нажмите "Изменить"
  • Добавьте приложение в список "Процессы для исключения" и нажмите "ОК"

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

Ответ 4

Для меня это так жаловалось на Windows 7 x64, когда у меня был другой процесс, уже прослушивающий тот же порт.

В настоящее время занятые (связанные) порты можно просмотреть, запустив

netstat -ban

Ответ 5

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

Получите это с помощью колбы:

Указывает, что порт, к которому вы пытаетесь привязать, уже используется другой службой или процессом: получил подсказку об этом в моем коде, разработанном в 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)

Ответ 6

Попробуйте запустить сервер на другом порту. Работал для меня:

python manage.py runserver 127.0.0.1:7000

Объяснение:

как упомянуто в документации Django:

Если вы запустите этот скрипт как пользователь с обычными привилегиями (рекомендуется), у вас может не быть доступа для запуска порта с низким номером порта. Младшие номера портов зарезервированы для суперпользователя (root).

Этот сервер использует объект приложения WSGI, заданный параметром WSGI_APPLICATION.

НЕ ИСПОЛЬЗУЙТЕ ЭТОТ СЕРВЕР В НАСТРОЙКЕ ПРОИЗВОДСТВА. Он не прошел аудит безопасности или тесты производительности. (И так оно и останется. Мы занимались созданием веб-фреймворков, а не веб-серверов, поэтому улучшение этого сервера для обработки продакшен среды выходит за рамки Django.)

Ответ 7

Мне пришлось разрешить.. \python27\python.exe в брандмауэре Windows. Мне не нужно делать это на WinXP или Win8.

Ответ 8

Просто запускайте на портах выше 1024, что-то ниже привилегированное, его та же самая сделка с Linux, я использую 5000, например, на выигрыше без какой-либо приватизации UAC.

Ответ 9

Кажется, порт 80 уже используется. Попробуйте использовать другой порт, который не используется никаким другим приложением в вашей системе.

Ответ 10

Основной проблемой является номер порта, используемого другим приложением. Поэтому вы можете изменить номер порта на неиспользуемый, как показано ниже.

В Windows вы можете просмотреть номера используемых портов в разных приложениях в диспетчере задач Windows.

python manage.py runserver 127.0.0.1:portnumber
Ex: python manage.py runserver 127.0.0.1:8080

Ответ 11

Отключить защиту доступа в антивирусе,

Я столкнулся с той же проблемой, наконец нашел ниже журналы от антивируса.

Заблокировано правилом защиты доступа NT AUTHORITY\SYSTEM C:\WINDOWS\SYSTEM32\SVCHOST.EXE C:\ПРОГРАММНЫЕ ФАЙЛЫ (X86)\MCAFEE\VIRUSSCAN ENTERPRISE\MCCONSOL.EXE Общая стандартная защита: предотвращение завершения процессов McAfee Действие заблокировано: Завершить Заблокировано правилом блокировки портов C:\USERS\username\APPDATA\LOCAL\PROGRAMS\PYTHON\PYTHON37-32\PYTHON.EXE Стандартная защита от вирусов: предотвращает массовую рассылку червей от отправки почты

Ответ 12

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

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