Bladeren bron

【阿里云】修复不能校验二级域名、三级域名 DNS 记录的bug

ywdblog 6 jaren geleden
bovenliggende
commit
16747bad14
2 gewijzigde bestanden met toevoegingen van 51 en 7 verwijderingen
  1. 1 1
      README.md
  2. 50 6
      alydns.php

+ 1 - 1
README.md

@@ -27,7 +27,7 @@ $ chmod 0777 au.sh autxy.sh python-version/au.sh
 目前该工具支持三种运行环境:
 
 - au.sh:操作阿里云 DNS hook shell(PHP 环境)。
-- autxy.sh:操作腾讯云 DNS hook shell(PHP 环境),**最近新增**
+- autxy.sh:操作腾讯云 DNS hook shell(PHP 环境)。
 - python-version/au.py:操作阿里云 DNS hook shell(Python 2.7/3.6),感谢 @Duke-Wu 的 PR。
 
 这三种运行环境什么意思呢?就是可根据自己服务器环境和域名服务商选择任意一个 hook shell(操作的时候任选其一即可)。

+ 50 - 6
alydns.php

@@ -6,7 +6,6 @@ date_default_timezone_set("GMT");
 define("accessKeyId", "");
 define("accessSecrec", "");
 
-
 /*
 //$obj = new AliDns(accessKeyId, accessSecrec, "newyingyong.cn");
 
@@ -35,25 +34,28 @@ define("accessSecrec", "");
 /*
 example:
 
-php alydns.php  "newyingyong.cn" "test" "test2" 
+php alydns.php  "simplehttps.com" "test" "test2" 
 */
 
 ########## 配合 cerbot 运行 
 
 echo $argv[1] . "-" . $argv[2] . "-" . $argv[3];
 
-$obj = new AliDns(accessKeyId, accessSecrec, $argv[1]);
+$domainarray = AliDns::getDomain($argv[1]);
+$selfdomain = ($domainarray[0]=="")?$argv[2]:$argv[2] . "." . $domainarray[0];
+
+$obj = new AliDns(accessKeyId, accessSecrec, $domainarray[1]);
 $data = $obj->DescribeDomainRecords();
 $data = $data["DomainRecords"]["Record"];
 if (is_array($data)) {
       foreach ($data as $v) {
-           if ($v["RR"] == $argv[2]) {
-               $obj->DeleteDomainRecord($v["RecordId"]);
+           if ($v["RR"] == $selfdomain) {
+               $res = $obj->DeleteDomainRecord($v["RecordId"]);
            }
       }
 } 
 
-print_r($obj->AddDomainRecord("TXT", $argv[2],$argv[3]));
+$res = $obj->AddDomainRecord("TXT", $selfdomain,$argv[3]);
 
 ############ Class 定义
 
@@ -68,6 +70,48 @@ class AliDns {
         $this->accessSecrec = $accessSecrec;
         $this->DomainName = $domain;
     }
+    /*
+	根据域名返回主机名和二级域名
+    */
+    public static function getDomain($domain) {
+	
+    	//常见根域名
+    	$arr[]=".co.jp";
+    	$arr[]=".com.tw";
+    	$arr[]=".net";
+    	$arr[]=".com";
+    	$arr[]=".com.cn";
+    	$arr[]=".org";
+    	$arr[]=".cn";
+    	$arr[]=".gov";
+    	$arr[]=".net.cn";
+    	$arr[]=".io";
+
+    	//二级域名
+    	$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(