Question

Je suis en cours d'exécution d'un petit serveur java par SuperServer xinetd. Je voudrais obtenir l'adresse IP du client d'origine, mais je ne peux pas parce que les flux sont entre xinetd et java (Stin / stdout).

Quelqu'un sait comment obtenir l'adresse IP du client, sans regarder à xinetd logfile? (Semble une mauvaise solution pour moi)

Merci!

Était-ce utile?

La solution

Compte tenu de la situation que vous avez décrite, la pêche au chalut dans le fichier journal xinetd est votre seule option.

Si votre application Java parle au client via son entrée et la sortie standard, il n'y a aucun moyen pour l'application d'accéder à la prise sous-jacente. En effet, je ne pense pas que vous pouvez le faire dans toutes les langues.

EDIT :. En fait, vous pourriez probablement faire en C et C ++, car ils exposent les descripteurs de fichiers (fds) et ont des API bibliothèque pour effectuer des opérations de socket en utilisant fds

Mais il ne fonctionnera pas en Java pur. Même si vous pouvez percer jusqu'à la fd à l'intérieur des objets de flux associés à System.in ou System.out, je ne pense pas que les bibliothèques de classes Java fournissent une API pour transformer le fd dans un objet Socket. Pour effectuer des opérations de prise sur le fd de 0 et 1 vous auriez besoin de recourir à JNI et du code natif.

Et comme l'intervenant souligne, si le client réel est derrière un proxy, l'adresse IP du client que vous obtenez de la prise sera l'adresse IP du proxy.

Autres conseils

Je pense que vous pouvez appeler getpeername sur les sockets TCP (mais pas UDP), voir chapitre Stevens 4.10 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top