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.
Ответы
Ответ 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 и выберите параметр привилегии администратора и примените изменения. Теперь вы выдаете команду, которая позволяет создать соединение сокета.