Domanda

Sono in esecuzione di un piccolo server Java tramite superserver xinetd. Mi piacerebbe ottenere l'IP del client di origine, ma non posso perché i flussi sono tra xinetd e Java (stin / stdout).

C'è qualcuno che sa come ottenere l'IP del client, senza guardare a xinetd file di log? (Sembra una cattiva soluzione per me)

Grazie!

È stato utile?

Soluzione

Data la situazione che hai descritto, pesca a strascico il file di log xinetd è l'unica opzione.

Se l'applicazione Java sta parlando al cliente tramite il suo standard input e output standard, non c'è alcun modo per l'applicazione per accedere alla presa di fondo. In realtà, non credo che si possa fare questo in qualsiasi lingua.

Modifica :. In realtà, probabilmente potrebbe fare questo in C e C ++, perché esporre i descrittori di file (FDS) e hanno le API di libreria per fare operazioni di socket utilizzando FDS

Ma non funzionerà in puro Java. Anche se si potrebbe drill-down per il fd all'interno degli oggetti Stream associati System.in o System.out, non credo che le librerie di classi Java forniscono un'API per girare il fd in un oggetto Socket. Per fare operazioni di socket sul fd di 0 e 1 si avrebbe bisogno di ricorrere a JNI e codice nativo.

E come sottolinea il commentatore, se il vero cliente è dietro un proxy, l'IP del client che si ottiene dalla presa sarà l'IP del proxy.

Altri suggerimenti

Credo che si può chiamare getpeername su socket TCP (ma non UDP), vedere capitolo Stevens 4.10 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top