阿里云域名解析服务

## 1、背景

阿里云是一个全球领先的云计算服务提供商,其域名解析服务可以帮助用户将域名映射到IP地址,从而使得网站可以被访问。然而,日常使用阿里云域名解析服务需要登录阿里云账号进行操作,这样手工操作费时费力。因此,我们需要使用Python编写程序来实现域名解析功能,以便快速方便地完成域名解析任务。具体实现过程为:通过调用阿里云API接口获取用户授权,然后使用Python的DNS解析库对域名进行解析,并将解析结果存储到本地或者发送到指定邮箱。这样就可以省去手动登录阿里云的步骤,大大提高了工作效率。

## 2、需求

在Python环境下,我们可以使用aliyun-python-sdk-alidns和aliyun-python-sdk-core这两个库来实现自动域名解析功能。这两个库分别提供了与阿里云API交互所需的接口和核心功能。

## 3、Python2自动域名解析

### 3.1 Python环境

本文使用的Python版本为2.7.5。需要注意的是,由于CentOS机器上默认安装的是Python 2.0的环境,因此在编写代码时需要使用Python 2.0的语法进行书写。

### 3.2 阿里云SDK

为了实现自动域名解析功能,我们需要使用以下两个阿里云SDK库:

- `aliyun-python-sdk-alidns`(版本号:2.6.20):`该库提供了与阿里云API交互所需的接口,包括域名解析、域名注册等操作。`

- `aliyun-python-sdk-core`(版本号:2.13.30):`该库提供了一些核心功能,如HTTP请求、JSON处理等。`

以下是根据您提供的内容重构后的代码段:

```python

#!/usr/bin/env python

#coding=utf-8

# 导入模块

import os

# 用于和操作系统交互

import sys

# 用于获取命令行参数

import time

# 用于处理时间相关的操作

import json

# 用于解析和生成 JSON 格式的数据

# 导入阿里云 SDK 相关模块

from aliyunsdkcore.client import AcsClient

from aliyunsdkcore.acs_exception.exceptions import ClientException

from aliyunsdkcore.acs_exception.exceptions import ServerException

from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest

# 创建一个 AcsClient 实例,用于调用阿里云 API

client = AcsClient('xxxx', 'xxxx', 'cn-xxxx')

# 获取命令行参数,并判断是否满足要求

v = sys.argv

if len(v) < 2:

print("域名或记录值不存在")

else:

m = v[1]

value = v[2]

domain = m.split(".xxx.com")[0] # 提取二级域名

# 创建一个阿里云 API 调用请求对象

request = AddDomainRecordRequest()

request.set_accept_format('json')

# 将 xxx.com 替换为你自己的一级域名

request.set_DomainName('xxx.com')

# 设置二级域名

request.set_RR(domain)

if len(value) <= 15:

request.set_Type('A') # 如果记录值不超过 15 个字符,则为 A 记录

else:

request.set_Type('CNAME') # 否则为 CNAME 记录

request.set_Value(value) # 设置记录值

# 发送 API 请求,并处理异常

try:

response = client.do_action_with_exception(request)

print(response)

except Exception as e:

print(e)

```

您好!使用方法如下:

1. 打开终端,输入以下命令:`./addDNS-xxx.py fyhm.xxxx.net`,其中xxx为需要解析的域名。

2. 如果需要解析IP地址,可以使用以下命令:`for i in `cat dns.list`;do ./addDNS-xx.py $i IP;done`。其中dns.list为包含域名和IP地址的文件名。

```bash

#!/bin/bash

# 日志级别 debug-1, info-2, warn-3, error-4, always-5

LOG_LEVEL=1

# 日志名称 job_name

job_name=dns_name

# 脚本目录 script_dir

script_dir=/opt

# 日志文件 LOG_FILE

LOG_FILE=$(echo ${job_name}.log)

# 调试日志函数

function log_debug() {

content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@"

[ $LOG_LEVEL -le 1 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"

}

# 信息日志函数

function log_info() {

content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@"

[ $LOG_LEVEL -le 2 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"

}

# 警告日志函数

function log_warn() {

content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@"

[ $LOG_LEVEL -le 3 ] && echo $content >>$LOG_FILE && echo -e "\033[33m" ${content} "\033[0m"

}

# 错误日志函数

function log_err() {

content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@"

[ $LOG_LEVEL -le 4 ] && echo $content >>$LOG_FILE && echo -e "\033[31m" ${content} "\033[0m"

}

# 一直都会打印的日志函数

function log_always() {

content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@"

[ $LOG_LEVEL -le 5 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"

}

# 根据用户输入选择对应的操作的主函数

function main() {

##显示菜单##

echo "请选择一个选项:"

echo "1.生产xxxx.com"

echo "2.测试xxxx.com"

echo "3.生产xxxx.net"

echo "4.测试xxxx.net"

echo "5.生产xxxx.com"

echo "6.测试xxxx.com"

##读取用户输入##

read choice

##根据用户输入选择对应的操作##

case $choice in

1)prod_fujfu;;

2)uat_fujfu;;

3)prod_xxxx;;

4)uat_xxxx;;

5)prod_mumugz;;

6)uat_mumugz;;

*)echo "无效的选项,请重新输入";;esac

}

#定义函数:增加解析记录

function add_dns_record() {

##校验域名是否符合要求##

local domain=$1 #域名参数为第一个参数,即local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$1 #域名参数为第一个参数,即domain=$1 local domain=$2 #域名参数为第二个参数,即local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=$2 #域名参数为第二个参数,即domain=$2 local domain=xxx.xxx.xxx.xxx $script_dir/addDNS.py xxx.xxx.xxx.xxx $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script_dir/addDNS-xxxx.py xxx.net $script