java 设置dns_Java动态修改dns(DDNS基于DNSPot和IPv6)

废话不多说,直接上源码:

@Autowired

private RestTemplate restTemplate;

private String ipv6;

private static final String RECORD_LIST = "https://dnsapi.cn/Record.List";

private static final String RECORD_DDNS = "https://dnsapi.cn/Record.Ddns";

private static final String RECORD_MODIFY = "https://dnsapi.cn/Record.Modify";

private static final String TOKEN = "你的token";

private static final String DOMAIN = "你的域名";

private static final String SUB_DOMAIN = "你要修改的子域名";

private static final String RECORD_ID = "记录id";

@PostConstruct

public void init() {

ipv6 = getLocalIPv6Address();

log.info("- local ipv6 = {}", ipv6);

}

@Scheduled(fixedRate = 5000)

public void checkIP() {

String currentIPv6 = getLocalIPv6Address();

if (ipv6.equals(currentIPv6)) {

return;

}

modifyDns();

}

public String getRecordList() {

MultiValueMap params= new LinkedMultiValueMap<>();

return postForm(RECORD_LIST, params);

}

public String modifyDns() {

MultiValueMap params= new LinkedMultiValueMap<>();

params.add("record_id", RECORD_ID);

params.add("sub_domain", SUB_DOMAIN);

params.add("record_type", "AAAA");

params.add("record_line_id", "0");

params.add("ttl", "600");

params.add("value", getLocalIPv6Address());

return postForm(RECORD_MODIFY, params);

}

private String postForm(String url, MultiValueMap params) {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

params.add("login_token", TOKEN);

params.add("format", "json");

params.add("domain", DOMAIN);

HttpEntity> requestEntity = new HttpEntity<>(params, headers);

ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class);

return response.getBody();

}

public String getLocalIPv6Address() {

InetAddress inetAddress = null;

Enumeration networkInterfaces = null;

try {

networkInterfaces = NetworkInterface.getNetworkInterfaces();

} catch (SocketException e) {

e.printStackTrace();

}

outer:

while(networkInterfaces.hasMoreElements()) {

Enumeration addressEnumeration = networkInterfaces.nextElement().getInetAddresses();

while(addressEnumeration.hasMoreElements()) {

inetAddress = addressEnumeration.nextElement();

//检查此地址是否是IPv6地址以及是否是保留地址

if(inetAddress instanceof Inet6Address && !isReservedAddr(inetAddress)) {

break outer;

}

}

}

String ipAddr = inetAddress.getHostAddress();

//过滤网卡

int index = ipAddr.indexOf('%');

if(index > 0) {

ipAddr = ipAddr.substring(0, index);

}

return ipAddr;

}

private boolean isReservedAddr(InetAddress inetAddr) {

return inetAddr.isAnyLocalAddress()

|| inetAddr.isLinkLocalAddress()

|| inetAddr.isLoopbackAddress();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值