一、环境
现在的公网IP越来越少,先判断自己环境的IP是否为动态的公网IP
然后你只需要在阿里云有一个域名,如果新购买注册的,先在阿里云控制台手动添加一次解析记录
因为代码未做新记录的检测判断
由于本人为java初学者,参考了很多文献,不足之处请留言,
编写软件IntelliJ IDEA,这个随个人爱好
最后测试代码无问题之后导出jar包放入电脑中定时执行或者其他执行方式,这样就能达到动态解析的效果,
你的域名就指向最新的IP地址了
二、源代码
1、pom.xml
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
2、Start.java
public class Start {
public static String regionId = "default"; //地域ID 默认
public static String accessKeyId = "改为你的AccessKeyId";//阿里云生成的AccessKeyId
public static String accessKeySecret = "改为你的AccessKeySecret";//阿里云生成的AccessKeySecret
public static String RecordId; //解析记录ID
public static void main(String[] args) {
String nowIP = GetIP.getNowIP();//调用getNowIP()
System.out.println("你的当前公网IP:"+nowIP);
String aliIP = GetIP.getAliIP();//调用getAliIP()
System.out.println("阿里云解析的IP:"+aliIP);
if (!nowIP.equals(aliIP)) {
Update.UpdateIP(nowIP);//调用UpdateIP()
} else {
System.out.println("未获取到新的IP地址!不需要更改!");
}
}
}
3、GetIP.java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
public class GetIP {
public static String getNowIP(){
URL url;
try {
url = new URL("http://2019.ip138.com/ic.asp");//获取当前公网IP的网址
try {
URLConnection con = url.openConnection();//创建一个连接
con.setReadTimeout(2000);//读取时限2秒
con.setConnectTimeout(2000);//连接时限2秒
//缓存读取到的内容
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
List html =new ArrayList();
//把内容存入List集合中
while(reader.readLine()!=null){
html.add(reader.readLine());
}
reader.close();//关闭读取流
con.connect();//关闭连接
String str = html.get(html.size()-1).toString();//获取最后一行包含IP的内容
return str.substring(str.indexOf("[")+1,str.indexOf("]"));//返回[]内的IP地址
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return "";
}
public static String getAliIP(){
DefaultProfile profile = DefaultProfile.getProfile(Start.regionId,Start.accessKeyId,Start.accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("alidns.aliyuncs.com");
request.setVersion("2015-01-09");
request.setAction("DescribeDomainRecords");
//此处为阿里API源代码,只需修改value为你需要解析购买的域名即可
request.putQueryParameter("DomainName", "value");
try {
CommonResponse response = client.getCommonResponse(request);
String str =response.getData();
JSONObject jsonObject = JSON.parseObject(str);
JSONObject domainRecords =jsonObject.getJSONObject("DomainRecords");
JSONArray record =domainRecords.getJSONArray("Record");
JSONObject result = record.getJSONObject(0);
Start.RecordId=result.getString("RecordId");//取得更改需要的解析记录ID
return result.getString("Value");//取得已经存在的IP地址
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return "";
}
}
4、Update.java
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
public class Update {
public static void UpdateIP(String IP) {
String newIP = IP;
DefaultProfile profile = DefaultProfile.getProfile(Start.regionId,Start.accessKeyId,Start.accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("alidns.aliyuncs.com");
request.setVersion("2015-01-09");
request.setAction("UpdateDomainRecord");
request.putQueryParameter("RecordId",Start.RecordId);//放入参数解析记录ID
request.putQueryParameter("RR", "*");
request.putQueryParameter("Type", "A");
request.putQueryParameter("Value",newIP);//放入参数新的IP地址
try {
CommonResponse response = client.getCommonResponse(request);
if (response.getData().length()>0){
System.out.println("修改IP成功!");
}else {
System.out.println("修改IP失败!");
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}