socket.error:[Errno 13]创建伪造的电子邮件服务器时,权限被拒绝
问题内容:
我正在尝试创建一个虚假的电子邮件服务器,作为Flask应用程序的一部分,以使用以下脚本在控制台上打印出错误。但是,它将引发错误。我怎样才能解决这个问题?
dpadmins-MacBook:microblog presentation$ python -m smtpd -n -c DebuggingServer localhost:25
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtpd.py", line 536, in <module>
(options.remotehost, options.remoteport))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtpd.py", line 285, in __init__
self.bind(localaddr)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py", line 342, in bind
return self.socket.bind(addr)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied
问题答案:
在unix(Linux,Mac OS X,BSD等)系统中,小于1024的端口不能被普通用户绑定,只有root用户可以绑定到那些端口。
为了解决这个问题,您可以以root身份运行python应用程序(使用sudo),但这不是可取的。是否有可能让Flask应用程序在更高的端口(例如2525)上与localhost通讯?然后,您将需要修改用于启动smtp服务器的命令,以在端口2525(而不是端口25)上进行绑定。