简单ddns的实现

coredns +

package org.rx.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.rx.common.AppConfig;
import org.rx.core.Tasks;
import org.rx.net.http.HttpClient;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

import java.nio.charset.StandardCharsets;

import static org.rx.core.Contract.eq;
import static org.rx.core.Contract.quietly;

@Slf4j
@Service
@RequiredArgsConstructor
public class ScheduleService {
    private final AppConfig config;
    private volatile String lastIp;

    @PostConstruct
    public void init() {
        Tasks.schedule(() -> {
            HttpClient client = new HttpClient();

            quietly(() -> {
                String url = "https://api.myip.com";
                JSONObject json = JSON.parseObject(client.get(url));
                if (!eq(lastIp = json.getString("ip"), lastIp)) {
                    log.info("refresh dns db");
                    FileUtils.writeStringToFile(config.getDnsDb(), String.format("f-li.cn.\t\tIN\tSOA dns.f-li.cn. rx.f-li.cn. 2020020414 7200 3600 1209600 3600\n" +
                            "cloud.f-li.cn.\tIN\tA\t103.126.103.83\n" +
                            "v.f-li.cn.\t\tIN\tA\t%s\n", lastIp), StandardCharsets.UTF_8, false);
                }
            });
        }, config.getJobDelaySeconds() * 1000);
    }
}

package org.rx.service;
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.apache.commons.io.FileUtils;import org.rx.common.AppConfig;import org.rx.core.Tasks;import org.rx.net.http.HttpClient;import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;
import static org.rx.core.Contract.eq;import static org.rx.core.Contract.quietly;
@Slf4j@Service@RequiredArgsConstructorpublic class ScheduleService {    private final AppConfig config;    private volatile String lastIp;
    @PostConstruct    public void init() {        Tasks.schedule(() -> {            HttpClient client = new HttpClient();
            quietly(() -> {                String url = "https://api.myip.com";                JSONObject json = JSON.parseObject(client.get(url));                if (!eq(lastIp = json.getString("ip"), lastIp)) {                    log.info("refresh dns db");                    FileUtils.writeStringToFile(config.getDnsDb(), String.format("f-li.cn.\t\tIN\tSOA dns.f-li.cn. rx.f-li.cn. 2020020414 7200 3600 1209600 3600\n" +                            "cloud.f-li.cn.\tIN\tA\t103.126.103.83\n" +                            "v.f-li.cn.\t\tIN\tA\t%s\n", lastIp), StandardCharsets.UTF_8, false);                }            });        }, config.getJobDelaySeconds() * 1000);    }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值