手机版 收藏 导航

Java获取IP地址所在地理位置的方法有哪些_使用Java如何查询IP地址的详细信息,包括城市、省份等

原创   www.link114.cn   2024-03-12 17:42:46

Java获取IP地址所在地理位置的方法有哪些_使用Java如何查询IP地址的详细信息,包括城市、省份等

第一种方法是利用第三方IP地理位置查询服务。这些服务通常提供API接口,开发者可以通过调用API来获取IP地址的地理位置信息。以下是一个示例代码,演示如何使用免费的IP地理位置查询服务 IP-API.com:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class IPGeolocation {
    public static void main(String[] args) {
        String ipAddress = "8.8.8.8"; // 需要查询的IP地址
        Map<String, String> geoInfo = getIPGeolocationInfo(ipAddress);

        if (geoInfo != null) {
            System.out.println("IP地址: " + ipAddress);
            System.out.println("国家: " + geoInfo.get("country"));
            System.out.println("城市: " + geoInfo.get("city"));
            System.out.println("经度: " + geoInfo.get("lat"));
            System.out.println("纬度: " + geoInfo.get("lon"));
            System.out.println("ISP: " + geoInfo.get("isp"));
        } else {
            System.out.println("无法获取IP地址 " + ipAddress + " 的地理位置信息。");
        }
    }

    private static Map<String, String> getIPGeolocationInfo(String ipAddress) {
        try {
            String apiUrl = "http://ip-api.com/json/" + ipAddress;
            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                StringBuilder response = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();

                Map<String, String> geoInfo = new HashMap<>();
                String[] fields = response.toString().split(",");
                for (String field : fields) {
                    if (field.contains(":")) {
                        String[] keyValue = field.split(":");
                        String key = keyValue[0].replaceAll("\"", "").trim();
                        String value = keyValue[1].replaceAll("\"", "").trim();
                        geoInfo.put(key, value);
                    }
                }
                return geoInfo;
            } else {
                System.out.println("HTTP请求失败,响应码: " + responseCode);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

第二种方法是利用Java内置的 InetAddress 类。该类提供获取IP地址相关信息的方法,包括主机名、IP地址、以及主机地理位置信息(国家、城市等)。以下是一个示例代码:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPAddressInfo {
    public static void main(String[] args) {
        String hostName = "www.example.com";
        try {
            InetAddress inetAddress = InetAddress.getByName(hostName);
            System.out.println("主机名: " + inetAddress.getHostName());
            System.out.println("IP地址: " + inetAddress.getHostAddress());
            System.out.println("主机地理位置:");
            System.out.println("  国家: " + inetAddress.getCountry());
            System.out.println("  城市: " + inetAddress.getCity());
            System.out.println("  州/省: " + inetAddress.getState());
            System.out.println("  邮编: " + inetAddress.getPostalCode());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

需要注意的是,使用 InetAddress 类获取地理位置信息的准确性可能受到各种因素的影响,如IP地址的类型(公网IP还是内网IP)、网络环境等。在某些情况下,可能无法准确获取地理位置信息。

在Java中,获取IP地址的地理位置信息可以采用以上两种方法。使用第三方IP地理位置查询服务可以获取更加详细的信息,但需要依赖外部服务,可能会受到一些限制,如请求频率、查询次数等。而使用Java内置的 InetAddress 类则更加简单,但可能无法获取完整的地理位置信息。开发者可以根据自己的需求,选择合适的方法来实现IP地址的地理位置查询。无论采用哪种方法,熟练掌握这些技术,都可以为开发工作带来便利。