我目前正在开发一个在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? (要更改权限,它将如何影响此类服务器的安全性?)
任何更好的解决方案都是适用的。
答案 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