Twisted.internet.error.CannotListenError: не удалось прослушать никого: 80: [Errno 13] Permission denied

В настоящее время я работаю над проектом по созданию сервера TCP на mac os mountain lion. Я написал script под названием: Server.py

Внутри этого python script я использовал скрученный, чтобы прослушивать порт 80, как показано ниже:

reactor.listenTCP(80, factory)
reactor.run()

Как бы то ни было, я получаю ошибки как таковые:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 436, in listenTCP
    p.startListening()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/tcp.py", line 641, in startListening
    raise CannotListenError, (self.interface, self.port, le)
twisted.internet.error.CannotListenError: Couldn't listen on any:80: [Errno 13] Permission denied.

Я думаю, это потому, что у tcp.py script есть неправильное разрешение для пользователя admin? или есть способ установить разрешение на порт < 1024? (Чтобы изменить разрешение, как это повлияет на безопасность такого сервера?)

Любые более эффективные решения будут apprieciated.

Ответ 1

Я решил эту проблему, используя команду sudo +, начиная с вашего сервера.

Ответ 2

Просто зайдите на терминал и введите sudo python server.py. Теперь он будет запрашивать пароль, введите пароль. Ваша проблема будет решена. Счастливое кодирование

Ответ 3

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

Инструмент authbind - это удобный способ предоставить эту привилегию не-суперпользователям. Кажется, есть порт OS X, https://github.com/Castaglia/MacOSX-authbind (хотя я всегда использовал authbind в Linux, сам).

Другой подход заключается в том, чтобы launchdb bind порт для вас и передать его в вашу программу Twisted. Этот подход более типичен для того, что вы можете найти в OS X, и выполняется с использованием (недавно представленного) API IReactorSocket.adoptStreamPort. Подробную информацию о том, как настроить это и как ваша программа Twisted узнает, где сокет должен принять, см. В документации для запуска.

Ответ 4

Возможно, ваш tcp46 использует ваш 80. ВЫКЛЮЧИТЕ ВАШ АПАЧ, ВСЕ БУДЕТ БЫТЬ УБЫТКОЙ.

sudo apachectl stop