XinetDを介してJavaサーバーからクライアントIPを取得する方法は?
質問
Xinetd SuperServerを介して小さなJavaサーバーを実行しています。起源のクライアントIPを取得したいのですが、ストリームがXinetdとJava(Stin/Stdout)の間にあるため、できません。
Xinetd LogFileを検討せずに、誰かがクライアントIPを取得する方法を知っていますか? (私にとっては悪い解決策のようです)
ありがとう !
解決
あなたが説明した状況を考えると、Xinetd logfileをトロールすることがあなたの唯一の選択肢です。
Javaアプリケーションが標準の入力と標準出力を介してクライアントと通信している場合、アプリケーションが基礎となるソケットにアクセスする方法はありません。確かに、私はあなたがどんな言語でもこれを行うことができるとは思わない。
編集 :実際、ファイル記述子(FDS)を公開し、FDSを使用してソケット操作を行うためのライブラリAPIを持っているため、おそらくCとC ++でこれを行うことができます。
しかし、それは純粋なジャワでは機能しません。に関連付けられているストリームオブジェクト内のFDにドリルダウンできたとしても System.in
また System.out
, 、私はJavaクラスライブラリがFDをに変えるためのAPIを提供するとは思わない Socket
物体。 FDの0および1でソケット操作を行うには、JNIおよびネイティブコードに頼る必要があります。
コメンターが指摘しているように、実際のクライアントがプロキシの背後にある場合、ソケットから取得したクライアントIPはプロキシのIPになります。
他のヒント
電話できると思います getpeername
TCPソケット(UDPではない)については、 スティーブンス第4.10章.