Frage

Ich führe einen kleinen Java -Server über Xinetd Superserver aus. Ich möchte die ursprüngliche Client -IP bekommen, aber ich kann es nicht, weil Streams zwischen Xinetd und Java (Stin/Stdout) sind.

Weiß jemand, wie man die Client -IP bekommt, ohne nach Xinetd Logfile zu suchen? (scheint mir eine schlechte Lösung)

Vielen Dank !

War es hilfreich?

Lösung

Angesichts der von Ihnen beschriebenen Situation ist es Ihre einzige Option, die Xinetd -Protokolldatei zu durchführen.

Wenn Ihre Java -Anwendung über die Standardeingabe- und Standardausgabe mit dem Client spricht, gibt es keine Möglichkeit für die Anwendung, auf den zugrunde liegenden Socket zuzugreifen. In der Tat glaube ich nicht, dass Sie dies in jeder Sprache tun könnten.

BEARBEITEN : Eigentlich könnten Sie dies wahrscheinlich in C und C ++ tun, da sie die Dateideskriptoren (FDS) freilegen und Bibliotheks -APIs für die Durchführung von Socket -Operationen mit FDS haben.

Aber es wird in reinem Java nicht funktionieren. Auch wenn Sie in den von den zugeordneten Stream -Objekten zum FD einbohren könnten System.in oder System.out, Ich glaube nicht Socket Objekt. Um Socket -Operationen auf den 0 und 1 des FD zu erledigen, müssten Sie auf JNI und native Code zurückgreifen.

Und wie der Kommentator betont, wird der Client -IP, den Sie aus dem Socket erhalten, die IP des Proxy sein, wenn der echte Client hinter einem Proxy steht.

Andere Tipps

Ich denke, Sie können anrufen getpeername Auf TCP -Sockets (aber nicht UDP) siehe Stevens Kapitel 4.10.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top