阿里云解析记录应对家里动态IP
<?php
#需要配置的项
define('ACCESSKEYID',''); #阿里云用户密钥ID 获取方法 https://help.aliyun.com/knowledge_detail/38738.html
define('ACCESSKEYSECRET','');#阿里云用户密钥
define('RR','myhome'); #二级域名的记录名 如果是一级 请用@
define('RECORDID','');
/*解析记录ID ,需要在
https://api.aliyun.com/?spm=a2c4g.11186623.2.26.79ae2846d9RBBa#/?product=Alidns&api=AddDomainRecord¶ms={}&tab=DEMO&lang=JAVA
先设置一个记录 然后获取这个ID 添加所需的参数文档在
https://help.aliyun.com/document_detail/29772.html?spm=a2c4g.11186623.4.3.392b5eb4SAeph9
*/
define('GET_IP_URL','myip.fireflysoft.net');
define('IP_FILE','./ip.txt');
function 获取HTTP($url)
{
$curl_samples = curl_init();
$options = [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => 1,CURLOPT_FOLLOWLOCATION => 1,];
curl_setopt_array($curl_samples, $options);
curl_setopt($curl_samples, CURLOPT_CUSTOMREQUEST, 'GET');
$ip = curl_exec($curl_samples);
$info = curl_getinfo($curl_samples);
$curl_err = curl_errno($curl_samples);
curl_close($curl_samples);
if( 0 != $curl_err )
{
echo "getip error:".date('Y-m-d H:i:s',time());
var_dump($info);
echo PHP_EOL;
var_dump($ip);
exit;
}
return $ip;
}
function 编码字符($string)
{
$result = urlencode($string);
$result = str_replace(['+', '*'], ['%20', '%2A'], $result);
$result = preg_replace('/%7E/', '~', $result);
return $result;
}
function 排序参数计算签名($parameters,$method="GET")
{
ksort($parameters);
$canonicalizedQuery = '';
foreach ($parameters as $key => $value)
{
$canonicalizedQuery .= '&' . 编码字符($key) . '=' . 编码字符($value);
}
$stringToBeSigned = $method. '&%2F&'. 编码字符(substr($canonicalizedQuery, 1));
return base64_encode(hash_hmac('sha1', $stringToBeSigned, ACCESSKEYSECRET . '&', true));
}
function 主函数()
{
$ip = 获取HTTP(GET_IP_URL);
if(!file_exists(IP_FILE))
{
file_put_contents(IP_FILE,$ip);
}else
{
$旧IP = file_get_contents(IP_FILE);
}
if(!isset($旧IP) || $旧IP !== $ip)
{
#请求dns的API重新做解析
$api_url = 'https://alidns.aliyuncs.com/?';
$data = [];
#公共参数
$data['Format'] = 'json';
$data['Version'] = '2015-01-09';
$data['SignatureMethod'] = 'HMAC-SHA1';
$data['SignatureNonce'] = uniqid();
$data['SignatureVersion']= '1.0';
$data['AccessKeyId'] = ACCESSKEYID;
//$data['Timestamp'] = date('Y-m-d\TH:i:s\Z',time());
$data['Timestamp'] = gmdate("Y-m-d\TH:i:s\Z");
#专用参数
$data['Action'] = 'UpdateDomainRecord';
$data['RecordId'] = RECORDID; #解析记录的ID,此参数在添加解析时会返回,在获取域名解析列表时会返回
$data['RR'] = RR; #主机记录
$data['Type'] = 'A';
$data['Value'] = $ip;
$data['TTL'] = 600;
#$data['Priority'] = 10; #MX记录的优先级,取值范围[1,10],记录类型为MX记录时,此参数必须
$data['Line'] = 'default';
#签名
$data['Signature'] = 排序参数计算签名($data);
#请求接口
$json = 获取HTTP($api_url . http_build_query($data));
$result = json_decode($json);
#完成以后
if(isset($result->RecordId)){
file_put_contents(IP_FILE,$ip);
}else{
echo 'error';
var_dump($result);
}
}else
{
echo 'IP没有发生变化,不需要修改解析记录';
}
}
主函数();
建立计划任务
阿里云解析记录应对家里动态IP的更多相关文章
- aspnetcore 容器化部属到阿里云全过程记录
第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...
- 【转载】阿里云ECS Linux服务器禁止某些IP访问
在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...
- 阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
说明: 1.必须要有一台机器具有外网IP的ECS. 2.如果不想配置具有外网IP的ECS时,可以购买NAT网关,但需要钱,贵.下面会说明NAT网关的配置. 3.最后吐槽一下阿里云VPC网关导致不能按照 ...
- 如何把php项目部署到阿里云服务器window server2012__含公网ip访问时jquery/ajax失效解决办法
记一次蛋疼的折腾. 弄了一晚上最后发觉是360浏览器的问题,换个浏览器就好了.垃圾360用什么IE7文档模式.导致界面和功能失效. 建议大家测试的时候用firefox或者chrome. 项目部署到服务 ...
- xshell连接不上阿里云服务器Could not connect to 'ip' (port 22): Connection failed.解决过程
记一次xshell阿里云服务器突然连接不上的解决办法: 1, 确认阿里云服务器安全组出入都有22,百度出来都说的这个和ip拦截设置,以防万一都设置了:但楼主设置后,还是连不上服务器: 只好下一步 2, ...
- 阿里云专有网络配置以及交换机配置+ip、子网掩码、ip网段计算原理讲解
在阿里云上购买ECS或者其他服务,如redis.polardb时,需要配置专有网络,阿里的文档写的总体上还是比较抽象的,没有一定的网络基础,会一脸懵. 所以这里我来进行专有网络和交换机的配置,以及ip ...
- 阿里云服务器,无法通过公网ip访问实例
昨天得知阿里云esc又打折了,赶紧入手了一波,因为以前有部署过的经验,所以很快就部署上了项目,就在欣喜的访问时,却无访问. 我按照下面步骤一步一步的检测, 1.服务器上是否成功部署jdk和tomcat ...
- 码云转移至阿里云Code记录
用起来还是挺简单的,跟码云差不多,但关键是企业私有项目成员人数没有限制!码云限制5人(免费) 注意两点: 1.导入仓库链接的时候,如果username是邮箱含@,要换成%40,不然这个项目直接报500 ...
- 阿里云CentOS使用iptables禁止某IP访问
在CentOS下封停IP,有封杀网段和封杀单个IP两种形式.一般来说,现在的攻击者不会使用一个网段的IP来攻击(太招摇了),IP一般都是散列的.于是下面就详细说明一下封杀单个IP的命令,和解封单个IP ...
随机推荐
- 豆瓣电影top250爬取并保存在MongoDB里
首先回顾一下MongoDB的基本操作: 数据库,集合,文档 db,show dbs,use 数据库名,drop 数据库 db.集合名.insert({}) db.集合名.update({条件},{$s ...
- mysql太多连接问题及解决方案
不管是JavaEE开发还是其他,只要是Linux系统下安装的mysql,通常默认最大连接为270. 如果你的客户端连接超过这个数,通常要么是配置文件修改,或者是命令行修改,配置文件修改和命令行修改的区 ...
- R3.4.0安装包时报错“需要TRUE/FALSE值的地方不可以用缺少值”,需升级到R3.5.0
错误: 解决方案: 升级R3.5.0后,解决:
- java spring boot项目部署-上
1.编写sh脚本,便于服务器上管理工程: #!/bin/bash source /etc/profile PROG_NAME=$ ACTION=$ usage() { echo "Usage ...
- JavaScript跨源资源共享
CORS(跨 源资源共享)基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功还是失败 IE对CORS的实现 IE8引入了XDR类型,与XHR类似,但可以实现安 ...
- 飞控入门之C语言指针回顾
指针 何为指针?来个官方定义:指针是一个值为内存地址的变量(或数据对象). 一.指针的声明 //示例 int *pi; //pi是指向int类型变量的指针 char *pc; // pi是指向char ...
- C语言学习记录_2019.02.23
char类型的输出: scanf("%d",&i);//i=49; char x=i; printf("x=%d\n",x); printf(" ...
- JavaScript总结(七)
JavaScript表单编程 表单是Web上与用户进行交互的主要界面.则我们需要掌握如何访问用户输入的表单数据,校验用户输入的正确性显得至关重要. ♞ 对Form元素进行脚本编写 ✍ 获取表单的应用 ...
- 微信小程序:设置启动页面
一.功能描述 微信小程序启动时,首先运行app.js,然后才跳转到第一个页面,也就是启动界面. 设置启动界面,只需要调整app.json的pages信息的位置,放在第一条的page记录便是启动界面
- python面试题(二)
最近参加了几场招聘,发现好多人的一些基础知识不是很扎实,做的题很多都是错误的,因此找了一些我们公司面试过程中的一些最基本的面试题供大家参考,希望各位都能找到一个好的工作.今天给大家先分享的是关于Pyt ...