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 !

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top