• JAVA如何获取服务器ip


    一、最简单的方法就是使用InetAddress获取本机ip

    InetAddress.getLocalHost().getHostAddress();
    1. public static void main(String[] args) {
    2. try {
    3. //用 getLocalHost() 方法创建的InetAddress的对象
    4. InetAddress address = InetAddress.getLocalHost();
    5. System.out.println(address.getHostName());//主机名
    6. System.out.println(address.getCanonicalHostName());//主机别名
    7. System.out.println(address.getHostAddress());//获取IP地址
    8. System.out.println("===============");
    9. //用域名创建 InetAddress对象
    10. InetAddress address1 = InetAddress.getByName("www.wodexiangce.cn");
    11. //获取的是该网站的ip地址,如果我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址
    12. System.out.println(address1.getHostName());//www.wodexiangce.cn
    13. System.out.println(address1.getCanonicalHostName());//124.237.121.122
    14. System.out.println(address1.getHostAddress());//124.237.121.122
    15. System.out.println("===============");
    16. //用IP地址创建InetAddress对象
    17. InetAddress address2 = InetAddress.getByName("220.181.111.188");
    18. System.out.println(address2.getHostName());//220.181.111.188
    19. System.out.println(address2.getCanonicalHostName());//220.181.111.188
    20. System.out.println(address2.getHostAddress());//220.181.111.188
    21. System.out.println("===============");
    22. //根据主机名返回其可能的所有InetAddress对象
    23. InetAddress[] addresses = InetAddress.getAllByName("www.baidu.com");
    24. for (InetAddress addr : addresses) {
    25. System.out.println(addr);
    26. //www.baidu.com/220.181.111.188
    27. //www.baidu.com/220.181.112.244
    28. }
    29. } catch (UnknownHostException e) {
    30. e.printStackTrace();
    31. }
    32. }

    二、当服务器有多个网络接口或配置了多个IP地址时

    该方法返回的是默认的本地地址,可能是服务器上某个网络接口的IP地址,但不一定是我们期望获取的IP地址。

    为了获取正确的IP地址,可以使用其他方法来获取服务器上所有的网络接口,并遍历每个网络接口来获取对应的IP地址。可以使用NetworkInterface类来实现此功能,如下所示:

    1. import java.net.InetAddress;
    2. import java.net.NetworkInterface;
    3. import java.net.SocketException;
    4. import java.util.Enumeration;
    5. public class GetServerIPAddress {
    6. public static void main(String[] args) {
    7. try {
    8. Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
    9. while (interfaces.hasMoreElements()) {
    10. NetworkInterface networkInterface = interfaces.nextElement();
    11. Enumeration addresses = networkInterface.getInetAddresses();
    12. while (addresses.hasMoreElements()) {
    13. InetAddress address = addresses.nextElement();
    14. if (!address.isLoopbackAddress() && !address.isLinkLocalAddress() && address.isSiteLocalAddress()) {
    15. System.out.println("服务器的IP地址是:" + address.getHostAddress());
    16. }
    17. }
    18. }
    19. } catch (SocketException e) {
    20. e.printStackTrace();
    21. }
    22. }
    23. }

    上述代码中,我们使用NetworkInterface.getNetworkInterfaces()方法获取所有的网络接口,然后遍历每个网络接口,再通过getInetAddresses()方法获取每个网络接口的IP地址。在获取IP地址时,我们可以根据需求进行过滤,例如排除回环地址、链路本地地址,只选择站点本地地址等。

    通过这种方式,我们可以获取到服务器上所有网络接口的IP地址,包括多个IP地址的情况。这样可以确保获取到正确的IP地址。

    三、当使用代理服务器

    当使用代理服务器时,InetAddress.getLocalHost()方法返回的是本地主机(即运行该代码的主机)的IP地址,而不是代理服务器的IP地址。这是因为getLocalHost()方法返回的是当前主机的IP地址,而不是代理服务器的IP地址。

    在使用代理服务器时,如果想要获取代理服务器的IP地址,可以使用其他方法来实现,例如可以发送一个HTTP请求到一个公共的IP地址查询服务,然后从返回的响应中解析出代理服务器的IP地址。

    以下是一个示例代码,演示如何通过发送HTTP请求获取代理服务器的IP地址:

    1. import java.io.BufferedReader;
    2. import java.io.IOException;
    3. import java.io.InputStreamReader;
    4. import java.net.HttpURLConnection;
    5. import java.net.InetAddress;
    6. import java.net.URL;
    7. public class GetProxyIPAddress {
    8. public static void main(String[] args) {
    9. try {
    10. URL url = new URL("http://api.ipify.org");
    11. HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    12. connection.setRequestMethod("GET");
    13. connection.connect();
    14. int responseCode = connection.getResponseCode();
    15. if (responseCode == HttpURLConnection.HTTP_OK) {
    16. BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    17. String ipAddress = reader.readLine();
    18. System.out.println("代理服务器的IP地址是:" + ipAddress);
    19. reader.close();
    20. }
    21. connection.disconnect();
    22. } catch (IOException e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. }

    上述代码中,我们发送一个GET请求到http://api.ipify.org,该服务会返回我们的公共IP地址。通过解析响应,我们可以获取到代理服务器的IP地址。请注意,这种方式仅适用于能够访问公共IP地址查询服务的情况。

  • 相关阅读:
    86-分布式前端开发
    Android databinding之数据单向与双向绑定详解与使用(三)
    【面试】卡夫卡Kafka相关
    VS双机调试
    BiLSTM-CRF代码实现
    MySQL:DCL 数据控制语句盘点
    在UnityUI中绘制线状统计图
    Java项目-文件搜索工具
    MSDC 4.3 接口规范(22)
    盘点一个os.path.join()函数遇到的小问题(文末赠书)
  • 原文地址:https://blog.csdn.net/qq_44038822/article/details/133887442