目前市场上商用的ddns服务普片价格为500元/年,由于阿里云的ddns服务开放了openapi,可以通过openapi实现ddns服务的效果,这样就能省下一年500元的费用了。下面小沃就奉上小沃自己写的ddns服务源码:
<?php
function GetRealIp () {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
}
return $_SERVER['REMOTE_ADDR'];
}
function RandomStr ($num) {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($chars);
$str = "";
for ($i = 0 ; $i < $num ; $i++) {
$str .= $chars[mt_rand(0, $len-1)];
}
return $str;
}
file_put_contents("ddns.log", date("Y-m-d H:i:s"), FILE_APPEND);
ob_start();
$realip = GetRealIp();
$ret = dns_get_record("companyhost.worldflying.cn");
if (count($ret) === 1 && $ret[0]["type"] === "A" && $ret[0]["ip"] === $realip) {
echo "no need change";
file_put_contents("ddns.log", " no need change\n", FILE_APPEND);
header("Content-Length: ".ob_get_length());
ob_end_flush();
exit;
}
$ak = [用户自己的AccessKey ID];
$sk = [用户自己的AccessKey Secret];
// 删除主机下的全部解析
$params = array(
"Action" => "DeleteSubDomainRecords",
"DomainName" => "worldflying.cn",
"RR" => "companyhost",
"Format" => "JSON",
"Version" => "2015-01-09",
"AccessKeyId" => $ak,
"SignatureMethod" => "HMAC-SHA1",
"SignatureVersion" => "1.0",
"SignatureNonce" => RandomStr(16),
"Timestamp" => gmdate("Y-m-d\TH:i:s\Z")
);
ksort($params);
$CanonicalizedQueryString = "";
foreach ($params as $k => $v) {
$CanonicalizedQueryString .= "&".urlencode($k)."=".urlencode($v);
}
$CanonicalizedQueryString = substr($CanonicalizedQueryString, 1);
$StringToSign = "GET&".urlencode("/")."&".urlencode($CanonicalizedQueryString);
$signature = base64_encode(hash_hmac("sha1", $StringToSign, $sk."&", true));
$url = "https://alidns.aliyuncs.com?".$CanonicalizedQueryString."&Signature=".urlencode($signature);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($ch);
curl_close($ch);
echo $ret."\n\n";
// 添加解析
$params = array(
"Action" => "AddDomainRecord",
"DomainName" => "worldflying.cn",
"RR" => "companyhost",
"Type" => "A",
"Value" => $realip,
"Format" => "JSON",
"Version" => "2015-01-09",
"AccessKeyId" => $ak,
"SignatureMethod" => "HMAC-SHA1",
"SignatureVersion" => "1.0",
"SignatureNonce" => RandomStr(16),
"Timestamp" => gmdate("Y-m-d\TH:i:s\Z")
);
ksort($params);
$CanonicalizedQueryString = "";
foreach ($params as $k => $v) {
$CanonicalizedQueryString .= "&".urlencode($k)."=".urlencode($v);
}
$CanonicalizedQueryString = substr($CanonicalizedQueryString, 1);
$StringToSign = "GET&".urlencode("/")."&".urlencode($CanonicalizedQueryString);
$signature = base64_encode(hash_hmac("sha1", $StringToSign, $sk."&", true));
$url = "https://alidns.aliyuncs.com?".$CanonicalizedQueryString."&Signature=".urlencode($signature);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($ch);
curl_close($ch);
echo $ret."\n\n";
header("Content-Length: ".ob_get_length());
ob_end_flush();
file_put_contents("ddns.log", " change success, new ip is ".$realip."\n", FILE_APPEND);参考资料:传送门
文章作者:沃航科技