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();
}
java 设置dns_Java动态修改dns(DDNS基于DNSPot和IPv6)相关推荐
- java.lang.Instrument 动态修改替换类代码
java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...
- java 设置dns_java指定dns
/** * 获取DNS服务器信息 * * @param domain 要获取DNS信息的域名 * @param provider DNS服务器 * @param types 信息类型 ...
- android 动态修改dns,如何修改android手机上网DNS
由于我手机使用官方android play市场进行程序管理,从国内访问总电信提供的DNS总是劫持,所以需要使用自己额外设置DNS,关于DNS可以查看能正常从国内访问google服务的DNS doc,我 ...
- php gd 行间距设置,PHP动态修改GD库扩展问题
编译PHP不带gd,后续添加gd模块 在生成图像验证码的时候我们会用到GD库进行images,我们先安装它. 但是有时候,发现自己已经安装了GD库,但是验证码还是生成不了 这个时候就得检查一下imag ...
- Kafka Java consumer动态修改topic订阅
前段时间在Kafka QQ群中有人问及此事--关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然 ...
- 60-60-020-API-Kafka Java consumer动态修改topic订阅
1.视界 关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然后调用subscribe进行修改,c ...
- java动态修改class_Java Agent入门学习之动态修改代码
前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义), ...
- Linux系统修改DNS详细教程
1. 打开终端 在Linux系统中,打开终端的方法是按下键盘上的Ctrl+Alt+T组合键. 2. 进入网络设置 在终端中输入命令"sudo nano /etc/resolv.conf&qu ...
- java 页签标题名的设置_javascript修改浏览器title方法 JS动态修改浏览器标题
title在html中属于特殊的节点元素.因为它可以使用document.getElementsByTagName("title")[0]来获取网页的title标签,但却无法用do ...
最新文章
- SOAP和HTTP 两种基本传输协议
- HTML5:一些部件
- 通过sql-labs进行sql注入学习(11-22)
- HDU——1418抱歉(平面欧拉公式)
- 蓝懿IOS委托模式代理模式
- P3372 【模板】线段树 1
- Spring Boot2
- SQL-Server使用点滴(二-系统表)
- 数据可视化图表ECharts
- 如何查找涉密文件_企业如何处理涉密信息文件?这四点必知
- Minitab控制图Xbar-R中认为数据异常的八项检验(8个异常趋势图)
- Javascript 特效大全
- TD-LTE原理及其关键技术介绍
- 2006技术盘点 多项无线技术被高估
- 计算机网络 之 局域网
- UVA10529 Dumb Bones
- oracle耳机,新手耳机选购排行榜出炉,这三款耳机不仅做工精细,音质还能打
- pubmedy安装不聊了_Pubmedy:显示影响因子+引用数、Sci-hub全文下载的浏览器扩展...
- 书友汇德天-创作不停,学习不止(十字交叉线画法)
- 利用Lambda实现通过getter/setter方法引用拿到属性名
热门文章
- 淮北师范大学的计算机科学与技术怎么样,淮北师范大学和安庆师范大学怎么样?两个大学哪个更好?...
- three.js入门篇6之 环境贴图、经纬线映射贴图与高动态范围成像HDR
- 奔驰网络语言c class,重新定义豪华,全新一代奔驰C-Class正式官宣亮相
- pll制作分频器_怎样自制二分频分频器 制作二分频器需要什么元器件?
- GREEN牛的骨牌[cowdom]
- linux 网卡rss hash,使用RSS提升DPDK应用的性能
- 破译诡异的amp;amp;ldquo;符号
- 垃圾分类小程序源代码实现
- 计算机软件实习项目二 —— 贪吃蛇游戏 (代码实现) 12-16
- win10计算机磁盘分区,win10分盘,教您win10硬盘怎么分区