Kaynağa Gözat

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

ywdblog 6 yıl önce
ebeveyn
işleme
f78bce602f
2 değiştirilmiş dosya ile 57 ekleme ve 11 silme
  1. 1 1
      README.md
  2. 56 10
      txydns.php

+ 1 - 1
README.md

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

+ 56 - 10
txydns.php

@@ -8,16 +8,17 @@ define("txyaccessKeyId", "");
 define("txyaccessSecrec", "");
 
 ######### 类测试
-
 /*
   $obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, "yudadan.com");
   //显示所有域名
   //$obj->DomainList();
   //添加域名 TXT 记录
-  //$obj->RecordCreate("www3","TXT","s");
+  $obj->RecordCreate("www3","TXT","s");
   //显示某个域名所有的 TXT 记录
-  //$obj->RecordList("www3","TXT");
- */
+  $data = $obj->RecordList("www3","TXT");
+
+*/
+
 
 ###### 代码运行
 // php txydns.php  "simplehttps.com" "txtname" "txtvalue"  
@@ -25,17 +26,19 @@ define("txyaccessSecrec", "");
 //$argv[2] = "www3";
 //$argv[3] = "ssssss";
 
-$obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, $argv[1]);
-$data = $obj->RecordList($argv[2], "TXT");
+$domainarray = TxyDns::getDomain($argv[1]);
+$selfdomain = ($domainarray[0]=="")?$argv[2]:$argv[2] . "." . $domainarray[0];
+
+$obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, $domainarray[1]);
+$data = $obj->RecordList($selfdomain , "TXT");
 if ($data["code"] != "0") {
-    $obj->error($data["code"], $data["message"]);
+	$obj->error($data["code"], $data["message"]);
 }
-
 $records = $data["data"]["records"];
 foreach ($records as $k => $v) {
     // 如果存在记录,则直接修改。
-    if ($v["name"] == $argv[2]) {
-        $data = $obj->RecordModify($argv[2], "TXT", $argv[3], $v["id"]);
+    if ($v["name"] == $selfdomain) {
+        $data = $obj->RecordModify($selfdomain, "TXT", $argv[3], $v["id"]);
         if ($data["code"] != "0") {
             $obj->error($data["code"], $data["message"]);
         }
@@ -65,6 +68,49 @@ class TxyDns {
         $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 error($code, $str) {
         echo "操作错误:" . $code . ":" . $str;