2012-12-15 94 views
11

我目前正在开发一个项目,以在mac os mountain lion上创建TCP服务器。我写了一个叫脚本:Server.pytwisted.internet.error.CannotListenError:无法侦听任何:80:[Errno 13]权限被拒绝

在这个python脚本,我用双绞线端口时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上设置权限? (要更改权限,它将如何影响此类服务器的安全性?)

任何更好的解决方案都可以应用。

回答

9

我使用命令sudo +启动服务器来解决此问题。

+1

对我有帮助。但是你能解释一下为什么我们需要开始“sudo”吗? – iPatel

+1

在OS中,默认情况下,只有管理员才允许执行某些操作。在命令之前放置“sudo”,然后提供用户凭据基本上意味着您正在授权此类操作。启动服务器意味着允许访问互联网,这可能会带来安全威胁,因此,只有该机器的管理员才能执行此操作。 – shorttermmem

+0

谢谢你提高我的知识。 – iPatel

5

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

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

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

+0

twisted.internet.error.CannotListenError:任何无法听:80:[错误48]在使用中已地址。 你有没有经历过这样的错误。对于论坛上的大多数帖子,[Errno 98]已被抱怨了很多,但不是48.我确实使用“lsof -i:80”来检查正在运行的进程绑定到这个端口80,然后杀死所有这些包括web浏览器使用“sudo kill PID”。但是,问题依然存在。我现在很困惑。 – shorttermmem

+1

即使没有程序正在监听端口,端口也可能正在使用。在正在监听的程序退出(或以其他方式关闭监听套接字)后,最多两分钟,TCP连接可能会保持TIME_WAIT状态。这些阻止了新的套接字在端口上侦听。但是,Twisted使用BSD套接字API的SO_REUSEADDR功能来避免此问题。 –

+1

因此,即使在没有程序监听端口后,有时您可能会看到“地址已在使用中”错误,但这可能不是这里发生的情况。有些程序更可能还在使用该端口。网络浏览器不太可能在端口80上进行监听,所以你可能会误解你的工具的输出。再检查一遍。 –

21

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

+1

帮助我。但是你能解释一下为什么我们需要开始“sudo”吗? – iPatel

2

也许你的tcp46正在使用你的80. 关掉你的APACHE,一切都将是美好的。

须藤的apachectl停止

相关问题