如何使用Java获取用户机器IP

时间:2016-12-07 05:34:47

标签: java

我正在尝试使用我服务器上的java来获取用户机器的ipAddress。

我使用了以下代码,它在本地工作正常。

            URL url = new URL("http://www.geoplugin.net/json.gp?jsoncallback=?");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            System.out.println(response.toString());
        }
    }

使用此类,响应会在我的本地Web应用程序中显示ip。(localhost:8080 / myApp / getIp)

我将此战争部署到我的AWS服务器,并尝试运行servlet。但这始终仅显示AWS IP地址。 (MYIP:8080 /对myApp / getIp)

它没有显示我的机器IP。

我的代码中出现了什么错误,有人可以协助吗?

2 个答案:

答案 0 :(得分:1)

  1. ServletRequest.getRemoteAddr()OR

  2. getRemoteHost()和getRemotePort()

  3. 应该返回实际客户端的详细信息

答案 1 :(得分:0)

如果您想获得客户端IP,即用户通过浏览器访问您的网络应用程序,那么您可以使用(客户端脚本)javascript来执行此操作。下面是相同的简单示例。

function show(response) {
  console.log(response);
  var html = 'Something went wrong !';
  if (200 == response.geoplugin_status) {
    html = 'Got your ip as: ' + response.geoplugin_request;
  }
  document.getElementById('ip').innerHTML = html;
}

var script = document.createElement('script');
script.async = true;
script.src = 'http://www.geoplugin.net/json.gp?jsoncallback=show';
document.getElementById('ip').appendChild(script);
<div id='ip'>Fetching IP ...</div>