10
votes

Création d'une prise limitée aux connexions locales uniquement

J'ai un programme Python avec de nombreux threads. Je pensais à créer une prise, à lier à Localhost et à lire / écrire dans cet emplacement central. Cependant, je ne veux pas que cette prise soit ouverte au reste du réseau, des connexions de 127.0.0.1 doivent être acceptées. Comment ferais-je cela (en python)? Et est-ce un design approprié? Ou y a-t-il quelque chose d'un peu plus élégant?


0 commentaires

6 Réponses :


0
votes

Si vous faites sock.bind ((port, '127.0.0.1')), il n'écoutera que sur localhost, et non sur d'autres interfaces, c'est tout ce dont vous avez besoin.


0 commentaires

8
votes

donné une prise créée avec socket.socket () , vous pouvez utiliser bind () avant d'écouter: xxx

à l'aide de l'adresse 127.0.0.1 indique que La prise doit uniquement se lier à l'interface locale.


3 commentaires

Cela ne se lie pas à inaddr_any ?


Pas selon AMK.ca/python/howto/sockets Bien que la documentation de Python réelle déclare que '' équivaut à inaddr_any . Je vais mettre à jour ma réponse.


Il se lie à inaddr_any si vous le dites (en spécifiant une foule de ''). Spécification d'une hôte de '127.0.0.1' Lié à 127.0.0.1




2
votes

Vous voudrez peut-être utiliser le Module de file d'attente de la bibliothèque standard. Il est conçu spécifiquement pour faciliter la communication entre les threads. Une citation des docs:

Le module de file d'attente implémente plusieurs producteurs, files d'attente multi-consommateurs. Il est particulièrement utile dans la programmation filetée lorsque les informations doivent être échangées en toute sécurité entre plusieurs threads. La classe d'attente de ce module implémente toutes les sémantiques de verrouillage requises. Cela dépend de la disponibilité du support de fil en python; Voir le module de threading.


0 commentaires


0
votes

NOTITIONON TCP / IP Networks 127.0.0.0.0/8 est un réseau non routier. Vous ne devez donc pas être en mesure d'envoyer un datagramme IP destiné à 127.0.0.1 sur une infrastructure acheminée. Le routeur jetera simplement le datagramme. Cependant, il est possible de construire et d'envoyer des datagrammes avec une adresse de destination de 127.0.0.1, donc un hôte sur le même réseau (IP Sens of Network) que votre hôte pourrait éventuellement obtenir le datagramme à la pile TCP / IP de votre hôte. C'est là que votre parewal local entre en jeu. Votre pare-feu local (hôte) doit avoir une règle qui élimine les datagrammes IP destinés à 127.0.0.0/8 entrant dans n'importe quelle interface autre que LO0 (ou l'interface de bouclage équivalente). Si votre hôte soit 1) a de telles règles de pare-feu en place ou 2) existe sur son propre réseau (ou partagé avec uniquement des hôtes entièrement approuvés) et derrière un routeur bien configuré, vous pouvez simplement vous attaquer à 127.0.0.1 et être assez certain tout Les datagrammes que vous recevez sur la prise provenaient de la machine locale. Les réponses antérieures traitent comment ouvrir et se lier à 127.0.0.1.


0 commentaires