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

@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();

}

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

  1. java.lang.Instrument 动态修改替换类代码

    java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...

  2. java 设置dns_java指定dns

    /** * 获取DNS服务器信息 * * @param domain  要获取DNS信息的域名 * @param provider      DNS服务器 * @param types   信息类型  ...

  3. android 动态修改dns,如何修改android手机上网DNS

    由于我手机使用官方android play市场进行程序管理,从国内访问总电信提供的DNS总是劫持,所以需要使用自己额外设置DNS,关于DNS可以查看能正常从国内访问google服务的DNS doc,我 ...

  4. php gd 行间距设置,PHP动态修改GD库扩展问题

    编译PHP不带gd,后续添加gd模块 在生成图像验证码的时候我们会用到GD库进行images,我们先安装它. 但是有时候,发现自己已经安装了GD库,但是验证码还是生成不了 这个时候就得检查一下imag ...

  5. Kafka Java consumer动态修改topic订阅

    前段时间在Kafka QQ群中有人问及此事--关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然 ...

  6. 60-60-020-API-Kafka Java consumer动态修改topic订阅

    1.视界 关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然后调用subscribe进行修改,c ...

  7. java动态修改class_Java Agent入门学习之动态修改代码

    前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义), ...

  8. Linux系统修改DNS详细教程

    1. 打开终端 在Linux系统中,打开终端的方法是按下键盘上的Ctrl+Alt+T组合键. 2. 进入网络设置 在终端中输入命令"sudo nano /etc/resolv.conf&qu ...

  9. java 页签标题名的设置_javascript修改浏览器title方法 JS动态修改浏览器标题

    title在html中属于特殊的节点元素.因为它可以使用document.getElementsByTagName("title")[0]来获取网页的title标签,但却无法用do ...

最新文章

  1. SOAP和HTTP 两种基本传输协议
  2. HTML5:一些部件
  3. 通过sql-labs进行sql注入学习(11-22)
  4. HDU——1418抱歉(平面欧拉公式)
  5. 蓝懿IOS委托模式代理模式
  6. P3372 【模板】线段树 1
  7. Spring Boot2
  8. SQL-Server使用点滴(二-系统表)
  9. 数据可视化图表ECharts
  10. 如何查找涉密文件_企业如何处理涉密信息文件?这四点必知
  11. Minitab控制图Xbar-R中认为数据异常的八项检验(8个异常趋势图)
  12. Javascript 特效大全
  13. TD-LTE原理及其关键技术介绍
  14. 2006技术盘点 多项无线技术被高估
  15. 计算机网络 之 局域网
  16. UVA10529 Dumb Bones
  17. oracle耳机,新手耳机选购排行榜出炉,这三款耳机不仅做工精细,音质还能打
  18. pubmedy安装不聊了_Pubmedy:显示影响因子+引用数、Sci-hub全文下载的浏览器扩展...
  19. 书友汇德天-创作不停,学习不止(十字交叉线画法)
  20. 利用Lambda实现通过getter/setter方法引用拿到属性名

热门文章

  1. 淮北师范大学的计算机科学与技术怎么样,淮北师范大学和安庆师范大学怎么样?两个大学哪个更好?...
  2. three.js入门篇6之 环境贴图、经纬线映射贴图与高动态范围成像HDR
  3. 奔驰网络语言c class,重新定义豪华,全新一代奔驰C-Class正式官宣亮相
  4. pll制作分频器_怎样自制二分频分频器 制作二分频器需要什么元器件?
  5. GREEN牛的骨牌[cowdom]
  6. linux 网卡rss hash,使用RSS提升DPDK应用的性能
  7. 破译诡异的amp;amp;ldquo;符号
  8. 垃圾分类小程序源代码实现
  9. 计算机软件实习项目二 —— 贪吃蛇游戏 (代码实现) 12-16
  10. win10计算机磁盘分区,win10分盘,教您win10硬盘怎么分区