本文推荐使用 “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) { }
}
}
}
}
}
}