重大更新

This commit is contained in:
ywdblog 2019-03-23 22:55:39 +08:00
parent b1152bfd77
commit f1291a1358
2 changed files with 230 additions and 237 deletions

View File

@ -3,41 +3,40 @@
date_default_timezone_set("GMT");
/*
$obj = new AliDns("LTAIkLV6coSSKklZ", "YEGDVHQV4oBC6AGQM9BWaHStUtNE5M", "simplehttps.com1");
$data = $obj->DescribeDomainRecords();
if ($data["httpcode"]!=200) {
echo "aly dns 域名获取失败-" . $data["Code"] . ":" . $data["Message"];
}
//显示所有
//$data = $obj->DescribeDomainRecords();
$obj = new AliDns("LTAIkLV6coSSKklZ", "YEGDVHQV4oBC6AGQM9BWaHStUtNE5M", "simplehttps.com1");
$data = $obj->DescribeDomainRecords();
if ($data["httpcode"]!=200) {
echo "aly dns 域名获取失败-" . $data["Code"] . ":" . $data["Message"];
}
//显示所有
//$data = $obj->DescribeDomainRecords();
//增加解析
//$data= $obj->AddDomainRecord("TXT", "test", "test");
//增加解析
//$data= $obj->AddDomainRecord("TXT", "test", "test");
//修改解析
//$data = $obj->UpdateDomainRecord("3965724468724736","TXT", "test", "test2");
//修改解析
//$data = $obj->UpdateDomainRecord("3965724468724736","TXT", "test", "test2");
//删除解析
//$data = $obj->DescribeDomainRecords();
//$data = $data["DomainRecords"]["Record"];
//if (is_array($data)) {
//foreach ($data as $v) {
//if ($v["RR"] == "test") {
//$obj->DeleteDomainRecord($v["RecordId"]);
//}
//}
//}
*/
//删除解析
//$data = $obj->DescribeDomainRecords();
//$data = $data["DomainRecords"]["Record"];
//if (is_array($data)) {
//foreach ($data as $v) {
//if ($v["RR"] == "test") {
//$obj->DeleteDomainRecord($v["RecordId"]);
//}
//}
//}
*/
/*
example:
example:
php alydns.php add "simplehttps.com" "dnsv" "dnsk" APPKEY APPTOKEN
*/
php alydns.php add "simplehttps.com" "dnsv" "dnsk" APPKEY APPTOKEN
*/
########## 配合 cerbot 运行
# 第一个参数是 action代表 (add/clean)
# 第二个参数是域名
# 第三个参数是主机名(第三个参数+第二个参数组合起来就是要添加的 TXT 记录)
@ -45,124 +44,124 @@ php alydns.php add "simplehttps.com" "dnsv" "dnsk" APPKEY APPTOKEN
# 第五个参数是 APPKEY
# 第六个参数是 APPTOKEN
echo "域名 API 调用开始\n" ;
echo "域名 API 调用开始\n";
print_r($argv);
if (count($argv)<7) {
echo "参数有误\n";
exit;
if (count($argv) < 7) {
echo "参数有误\n";
exit;
}
echo $argv[1] . "-" . $argv[2] . "-" . $argv[3] . "-" . $argv[4] . "-" . $argv[5] . "-" . $argv[6] . "\n";
$domainarray = AliDns::getDomain($argv[2]);
$selfdomain = ($domainarray[0]=="")?$argv[3]:$argv[3] . "." . $domainarray[0];
$selfdomain = ($domainarray[0] == "") ? $argv[3] : $argv[3] . "." . $domainarray[0];
$obj = new AliDns($argv[5], $argv[6], $domainarray[1]);
switch ($argv[1]) {
case "clean":
$data = $obj->DescribeDomainRecords();
$data = $data["DomainRecords"]["Record"];
if (is_array($data)) {
foreach ($data as $v) {
if ($v["RR"] == $selfdomain) {
$data = $obj->DeleteDomainRecord($v["RecordId"]);
if ($data["httpcode"]!=200) {
echo "aly dns 域名删除失败-" . $data["Code"] . ":" . $data["Message"];
exit;
}
}
}
}
break;
case "clean":
$data = $obj->DescribeDomainRecords();
$data = $data["DomainRecords"]["Record"];
if (is_array($data)) {
foreach ($data as $v) {
if ($v["RR"] == $selfdomain) {
$data = $obj->DeleteDomainRecord($v["RecordId"]);
if ($data["httpcode"] != 200) {
echo "aly dns 域名删除失败-" . $data["Code"] . ":" . $data["Message"];
exit;
}
}
}
}
break;
case "add":
$data = $obj->AddDomainRecord("TXT", $selfdomain,$argv[4]);
case "add":
$data = $obj->AddDomainRecord("TXT", $selfdomain, $argv[4]);
if ($data["httpcode"]!=200) {
echo "aly dns 域名增加失败-" . $data["Code"] . ":" . $data["Message"];
exit;
}
break;
if ($data["httpcode"] != 200) {
echo "aly dns 域名增加失败-" . $data["Code"] . ":" . $data["Message"];
exit;
}
break;
}
echo "域名 API 调用结束\n" ;
echo "域名 API 调用结束\n";
############ Class 定义
class AliDns {
private $accessKeyId = null;
private $accessSecrec = null;
private $DomainName = null;
public function __construct($accessKeyId, $accessSecrec, $domain) {
$this->accessKeyId = $accessKeyId;
$this->accessSecrec = $accessSecrec;
$this->DomainName = $domain;
}
/*
根据域名返回主机名和二级域名
*/
根据域名返回主机名和二级域名
*/
public static function getDomain($domain) {
//https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
//常见根域名
$arr[]=".co.jp";
$arr[]=".com.tw";
$arr[]=".net";
$arr[]=".com";
$arr[]=".com.cn";
$arr[]=".org";
$arr[]=".cn";
$arr[]=".gov";
$arr[]=".net.cn";
$arr[]=".io";
$arr[]=".top";
$arr[]=".me";
$arr[]=".int";
$arr[]=".edu";
$arr[]=".link";
$arr[]=".uk";
$arr[]=".hk";
//二级域名
$seconddomain ="";
//子域名
$selfdomain = "";
//根域名
$rootdomain = "";
foreach ($arr as $k=>$v) {
$pos = stripos($domain,$v);
if ($pos) {
$rootdomain = substr($domain,$pos);
$s = explode(".",substr($domain,0,$pos));
$seconddomain = $s[count($s)-1] . $rootdomain;
for ($i=0;$i<count($s)-1;$i++)
$selfdomain .= $s[$i];
break;
}
}
//echo $seconddomain ;exit;
if ($rootdomain=="") {
$seconddomain = $domain;
$selfdomain = "";
}
return array($selfdomain,$seconddomain);
//https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
//常见根域名
$arr[] = ".co.jp";
$arr[] = ".com.tw";
$arr[] = ".net";
$arr[] = ".com";
$arr[] = ".com.cn";
$arr[] = ".org";
$arr[] = ".cn";
$arr[] = ".gov";
$arr[] = ".net.cn";
$arr[] = ".io";
$arr[] = ".top";
$arr[] = ".me";
$arr[] = ".int";
$arr[] = ".edu";
$arr[] = ".link";
$arr[] = ".uk";
$arr[] = ".hk";
//二级域名
$seconddomain = "";
//子域名
$selfdomain = "";
//根域名
$rootdomain = "";
foreach ($arr as $k => $v) {
$pos = stripos($domain, $v);
if ($pos) {
$rootdomain = substr($domain, $pos);
$s = explode(".", substr($domain, 0, $pos));
$seconddomain = $s[count($s) - 1] . $rootdomain;
for ($i = 0; $i < count($s) - 1; $i++)
$selfdomain .= $s[$i];
break;
}
}
//echo $seconddomain ;exit;
if ($rootdomain == "") {
$seconddomain = $domain;
$selfdomain = "";
}
return array($selfdomain, $seconddomain);
}
public function DescribeDomainRecords() {
$requestParams = array(
"Action" => "DescribeDomainRecords"
"Action" => "DescribeDomainRecords"
);
$val = $this->send($requestParams);
return $this->out($val);
return $this->out($val);
}
public function UpdateDomainRecord($id, $type, $rr,$value){
public function UpdateDomainRecord($id, $type, $rr, $value) {
$requestParams = array(
"Action" => "UpdateDomainRecord",
"RecordId" => $id,
@ -173,8 +172,9 @@ class AliDns {
$val = $this->send($requestParams);
return $this->out($val);
}
public function DeleteDomainRecord($id) {
$requestParams = array(
$requestParams = array(
"Action" => "DeleteDomainRecord",
"RecordId" => $id,
);
@ -192,49 +192,45 @@ class AliDns {
);
$val = $this->send($requestParams);
return $this->out($val);
}
private function send($requestParams) {
$publicParams = array(
"DomainName" => $this->DomainName,
"Format" => "JSON",
"Version" => "2015-01-09",
"AccessKeyId" => $this->accessKeyId,
"Timestamp" => date("Y-m-d\TH:i:s\Z"),
"SignatureMethod" => "HMAC-SHA1",
"SignatureVersion" => "1.0",
"SignatureNonce" => substr(md5(rand(1, 99999999)), rand(1, 9), 14),
"DomainName" => $this->DomainName,
"Format" => "JSON",
"Version" => "2015-01-09",
"AccessKeyId" => $this->accessKeyId,
"Timestamp" => date("Y-m-d\TH:i:s\Z"),
"SignatureMethod" => "HMAC-SHA1",
"SignatureVersion" => "1.0",
"SignatureNonce" => substr(md5(rand(1, 99999999)), rand(1, 9), 14),
);
$params = array_merge($publicParams, $requestParams);
$params['Signature'] = $this->sign($params, $this->accessSecrec);
$uri = http_build_query($params);
$url = 'http://alidns.aliyuncs.com/?'.$uri;
$url = 'http://alidns.aliyuncs.com/?' . $uri;
return $this->curl($url);
}
private function sign($params, $accessSecrec, $method = "GET") {
ksort($params);
$stringToSign = strtoupper($method).'&'.$this->percentEncode('/').'&';
$stringToSign = strtoupper($method) . '&' . $this->percentEncode('/') . '&';
$tmp = "";
foreach($params as $key => $val){
$tmp .= '&'.$this->percentEncode($key).'='.$this->percentEncode($val);
foreach ($params as $key => $val) {
$tmp .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($val);
}
$tmp = trim($tmp, '&');
$stringToSign = $stringToSign.$this->percentEncode($tmp);
$stringToSign = $stringToSign . $this->percentEncode($tmp);
$key = $accessSecrec.'&';
$key = $accessSecrec . '&';
$hmac = hash_hmac("sha1", $stringToSign, $key, true);
return base64_encode($hmac);
}
private function percentEncode($value = null){
private function percentEncode($value = null) {
$en = urlencode($value);
$en = str_replace("+", "%20", $en);
$en = str_replace("*", "%2A", $en);
@ -244,23 +240,23 @@ class AliDns {
private function curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_HEADER, 1);
//curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$result = curl_exec ($ch);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return array($info["http_code"],$result);
curl_close($ch);
return array($info["http_code"], $result);
}
private function out($arr) {
$t = json_decode($arr[1], true);
$t["httpcode"] = $arr[0];
$t = json_decode($arr[1], true);
$t["httpcode"] = $arr[0];
return $t;
}
}
}

201
php-version/txydns.php Executable file → Normal file
View File

@ -2,40 +2,38 @@
date_default_timezone_set("GMT");
//去 https://console.cloud.tencent.com/cam/capi 页面申请
/*
$obj = new TxyDns(txyaccessKeyId, APPKEY, APPTOKEN);
//显示所有域名
$data = $obj->DomainList();
if ($data["code"]!=0) {
echo $data["message"] . "\n";
}
//可以增加同名的二条
echo $data["message"] . "\n";
}
//可以增加同名的二条
$data = $obj->RecordCreate("www3","TXT",rand(10,1000));
$data = $obj->RecordCreate("www3","TXT",rand(10,1000));
$data = $obj->RecordCreate("www3.www3","TXT",rand(10,1000));
if ($data["code"]!=0) {
echo $data["message"] . "\n";
}
echo $data["message"] . "\n";
}
//查看一个主机的所有txt 记录
$data = $obj->RecordList("www3.www3","TXT");
//查看一个主机的所有txt 记录
$data = $obj->RecordList("www3.www3","TXT");
$data = $obj->RecordList("www3","TXT");
$records = $data["data"]["records"];
foreach ($records as $k=>$v) {
//根据ID修改记录
$data = $obj->RecordModify("www3", "TXT", rand(1000,2000), $v["id"]);
//根据ID删除记录
$obj->RecordDelete($v["id"]);
}
*/
$data = $obj->RecordList("www3","TXT");
$records = $data["data"]["records"];
foreach ($records as $k=>$v) {
//根据ID修改记录
$data = $obj->RecordModify("www3", "TXT", rand(1000,2000), $v["id"]);
//根据ID删除记录
$obj->RecordDelete($v["id"]);
}
*/
###### 代码运行
//php txydns.php add "www.yudadan.com" "k1" "v1" AKIDwlPr7DUpLgpZBb4tlT0MWUHtIVXOJwxm mMkxzoTxOirrfJlFYfbS7g7792jEi5GG
# 第一个参数是 action代表 (add/clean)
# 第二个参数是域名
# 第三个参数是主机名(第三个参数+第二个参数组合起来就是要添加的 TXT 记录)
@ -43,51 +41,50 @@ $obj->RecordDelete($v["id"]);
# 第五个参数是 APPKEY
# 第六个参数是 APPTOKEN
echo "域名 API 调用开始\n" ;
echo "域名 API 调用开始\n";
if (count($argv)<7) {
echo "参数有误\n";
exit;
if (count($argv) < 7) {
echo "参数有误\n";
exit;
}
echo $argv[1] . "-" . $argv[2] . "-" . $argv[3] . "-" . $argv[4] . "-" . $argv[5] . "-" . $argv[6] . "\n";
$domainarray = TxyDns::getDomain($argv[2]);
$selfdomain = ($domainarray[0]=="")?$argv[3]:$argv[3] . "." . $domainarray[0];
$selfdomain = ($domainarray[0] == "") ? $argv[3] : $argv[3] . "." . $domainarray[0];
$obj = new TxyDns($argv[5], $argv[6], $domainarray[1]);
switch ($argv[1]) {
case "clean":
$data = $obj->RecordList($selfdomain , "TXT");
if ($data["code"]!=0) {
echo "txy dns 记录获取失败-" . $data["message"] . "\n";
exit;
}
$records = $data["data"]["records"];
foreach ( $records as $k=>$v) {
$data = $obj->RecordDelete($v["id"]);
if ($data["code"]!=0) {
echo "txy dns 记录删除失败-" . $data["message"] . "\n";
exit;
}
}
break;
case "add":
$data = $obj->RecordCreate($selfdomain, "TXT", $argv[4]);
if ($data["code"]!=0) {
echo "txy dns 记录添加失败-" . $data["message"] . "\n";
exit;
}
break;
case "clean":
$data = $obj->RecordList($selfdomain, "TXT");
if ($data["code"] != 0) {
echo "txy dns 记录获取失败-" . $data["message"] . "\n";
exit;
}
$records = $data["data"]["records"];
foreach ($records as $k => $v) {
$data = $obj->RecordDelete($v["id"]);
if ($data["code"] != 0) {
echo "txy dns 记录删除失败-" . $data["message"] . "\n";
exit;
}
}
break;
case "add":
$data = $obj->RecordCreate($selfdomain, "TXT", $argv[4]);
if ($data["code"] != 0) {
echo "txy dns 记录添加失败-" . $data["message"] . "\n";
exit;
}
break;
}
echo "域名 API 调用成功结束\n" ;
echo "域名 API 调用成功结束\n";
####### 基于腾讯云 DNS API 实现的 PHP 类,参考 https://cloud.tencent.com/document/product/302/4032
@ -104,59 +101,59 @@ class TxyDns {
$this->accessSecrec = $accessSecrec;
$this->DomainName = $domain;
}
/*
根据域名返回主机名和二级域名
*/
public static function getDomain($domain) {
//常见根域名 【https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains】
// 【http://www.seobythesea.com/2006/01/googles-most-popular-and-least-popular-top-level-domains/】
$arr[]=".uk";
$arr[]=".hk";
$arr[]=".net";
$arr[]=".com";
$arr[]=".edu";
$arr[]=".mil";
$arr[]=".com.cn";
$arr[]=".org";
$arr[]=".cn";
$arr[]=".gov";
$arr[]=".net.cn";
$arr[]=".io";
$arr[]=".co.jp";
$arr[]=".com.tw";
$arr[]=".info";
$arr[]=".io";
$arr[]=".top";
$arr[]=".me";
$arr[]=".int";
$arr[]=".edu";
//二级域名
$seconddomain ="";
//子域名
$selfdomain = "";
//根域名
$rootdomain = "";
foreach ($arr as $k=>$v) {
$pos = stripos($domain,$v);
if ($pos) {
$rootdomain = substr($domain,$pos);
$s = explode(".",substr($domain,0,$pos));
$seconddomain = $s[count($s)-1] . $rootdomain;
for ($i=0;$i<count($s)-1;$i++)
$selfdomain .= $s[$i];
break;
}
}
//echo $seconddomain ;exit;
if ($rootdomain=="") {
$seconddomain = $domain;
$selfdomain = "";
}
return array($selfdomain,$seconddomain);
/*
根据域名返回主机名和二级域名
*/
public static function getDomain($domain) {
//常见根域名 【https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains】
// 【http://www.seobythesea.com/2006/01/googles-most-popular-and-least-popular-top-level-domains/】
$arr[] = ".uk";
$arr[] = ".hk";
$arr[] = ".net";
$arr[] = ".com";
$arr[] = ".edu";
$arr[] = ".mil";
$arr[] = ".com.cn";
$arr[] = ".org";
$arr[] = ".cn";
$arr[] = ".gov";
$arr[] = ".net.cn";
$arr[] = ".io";
$arr[] = ".co.jp";
$arr[] = ".com.tw";
$arr[] = ".info";
$arr[] = ".io";
$arr[] = ".top";
$arr[] = ".me";
$arr[] = ".int";
$arr[] = ".edu";
//二级域名
$seconddomain = "";
//子域名
$selfdomain = "";
//根域名
$rootdomain = "";
foreach ($arr as $k => $v) {
$pos = stripos($domain, $v);
if ($pos) {
$rootdomain = substr($domain, $pos);
$s = explode(".", substr($domain, 0, $pos));
$seconddomain = $s[count($s) - 1] . $rootdomain;
for ($i = 0; $i < count($s) - 1; $i++)
$selfdomain .= $s[$i];
break;
}
}
//echo $seconddomain ;exit;
if ($rootdomain == "") {
$seconddomain = $domain;
$selfdomain = "";
}
return array($selfdomain, $seconddomain);
}
public function error($code, $str) {