2011-04-10 4 views
0

Je construis une application de type messager vocal ... mon application serveur devrait recevoir plusieurs connexions et doit b donné la possibilité de choisir une connexion ...python question simple socket

mon problème est que je ne suis pas savoir comment afficher l'adresse IP de toutes les connexions qui viennent avant de choisir une adresse IP spécifique et se connecter à elle .. J'utilise Python sur Ubuntu ...

+0

Je suis curieux de savoir pourquoi votre serveur n'accepte pas seulement toutes les connexions entrantes? – sarnold

+0

il accepte ... je veux qu'il n'accepte que celui que je choisis en fonction de l'IP entrant ... – Pawan

Répondre

3

Il n'y a pas de mécanisme API qui vous permet de lire l'adresse de l'homologue d'un potentiel connexion avant vous accept(2) que connexion. Il n'existe pas au niveau des sockets, donc il ne sera pas non plus en Python.

Si vous voulez construire façon trop de connaissances de votre environnement d'exploitation dans votre application, vous pouvez toujours utiliser libpcap ou winpcap ou des outils similaires à renifler le fil pour le trafic entrant, mais (a) cela exige des privilèges élevés, ce qui est souvent une idée horrible (b) est vraiment sans rapport avec la plupart des tâches du serveur de communication.

Qu'est-ce que le mécanisme ne tcp_wrappers est accept(2) la connexion entrante, appelez getpeername(2) sur la prise, puis la prise close(2) si le programme en utilisant le tcp_wrappers ne devrait pas parler avec ce poste à distance. (Voir /etc/hosts.allow, /etc/hosts.options, hosts.allow(5) manpage.) Cela pourrait être impoli pour les clients, mais l'administrateur système a décidé d'interdire de parler avec eux de toute façon, donc être amical n'est pas une priorité très élevée.

Alors, est-il acceptable de simplement close(2) connexions après vous avez déjà accept(2) ed la connexion? Si oui, vous pouvez utiliser socket.getpeername() pour trouver l'adresse IP de l'homologue distant, faites ce dont vous avez besoin, puis appelez socket.close() sur le socket si vous n'avez pas accepté la connexion en premier lieu.

+0

ouais cela devrait faire le travail pour moi ... reste a'll mettre en œuvre une logique de contrôle .. merci .. . – Pawan