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.
Je suis curieux de savoir pourquoi votre serveur n'accepte pas seulement toutes les connexions entrantes? – sarnold
il accepte ... je veux qu'il n'accepte que celui que je choisis en fonction de l'IP entrant ... – Pawan