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;
}