twisted.internet.error.CannotListenError:听不到任何:80:[Errno 13]权限被拒绝

tut*_*ike 11 macos tcp twisted

我目前正在开发一个在mac os mountain lion上创建TCP服务器的项目.我写了一个名为Server.py的脚本

在这个python脚本中,我使用twisted来侦听端口80,如下所示:

reactor.listenTCP(80, factory)
reactor.run()
Run Code Online (Sandbox Code Playgroud)

我怎么会这样得到错误:

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.
Run Code Online (Sandbox Code Playgroud)

我在想是因为tcp.py脚本对admin用户有错误的权限?或者有没有办法设置端口<1024的权限?(要更改权限,它将如何影响此类服务器的安全性?)

任何更好的解决方案都是适用的.

Qas*_*han 20

只需转到终端并输入sudo python server.py即可.现在它会询问密码,输入您的密码.你的问题将得到解决.快乐的编码


tut*_*ike 8

我使用命令sudo +启动服务器解决了这个问题.

  • 帮帮我吧。但是你能解释一下为什么我们在开始时需要“sudo”吗? (2认同)

Jea*_*one 6

听起来你走在正确的轨道上.按照惯例,只允许超级用户(或者,在某些较新的系统中,已被授予某些特殊权限的普通用户)绑定到1024以下的端口.

authbind工具是将此权限授予非超级用户的便捷方式.似乎有一个OS X端口,https://github.com/Castaglia/MacOSX-authbind(尽管我自己只在Linux上使用过authbind).

另一种方法是让launchd为你绑定端口并将其交给你的Twisted程序.这种方法更常见于人们在OS X上所做的事情,并且是使用(最近推出的)IReactorSocket.adoptStreamPortAPI完成的.有关如何配置此内容以及Twisted程序如何了解其采用套接字的位置的详细信息,请参阅launchd文档.