12

我目前正在做一个在 mac os 山狮上创建 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 脚本对管理员用户有错误的权限?或者有没有办法在端口 < 1024 上设置权限?(更改权限,对这样的服务器的安全性有何影响?)

任何更好的解决方案都值得关注。

4

4 回答 4

20

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

于 2013-03-23T08:03:08.107 回答
8

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

于 2012-12-17T16:18:33.730 回答
6

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

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

另一种方法是为您启动绑定端口并将其交给您的 Twisted 程序。这种方法更典型地是您可能会发现人们在 OS X 上所做的事情,并且是使用(最近引入的)IReactorSocket.adoptStreamPortAPI 完成的。有关如何配置它以及您的 Twisted 程序将如何了解它所采用的套接字的详细信息,请参阅 launchd 文档。

于 2012-12-15T16:36:49.837 回答
0

也许您的 tcp46 正在使用您的 80。关闭您的 APACHE,一切都会好起来的。

须藤 apachectl 停止

于 2014-03-02T04:19:32.337 回答