2014-09-07 2 views
5

J'essaie de créer un faux serveur de messagerie dans le cadre d'une application Flask pour imprimer les erreurs sur la console en utilisant le script suivant. Cependant, il génère une erreur. Comment puis-je réparer cela?socket.error: [Errno 13] Autorisation refusée lors de la création d'un faux serveur de messagerie

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 

Répondre

22

Dans les systèmes Unix (Linux, Mac OS X, BSD, etc.), les ports inférieurs à 1024 ne peuvent pas être liés par des utilisateurs normaux, seul l'utilisateur root peut se lier à ces ports. Pour contourner cela, vous pouvez exécuter votre application python en tant que root (en utilisant sudo), mais ce n'est pas préférable. Est-il possible de faire en sorte que votre application Flask communique avec localhost sur un port plus élevé, par exemple 2525? Vous devrez alors modifier la commande que vous utilisez pour démarrer le serveur SMTP à lier sur le port 2525 au lieu de 25.

0

Exécutez le programme en tant que superutilisateur. Le port smtp comme tout port < = 1024 est réservé au système et ne peut pas être utilisé par des utilisateurs normaux.

3

Si vous faites cela comme un exercice, @solarnz a la bonne approche. Si toutefois, vous avez besoin de ce fait pour le travail il y a une solution beaucoup mieux dans mailcatcher:

MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that's arrived so far.

Ce programme est spécialement conçu pour les développeurs dont les applications ont besoin d'un serveur de messagerie pour les tests, mais ils ne veulent pas mettre un en haut

Le grand avantage est qu'il est livré avec une interface Web pour afficher les messages envoyés par votre application:

mailcatcher web interface

2

Execute programme avec previliages racine ou Sudo, mais comme suggéré ci-dessus ce n'est pas recommandé,

donc configurer votre service sur le port> = 1024 puis inverser la configuration proxy pour votre service ou

rediriger tous les embouteillées du port 25 à votre service port,

Par exemple:

/sbin/iptables -t nat -I PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 2525 
0

peut-être SELinux causer ce problème .. Je problème résolu par par "setenforce 0".

Questions connexes