0
点赞
收藏
分享

微信扫一扫

通过HTTP API的 ddns 自动刷新

覃榜言 2022-02-25 阅读 69

 本文推荐使用 “Free DDNS” 家的免费DDNS服务,如果你自己已拉线商用带宽,没有家庭带宽的话,就不需要考虑DDNS了,除非是商宽是DHCP公网IP的,这类商宽一般被拿来搞违法买卖的人很多,商宽,动态IP,啧啧,市场,钱景很大。

可以通过以下的HTTP接口来刷新,你的机器公网IP与域名之间进行关联,基本可以做到近乎不断线的,家庭带宽PPOPE拨号认证通常只要一秒以内就可以完成,自动调用程序,每隔X秒都去请求一次就可以,每秒请求是最佳的。

https://freemyip.com/update?token=您的令牌&domain=您的域名

可以在这里申请你的免费动态域名

地址:Free DDNS 在官网上面,输入你想要的域名前缀,然后点 Check Availablity(检查可用)可以则显示以下类似的提示,否则会提示 “This domain name is not available”,这个域名是不可用的提示。

https://freemyip.com/update?token=c3f0eaf65e83c5e32bc1ab30&domain=a6666.freemyip.com

本人申请的例子域名,在你的本机上调用以下接口可以设置你的公网IP为该域名的绑定地址,当然由于是测试域名,所以说不定会有很多人调这个接口,到时候可能会比较乱哦,测试一下就行了。

检索DDNS捆绑IP演示:

nslookup a6666.freemyip.com

其结果现在应该是:13.73.*.*,地址为美国·西部·加州·旧金山·圣克拉拉,但你们调用上述接口刷新了 a6666.freemyip.com 的IP地址,那么可能就不是了。

运行本文提供的DDNS自动刷新程序

ddns 时钟周期 调用地址

cls
ddns.exe 10 "https://freemyip.com/update?token=c3f0eaf65e83c5e32bc1ab30&domain=a6666.freemyip.com"

ddns.cs 源代码编译(.NET v4.0.30319 提供的C#语言编译器)

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc 
/out:ddns.exe /target:exe /unsafe ddns.cs

需要注意一点:编译 ddns.cs 的文件目录,按上述命令是在当前目录下,包括输出的 ddns.exe 为文件也是在当前目录。 

ddns.cs 源文件实现

namespace ddns
{
    using System;
    using System.Net;
    using System.Security;
    using System.Threading;

    public unsafe static class Program
    {
        private static void HttpGet(string openUrl)
        {
            using (WebClient wc = new WebClient())
            {
                DateTime b = DateTime.Now;
                try
                {
                    string r = (wc.DownloadString(openUrl) ?? string.Empty).Trim();
                    Console.WriteLine("[{0}][{1}] {2}", b.ToString("yyyy-MM-dd HH:mm:ss"),
                        ((int)(DateTime.Now - b).TotalMilliseconds).ToString("d4"), r);
                }
                catch (Exception)
                {
                    Console.WriteLine("[{0}][{1}] ERROR", b.ToString("yyyy - MM - dd HH: mm:ss"),
                        ((int)(DateTime.Now - b).TotalMilliseconds).ToString("d4"));
                }
            }
        }

        [MTAThread]
        private static void Main(string[] args)
        {
            Console.Title = "DDNS@localhost";
            InitialSecurityProtocol();
            int sleepTime = 1000 * int.Parse(args[0]);
            string openUrl = args[1];
            while (true)
            {
                HttpGet(openUrl);
                Thread.Sleep(sleepTime);
            }
        }

        [SecurityCritical]
        [SecuritySafeCritical]
        private static void InitialSecurityProtocol()
        {
            try
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                              | SecurityProtocolType.Tls
                                              | (SecurityProtocolType)0x300 // Tls11
                                              | (SecurityProtocolType)0xC00 // Tls12
                                              | (SecurityProtocolType)0x3000; // Tls13
            }
            catch (Exception)
            {
                try
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                                  | SecurityProtocolType.Tls
                                                  | (SecurityProtocolType)0x300 // Tls11
                                                  | (SecurityProtocolType)0xC00; // Tls12
                }
                catch (Exception)
                {
                    try
                    {
                        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                                        | SecurityProtocolType.Tls
                                                        | (SecurityProtocolType)0x300; // Tls11
                    }
                    catch (Exception)
                    {
                        try
                        {
                            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                                            | SecurityProtocolType.Tls;
                        }
                        catch (Exception) { }
                    }
                }
            }
        }
    }
}
举报

相关推荐

0 条评论