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

时间:2012-12-15 06:20:49

标签: macos tcp twisted

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

的脚本

在这个python脚本中,我使用twisted来侦听端口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脚本对admin用户有错误的权限?或者有没有办法设置端口的权限< 1024? (要更改权限,它将如何影响此类服务器的安全性?)

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

4 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:8)

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:0)

也许你的tcp46正在使用你的80。 关掉你的APACHE,一切都会很精致。

sudo apachectl stop