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的权限?(要更改权限,它将如何影响此类服务器的安全性?)
任何更好的解决方案都是适用的.
听起来你走在正确的轨道上.按照惯例,只允许超级用户(或者,在某些较新的系统中,已被授予某些特殊权限的普通用户)绑定到1024以下的端口.
该authbind工具是将此权限授予非超级用户的便捷方式.似乎有一个OS X端口,https://github.com/Castaglia/MacOSX-authbind(尽管我自己只在Linux上使用过authbind).
另一种方法是让launchd为你绑定端口并将其交给你的Twisted程序.这种方法更常见于人们在OS X上所做的事情,并且是使用(最近推出的)IReactorSocket.adoptStreamPortAPI完成的.有关如何配置此内容以及Twisted程序如何了解其采用套接字的位置的详细信息,请参阅launchd文档.