thrift/remoteIP

リモートIPアドレスの取得

サーバ側に接続してきたクライアントのIPアドレスを取得する方法。 サーバ側の構成によって、異なる方法があるとおもわれる。 thrift-0.8.0の場合。

TThreadPoolServerを改造する方法

ここではTThreadPoolServerを使用するものとし、それを改造する。

public static ThreadLocal<String> remoteIpAddress = new ThreadLocal<String>();

      try {
        Field field = TSocket.class.getDeclaredField("socket_");
        field.setAccessible(true);
        Socket socket = (Socket)field.get(client_);
        String ip = socket.getInetAddress().getHostAddress();
        remoteIpAddress.set(ip);        
      } catch (Exception ex) {
        ex.printStackTrace();
      }

  String remoteIp = MyThreadPoolServer.remoteIpAddress.get();

※もちろん、thriftのソースコードを修正してしまった方が簡単だが、ここではあえてそうしないようにした。

last edited 2012-08-10 03:00:36 by ysugimura