Pregunta

Estoy corriendo un pequeño servidor Java a través superservidor xinetd. Me gustaría conseguir que el cliente IP de origen, pero no puedo, porque son corrientes entre xinetd y Java (stin / salida estándar).

¿Alguien sabe cómo conseguir que el cliente IP, sin mirar al archivo de registro xinetd? (Parece una mala solución para mí)

Gracias!

¿Fue útil?

Solución

En vista de la situación que ha descrito, la pesca de arrastre el archivo de registro xinetd es su única opción.

Si la aplicación Java está hablando con el cliente a través de la entrada estándar y salida estándar, no hay manera para que la aplicación acceder a la toma subyacente. De hecho, no creo que usted puede hacer esto en cualquier idioma.

Editar . En realidad, es probable que podría hacer esto en C y C ++ porque exponen los descriptores de archivos (FDS) y tienen API de biblioteca para hacer operaciones con conectores utilizando FDS

Pero no va a funcionar en Java puro. Incluso si se pudiera profundizar en el interior de la Corriente del fd objetos asociados con System.in o System.out, no creo que las bibliotecas de clases de Java proporcionan una API para convertir el fd en un objeto Socket. Para hacer operaciones con conectores en la fd de 0 y 1 que tendría que recurrir a la JNI y el código nativo.

Y como los puntos comentarista cabo, si el cliente real es detrás de un proxy, la IP del cliente que se obtiene de la toma será el IP del servidor proxy.

Otros consejos

Creo que se puede llamar getpeername en conexiones TCP (pero no UDP), consulte Stevens capítulo 4.10 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top