Java中获取服务器外网地址

概述

在开发过程中,有时候需要获取服务器的外网地址,比如用于发送邮件、短信等功能。本文将介绍如何使用Java获取服务器的外网地址。

流程图

flowchart TD
    A[获取服务器外网地址] --> B[获取本地地址]
    B --> C[判断本地地址是否为外网地址]
    C -- 是 --> D[返回本地地址作为外网地址]
    C -- 否 --> E[获取外网地址]
    E --> F[返回外网地址]

步骤

步骤 内容
1 获取本地地址
2 判断本地地址是否为外网地址
3 如果是外网地址,返回本地地址作为外网地址
4 如果不是外网地址,获取外网地址
5 返回外网地址

代码实现

步骤1:获取本地地址

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

public class GetLocalAddress {
    public static void main(String[] args) {
        try {
            InetAddress address = InetAddress.getLocalHost();
            String localAddress = address.getHostAddress();
            System.out.println("本地地址:" + localAddress);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

代码解析:

  • 使用InetAddress.getLocalHost()方法获取本地地址。
  • 使用getHostAddress()方法获取本地地址的字符串形式。

步骤2:判断本地地址是否为外网地址

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

public class GetPublicAddress {
    public static void main(String[] args) {
        try {
            InetAddress localAddress = InetAddress.getLocalHost();
            String localIp = localAddress.getHostAddress();
            if (isPublicIp(localIp)) {
                System.out.println("本地地址是外网地址");
            } else {
                System.out.println("本地地址不是外网地址");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    private static boolean isPublicIp(String ip) {
        return !ip.startsWith("192.168.") && !ip.startsWith("10.") && !ip.startsWith("172.");
    }
}

代码解析:

  • 定义了一个静态方法isPublicIp(),用于判断给定的IP地址是否为外网地址。
  • isPublicIp()方法中使用了简单的规则来判断,如果给定IP地址以192.168.10.172.开头,则认为是内网地址。

步骤3:返回本地地址作为外网地址

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

public class GetPublicAddress {
    public static void main(String[] args) {
        try {
            InetAddress localAddress = InetAddress.getLocalHost();
            String localIp = localAddress.getHostAddress();
            if (isPublicIp(localIp)) {
                System.out.println("外网地址:" + localIp);
            } else {
                System.out.println("本地地址不是外网地址");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    private static boolean isPublicIp(String ip) {
        return !ip.startsWith("192.168.") && !ip.startsWith("10.") && !ip.startsWith("172.");
    }
}

代码解析:

  • 如果判断出本地地址是外网地址,则直接将本地地址作为外网地址返回。

步骤4:获取外网地址

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

public class GetPublicAddress {
    public static void main(String[] args) {
        try {
            InetAddress localAddress = InetAddress.getLocalHost();
            String localIp = localAddress.getHostAddress();
            if (isPublicIp(localIp)) {
                System.out.println("外网地址:" + localIp);
            } else {
                String publicIp = getPublicIp();
                System.out.println("外网地址:" + publicIp);
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    private static boolean isPublicIp(String ip) {
        return !ip.startsWith("192.168.") && !ip.startsWith("10.") && !ip.startsWith("172.");
    }

    private static String getPublicIp() {
        try {
            URL url = new URL("
            BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
            String publicIp = br.readLine();
            br.close();
            return publicIp;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }