我正在通过xinetd的超级服务器一个小的Java服务器。 我想获得的原始客户端IP,但我不能,因为流是xinetd的和Java(STIN /标准输出)之间。

是否有人知道如何获得客户端IP,头也不回xinetd的日志文件? (似乎是一个坏的溶液我)

谢谢!

有帮助吗?

解决方案

由于您所描述的情况,拖网xinetd的日志文件是你唯一的选择。

如果您的Java应用程序通过其标准输入和标准输出谈论到客户端,就没有办法了访问底层套接字的应用程序。事实上,我不认为你可以在任何语言做到这一点。

修改:其实,你很可能在C和C这样做++,因为他们暴露文件描述符(FDS),并有库API做使用FDS插座操作

但它不会在纯Java中工作。即使你可以深入到流内的FD对象与System.inSystem.out相关的,我不认为Java类库用于使FD变成Socket对象提供的API。要做到对FD的0和1,你需要求助于JNI和本地代码插座操作。

和作为评论者指出,如果真正的客户端是一个代理之后,客户端IP,你从插座中得到的将是代理服务器的IP。

其他提示

我想你可以打电话getpeername在TCP套接字(而不是UDP),看到的史蒂文斯章4.10

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top