<?php
/**
*
* 只支持 腾讯云DNSPod,支持IPV4和IPV6
*
* 将该php文件上传到群晖,然后添加到任务计划即可
* 详细使用方法和疑问,请访问:https://blog.csdn.net/alinathz/article/details/125602194
*
*
* 修改下面3个变量即可
* $token 为接口的 id,token(中间用英文逗号相连)
* $domain 为主域名
* $sub_name 为子域名前缀,如mail.126.com,则改为mail
* $type = ['A']只解析ipv4, ['AAAA']只解析ipv6, ['A', 'AAAA'] 同时解析
*/
$token = '122093,198759789423dgfsd681ba1cbc1aa3';
$domain = '126.com';
$sub_name = 'mail';
$type = ['A', 'AAAA'];
$dns = new DdnsPod($token,$domain,$sub_name,$type);
$dns->dnsCheck();
/**
* DDNSPOD 类
*/
class DdnsPod{
private $token, $domain, $sub_name, $type;
public function __construct($token,$domain,$sub_name,$type)
{
$this->token = $token;
$this->domain = $domain;
$this->sub_name = $sub_name;
$this->type = $type;
}
/**
* [检查更新dns]
* @return [type] [description]
*/
public function dnsCheck(){
$local['A'] = in_array('A', $this->type) ? $this->getIpv4() : '';
$local['AAAA'] = in_array('AAAA', $this->type) ? $this->getIpv6() : '';
$separator = count($this->type) == 2 ? ' & ':'';
$dnsInfo = $this->dnsInfo();
echo "###########################################################################".PHP_EOL;
echo '# 设备地址:'.$local['A'].$separator.$local['AAAA'].PHP_EOL;
$record = $separator = '';
$recordArr = [];
foreach($dnsInfo as $key=>$value){
if (in_array($value['type'], $this->type)) {
$record .= $separator.$value['value'];
$separator = ' & ';
$recordArr[$value['type']]['id'] = $value['id'];
$recordArr[$value['type']]['value'] = $value['value'];
}
}
echo '# 解析记录:'.$this->sub_name.'.'.$this->domain.' => '.$record.PHP_EOL;
foreach ($recordArr as $key => $value) {
if (!empty($local[$key])) {
if ($recordArr[$key]['value'] == $local[$key]) {
echo '# 处理结果:'.$key.'记录无须更新...'.PHP_EOL;
}else{
$rs = $this->dnsUpdate($recordArr[$key]['id'], $local[$key]);
if ($rs['code'] == '1') {
echo '# 处理结果:'.$key.'记录更新成功...'.PHP_EOL;
echo '# 修改记录:'.$this->sub_name.'.'.$this->domain.' => '.$local[$key].PHP_EOL;
}else{
echo '# 处理结果:'.$rs['msg'].PHP_EOL;
}
}
}
}
echo "###########################################################################".PHP_EOL;
echo "来自:https://blog.csdn.net/alinathz/article/details/125602194".PHP_EOL;
}
/**
* [更新dns]
* @return [type] [description]
*/
public function dnsUpdate($id, $ip){
$checkIP = explode('.', $ip);
$type = count($checkIP) == 4 ? 'A' : 'AAAA';
$str = 'domain='.$this->domain.'&record_id='.$id.'&sub_domain='.$this->sub_name.'&record_type='.$type.'&record_line=默认&value='.$ip;
list($httpCode, $response) = $this->apiPost('Record.Modify', $str);
$json = json_decode($response, true);
if ($json['status']['code'] == '1') {
return ['code' =>$json['status']['code'], 'msg'=>$json['record']['value']];
}else{
return ['code' =>$json['status']['code'], 'msg'=>$json['status']['message']];
}
}
/**
* [获取公网ipv6]
* @return [字符串] ipv6字符串
*/
public function getIpv6(){
exec("ifconfig", $out, $stats);
foreach($out as $value){
$tmp = explode('inet6 addr:',$value);
$tmp1 = explode(':',trim($tmp[1]));
if ($tmp1[0] != 'fe80' && !empty($tmp1[0])) {
list($ipv6) = explode('/', trim($tmp[1]));
return $ipv6;
}
}
}
public function getIpv4(){
$ip = file_get_contents('http://ip.3322.net/');
return trim($ip);
}
/**
* [获取dns信息]
* @return [数组] id,type,ip,name
*/
public function dnsInfo(){
$str = 'domain='.$this->domain.'&sub_domain='.$this->sub_name;
list($httpCode, $response) = $this->apiPost('Record.List', $str);
$json = json_decode($response, true);
if ($json['status']['code'] != '1') {
echo '错误:'.$json['status']['message'].PHP_EOL;
exit();
}else{
if (count($json['records']) > 0) {
return $json['records'];
}else{
echo '错误:找不到域名 '.$this->sub_name.'.'.$this->domain.' 的解析记录...'.PHP_EOL;
exit();
}
}
}
/**
* [apiPost description]
* @param [字符串] $handler [操作]
* @param [字符串] $parameter [参数]
* @return [数组]
*/
public function apiPost($handler, $parameter)
{
$url = 'https://dnsapi.cn/'.$handler;
$parameter = 'login_token='.$this->token.'&format=json&'.$parameter;
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameter);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($httpCode, $response);
}
}
?>
没有合适的资源?快使用搜索试试~ 我知道了~
黑群晖专用:php版DNSPod
共1个文件
php:1个
需积分: 49 4 下载量 124 浏览量
2022-07-23
02:07:29
上传
评论 1
收藏 2KB 7Z 举报
温馨提示
域名停靠在腾讯云,所以没办法只写了这个,代码还有待完善,能用就行..... 支持更新A记录(IPV4)和AAAA记录(IPV6),也可以同时更新两个记录,设置看文件的说明,使用方法见:https://blog.csdn.net/alinathz/article/details/125602194
资源详情
资源评论
资源推荐
收起资源包目录
DNSPod.7z (1个子文件)
DNSPod.php 5KB
共 1 条
- 1
୧⍢⃝୨LonelyCoder
- 粉丝: 109
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0