繁体   English   中英

如何在java中的HttpResponse中的代理服务器上获取客户端IP地址?

[英]How to get Client Ip address at Proxy server in HttpResponse in java?

我正在尝试在 Java 中实现一个代理服务器,它将从客户端浏览器获取 HttpRequest,并将其转发到服务器。 从服务器接收到 HttpResponse 后,它提取 cookie 并修改 cookie,然后将带有修改后的 cookie 的 HttpResponse 转发到客户端浏览器。 我这样做是为了防止滥用 cookie 进行会话劫持。

下次,当客户端尝试连接同一台服务器时,我的代理服务器将使用此修改后的 cookie 获取 HttpRequest。 在将该 HttpRequest 转发到服务器之前,我的代理服务器将用原始 cookie 替换此修改后的 cookie,服务器将响应,因为它将检测到正确的 cookie。

这种方法的一个缺点是,如果同一局域网的其他客户端成为攻击者并窃取客户端的修改后的 cookie 并将 HttpRequest 发送到代理服务器,代理服务器会将修改后的 cookie 替换为原始 cookie 并转发到服务器,攻击者将能够执行会话劫持。

为了解决这个问题,我试图通过以下方式实现这一点。

而不是 (cookie original value= modified value),我将存储 (Ip, cookie original value)= modified value。 因此,每当 HttpReqest 来自客户端浏览器时,我都会检查发件人的 Ip 地址以及与此修改后的 cookie 的原始 cookie 一起存储的 Ip 地址。

我尝试在一台机器上运行此代码,在那里我已将所有浏览器请求重定向到本地端口 1111,并且我能够获取客户端 Ip 地址。

 public static void runServer(String host, int remoteport, int localport)
      throws IOException {

// Create a ServerSocket to listen for connections with
ServerSocket ss = new ServerSocket(1111);

final byte[] request = new byte[1024];
byte[] reply = new byte[4096];

while (true) {
  Socket client = null, server = null;
  try {
    // Wait for a connection on the local port
    client = ss.accept();

    final String SenderIp=client.getInetAddress().getHostAddress();
    System.out.println("Client Ip address "+ SenderIp);

.....

// cookie convertion moodified to original is done here
   (modified cookie ---> original cookie value)
.....



// forward HttpRequest to server 
byte[] requestBytes = requestString.getBytes("ISO-8859-1");
streamToServer.write(requestBytes,0,requestBytes.length);
streamToServer.flush();

}   



// Read the server's responses
        // and pass them back to the client.
        int bytesRead;
        try {
          while ((bytesRead = streamFromServer.read(reply)) != -1) {

        String responseString = new String(reply, 0, bytesRead, "ISO-8859-1");
         System.out.println("Reply string "+responseString);


        // cookie modification done here

        System.out.println("Forwarded to IP "+SenderIp);
        byte[] responseBytes = responseString.getBytes("ISO-8859-1");
        streamToClient.write(responseBytes, 0, responseBytes.length);
        streamToClient.flush();

        HashMap(original_cookie,  modified cookie)
}
}   

我怎么知道这个 HttpResponse 将发送到IP 地址 我的意思是我将发送修改 cookie 的客户端 IP 地址

我想在从外部服务器获取 HttpResponse 后使用 HashMap(original_cookie,IP address, modified cookie)。

先感谢您。

我得到了解决方案。 我正在新客户端和服务器之间创建一个单独的套接字 因此,我们可以轻松地从特定客户端和服务器之间的套接字中检索单个客户端的 IP 地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM