Como obter IP do cliente do Java Server através do XINETD?
Pergunta
Estou executando um pequeno servidor Java através do Xinetd SuperServer. Eu gostaria de obter o IP do cliente de origem, mas não posso, porque os fluxos estão entre XINETD e Java (stin/stdout).
Alguém sabe como obter o IP do cliente, sem procurar o XINETD LOGFILE? (parece uma solução ruim para mim)
Obrigado !
Solução
Dada a situação que você descreveu, arrastar o xinetd logfile é sua única opção.
Se o seu aplicativo Java estiver conversando com o cliente por meio de sua entrada padrão e saída padrão, não há como o aplicativo acessar o soquete subjacente. De fato, acho que você não poderia fazer isso em nenhum idioma.
EDITAR : Na verdade, você provavelmente poderia fazer isso em C e C ++ porque eles expõem os descritores de arquivo (FDS) e têm APIs da biblioteca para realizar operações de soquete usando FDS.
Mas não funcionará em puro java. Mesmo se você pudesse perfurar o FD dentro dos objetos de fluxo associados a System.in
ou System.out
, Não acho que as bibliotecas de classe Java fornecem uma API para transformar o FD em um Socket
objeto. Para fazer operações de soquete nos 0 e 1 do FD, você precisaria recorrer ao JNI e ao código nativo.
E como o comentarista aponta, se o cliente real estiver por trás de um proxy, o IP do cliente que você recebe do soquete será o IP do proxy.
Outras dicas
Eu acho que você pode ligar getpeername
em soquetes TCP (mas não UDP), veja STEVENS CAPÍTULO 4.10.