La création d'un socket restreint à localhost uniquement les connexions
J'ai un programme en python avec de nombreux fils. Je pensais à la création d'une socket, bind à localhost, et ont les threads de lecture/écriture à cet emplacement central. Je ne veux cependant pas cette prise, ouverte sur le reste du réseau, les connexions à partir de 127.0.0.1
devrait être acceptée. Comment pourrais-je le faire (en Python)? Et est-ce une conception adaptée? Ou est-il quelque chose d'un peu plus élégant?
OriginalL'auteur Dr. Johnson | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Donné un socket créé avec
socket.socket()
, vous pouvez utiliserbind()
avant d'écouter:À l'aide de l'adresse
127.0.0.1
indique que la prise doit se lier à l'interface locale seulement.INADDR_ANY
?Pas selon amk.ca/python/howto/sockets bien que le Python documentation indique que
''
est équivalent àINADDR_ANY
. Je vais mettre à jour ma réponse.Il se lie à INADDR_ANY si vous dites qu'il (par specfying une foule "). Spécifier un hôte de '127.0.0.1' lie à l'adresse 127.0.0.1
OriginalL'auteur Greg Hewgill
http://www.amk.ca/python/howto/sockets/
Montre quelques exemple de socket. Cette friandise est intéressant pour vous, je pense que
Je suppose qu'il est votre réponse (voir ci-dessous pour la correction)
Quant à la validité de l'utilisation de cette méthode pour le fil de la communication. Je ne suis pas sûr que cela gère plusieurs threads et de la lecture/écriture
MODIFIER
Il semble y avoir un python recette en lien ci-dessous qui fait de la communication inter-thread
http://code.activestate.com/recipes/491281/
Amusez-vous!
MODIFIER
L'article est incorrect et comme l'a souligné "s.bind((", 80)) lie INADDR_ANY"
Merci pour ce que je vais modifier pour refléter
OriginalL'auteur petantik
Si vous êtes en cours d'exécution sur un système de type UNIX, vous pouvez envisager d'utiliser Les Sockets de Domaine UNIX au lieu de prises Internet. Je pense que quelque chose comme ce qui suit devrait fonctionner:
Une Socket de Domaine UNIX offre la même fonctionnalité, car il est lié au système de fichiers. J'ai tendance à leur égard parce qu'ils ne sont pas en tant que ressource lourde que d'un socket IP.
OriginalL'auteur D.Shawley
Vous pouvez utiliser le la file d'attente du module de la bibliothèque standard à la place. Il est spécialement conçu pour faciliter la communication entre les threads. Une citation de l'docs:
OriginalL'auteur Michał Marczyk
notionOn les réseaux TCP/IP 127.0.0.0/8 est un non-routables réseau, de sorte que vous ne devriez pas être en mesure d'envoyer un datagramme IP destiné à 127.0.0.1 dans un acheminé de l'infrastructure. Le routeur va juste jeter le datagramme. Toutefois, il est possible de construire et d'envoyer des datagrammes avec une adresse de destination de l'adresse 127.0.0.1, si un hôte sur le même réseau IP (sens de réseau) en tant que votre hôte pourrait éventuellement obtenir le datagramme à votre hôte de la pile TCP/IP. C'est là que votre local firewal entre en jeu. De votre région (pays hôte) pare-feu doivent avoir une règle que les rejets des datagrammes IP destinés à 127.0.0.0/8 entrée en toute interface autre que lo0 (ou l'équivalent de l'interface de bouclage). Si votre hôte 1) a ces règles de pare-feu en place ou 2) il existe sur son propre réseau (ou partagée uniquement avec une confiance totale hôtes) et derrière un bien configuré le routeur, vous pouvez simplement lier à l'adresse 127.0.0.1 et être certain que tous les datagrammes de vous recevoir sur le socket est venu à partir de la machine locale. L'avant des réponses portent sur la manière d'ouvrir et de se lier à l'adresse 127.0.0.1.
OriginalL'auteur Dom Brezinski
Si vous n'chaussette.bind((port,'127.0.0.1')), il ne l'écoute sur localhost, et pas sur d'autres interfaces, c'est tout ce que vous avez besoin.
OriginalL'auteur nos