在 Java 中获取“外部”IP 地址

我不太确定如何获取机器的外部IP地址,因为网络外部的计算机会看到它。

我的以下 IPAddress 类仅获取计算机的本地 IP 地址。

public class IPAddress {

    private InetAddress thisIp;

    private String thisIpAddress;

    private void setIpAdd() {
        try {
            InetAddress thisIp = InetAddress.getLocalHost();
            thisIpAddress = thisIp.getHostAddress().toString();
        } catch (Exception e) {
        }
    }

    protected String getIpAddress() {
        setIpAdd();
        return thisIpAddress;
    }
}

答案 1

我不确定您是否可以从本地计算机上运行的代码中获取该IP。

但是,您可以构建在网站上运行的代码,例如在JSP中,然后使用返回请求来源的IP的内容:

request.getRemoteAddr()

或者只需使用已经存在的服务来执行此操作,然后解析服务中的答案以找出IP。

使用 AWS 等 Web 服务

import java.net.*;
import java.io.*;

URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(
                whatismyip.openStream()));

String ip = in.readLine(); //you get the IP as a String
System.out.println(ip);

答案 2

@stivlo的评论之一值得一提:

您可以使用亚马逊服务 http://checkip.amazonaws.com

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class IpChecker {

    public static String getIp() throws Exception {
        URL whatismyip = new URL("http://checkip.amazonaws.com");
        BufferedReader in = null;
        try {
            in = new BufferedReader(new InputStreamReader(
                    whatismyip.openStream()));
            String ip = in.readLine();
            return ip;
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}