public static DescribeDomainRecordsResponse Unmarshall(UnmarshallerContext context) { DescribeDomainRecordsResponse describeDomainRecordsResponse = new DescribeDomainRecordsResponse(); describeDomainRecordsResponse.HttpResponse = context.HttpResponse; describeDomainRecordsResponse.RequestId = context.StringValue("DescribeDomainRecords.RequestId"); describeDomainRecordsResponse.TotalCount = context.LongValue("DescribeDomainRecords.TotalCount"); describeDomainRecordsResponse.PageNumber = context.LongValue("DescribeDomainRecords.PageNumber"); describeDomainRecordsResponse.PageSize = context.LongValue("DescribeDomainRecords.PageSize"); List <DescribeDomainRecordsResponse.Record> domainRecords = new List <DescribeDomainRecordsResponse.Record>(); for (int i = 0; i < context.Length("DescribeDomainRecords.DomainRecords.Length"); i++) { DescribeDomainRecordsResponse.Record record = new DescribeDomainRecordsResponse.Record(); record.DomainName = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].DomainName"); record.RecordId = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].RecordId"); record.RR = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].RR"); record.Type = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].Type"); record.Value = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].Value"); record.TTL = context.LongValue("DescribeDomainRecords.DomainRecords[" + i + "].TTL"); record.Priority = context.LongValue("DescribeDomainRecords.DomainRecords[" + i + "].Priority"); record.Line = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].Line"); record.Status = context.StringValue("DescribeDomainRecords.DomainRecords[" + i + "].Status"); record.Locked = context.BooleanValue("DescribeDomainRecords.DomainRecords[" + i + "].Locked"); record.Weight = context.IntegerValue("DescribeDomainRecords.DomainRecords[" + i + "].Weight"); domainRecords.Add(record); } describeDomainRecordsResponse.DomainRecords = domainRecords; return(describeDomainRecordsResponse); }
/// <summary> /// 根据域名获取解析记录 /// </summary> /// <param name="domain">域名</param> /// <returns></returns> public static List <DescribeDomainRecordsResponse.Record> GetDomainRecords(string domain) { try { IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", CGlobalConfig.AccessKey, CGlobalConfig.AccessKeySecret); DefaultAcsClient client = new DefaultAcsClient(clientProfile); DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest(); request.DomainName = domain; try { DescribeDomainRecordsResponse response = client.GetAcsResponse(request); List <DescribeDomainRecordsResponse.Record> list = response.DomainRecords; return(list); } catch (ServerException e) { CLogHelper.WriteError(" GetDomainRecords 发送异常:" + e.ErrorCode + "\t" + e.ErrorMessage); } catch (ClientException e) { CLogHelper.WriteError(" GetDomainRecords 发送异常:" + e.ErrorCode + "\t" + e.ErrorMessage); } } catch (Exception ex) { CLogHelper.WriteError(" GetDomainRecords 发送异常:" + ex.ToString()); } return(new List <DescribeDomainRecordsResponse.Record>()); }
public void UpdateDomainRecord(string currentIp) { //基础参数 string regionId = Options.Config.RegionId; string accessKeyId = Options.Config.AccessKeyId; string accessKeySecret = Options.Config.AccessKeySecret; int globalPageSize = Options.Config.PageSize; //string domainName = "mydomain.com"; //string rr = "www"; //string currentIp = GetCurrentIp(); Logger.LogDebug($"This computer's network IP address is \"{currentIp}\""); foreach (var domainRecord in Options.DomainRecords) { Logger.LogDebug($"Ready to update the domain name is \"{domainRecord.DomainName}\""); Logger.LogDebug($"The RR is \"{domainRecord.RR}\""); Logger.LogDebug($"Current DateTime is \"{DateTime.Now.ToLongDateTime()}\""); Logger.LogDebug(string.Empty); try { int pageSize = domainRecord.PageSize > 0 ? domainRecord.PageSize : globalPageSize; //初始化默认的ACS客户端 IClientProfile clientProfile = DefaultProfile.GetProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(clientProfile); //初始化指定域名的解析记录信息查询请求 DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest { PageNumber = 1, PageSize = pageSize, RRKeyWord = domainRecord.RR, TypeKeyWord = Type, DomainName = domainRecord.DomainName //AcceptFormat = FormatType.JSON }; //执行并且获取查询指定域名的解析记录信息的响应结果 DescribeDomainRecordsResponse describeDomainRecordsResponse = client.GetAcsResponse(describeDomainRecordsRequest); Logger.LogDebug($"No.0 <<DescribeDomainRecordsResponse>> The request id is \"{describeDomainRecordsResponse.RequestId}\""); Logger.LogDebug($"No.0 <<DescribeDomainRecordsResponse>> Total number of records matching your query is \"{describeDomainRecordsResponse.TotalCount}\""); Logger.LogDebug($"No.0 <<DescribeDomainRecordsResponse>> The raw content is \"{Encoding.UTF8.GetString(describeDomainRecordsResponse.HttpResponse.Content)}\""); Logger.LogDebug(string.Empty); if (describeDomainRecordsResponse.TotalCount.HasValue && describeDomainRecordsResponse.TotalCount.Value > 0 && describeDomainRecordsResponse.DomainRecords.Any()) { //待更新的解析记录总列表 var domainRecords = describeDomainRecordsResponse.DomainRecords; //总页数 int totalPage = Convert.ToInt32(describeDomainRecordsResponse.TotalCount.Value / pageSize); if ((describeDomainRecordsResponse.TotalCount.Value % pageSize) > 0) { totalPage++; } //当总页数大于1时,表示还有下一页 if (totalPage > 1) { //从第二页开始获取待更新的解析记录列表 for (int pageNumber = 2; pageNumber <= totalPage; pageNumber++) { describeDomainRecordsRequest.PageNumber = pageNumber; describeDomainRecordsResponse = client.GetAcsResponse(describeDomainRecordsRequest); if (describeDomainRecordsResponse.DomainRecords.Any()) { //添加到待解析记录总列表 domainRecords.AddRange(describeDomainRecordsResponse.DomainRecords); } } } //更新指定域名的解析记录值 int index = 0; foreach (var item in domainRecords) { index++; if (item.Value == currentIp) { Logger.LogDebug($"No.{index} <<DescribeDomainRecordsResponse>> The record id is \"{item.RecordId}\", Domain Name is \"{item.DomainName}\", RR is \"{item.RR}\", value is \"{item.Value}\", does not need to be updated"); Logger.LogDebug(string.Empty); continue; } //初始化指定域名的解析记录更新请求 UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest { RecordId = item.RecordId, RR = item.RR, Type = item.Type, Value = currentIp }; //执行并且获取更新指定域名的解析记录的响应结果 UpdateDomainRecordResponse updateDomainRecordResponse = client.GetAcsResponse(updateDomainRecordRequest); Logger.LogDebug($"No.{index} <<UpdateDomainRecordRequest>> updating the domain name is \"{item.RR}.{item.DomainName}\""); Logger.LogDebug($"No.{index} <<UpdateDomainRecordRequest>> Before updating the record value is \"{item.Value}\""); Logger.LogDebug($"No.{index} <<UpdateDomainRecordRequest>> Updated the record value is \"{currentIp}\""); Logger.LogDebug($"No.{index} <<UpdateDomainRecordRequest>> The request id is \"{updateDomainRecordResponse.RequestId}\""); Logger.LogDebug($"No.{index} <<UpdateDomainRecordRequest>> The record id is \"{updateDomainRecordResponse.RecordId}\""); Logger.LogDebug(string.Empty); } } Logger.LogDebug($"Update \"{domainRecord.DomainName}\" completed!"); Logger.LogDebug(string.Empty); } catch (ServerException ex) { Logger.LogDebug(0, ex, $"Throw {nameof(ServerException)}"); } catch (ClientException ex) { Logger.LogDebug(0, ex, $"Throw {nameof(ClientException)}"); } catch (Exception ex) { Logger.LogDebug(0, ex, $"Throw {nameof(Exception)}"); } } Logger.LogDebug("Update all completed!"); }
//定时执行事件 private void TimedEvent(object sender, System.Timers.ElapsedEventArgs e) { //每次都重新获取配置(可以动态修改而不用重启服务) GetConfig(); if (!configExist_) { logger.Error(" Not Config Yet ...... 【Skip】"); return; } string currentInternetIp = GetInternetIP(); if (currentInternetIp.Length == 0) { logger.Info("Can't Get Current Internet Ip ...... 【Skip】"); return; } IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId_, accessKeySecret_); DefaultAcsClient client = new DefaultAcsClient(); DescribeDomainRecordsRequest reqFetch = new DescribeDomainRecordsRequest(); reqFetch.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON; reqFetch.DomainName = domainName_; string dnsIp = "", recordId = ""; try { DescribeDomainRecordsResponse resFetch = client.GetAcsResponse(reqFetch); foreach (var r in resFetch.DomainRecords) { if (r.RR == subDomainName_) { dnsIp = r.Value; recordId = r.RecordId; } } } catch (ServerException ex) { logger.Error("Server Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } catch (ClientException ex) { logger.Error("Client Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } if (dnsIp.Length == 0) { logger.Info("Can't Get Dns Record , Add New Record ."); AddDomainRecordRequest reqAdd = new AddDomainRecordRequest(); reqAdd.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON; reqAdd.DomainName = domainName_; reqAdd.RR = subDomainName_; reqAdd.Type = "A"; reqAdd.Value = currentInternetIp; try { //添加解析记录 AddDomainRecordResponse resAdd = client.GetAcsResponse(reqAdd); logger.Info("\r\n Dns Record Add ...... 【OK】 \r\n New Dns Record Is : " + currentInternetIp); } catch (ServerException ex) { logger.Error("Dns Record Add ...... 【Error】 \r\n Server Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } catch (ClientException ex) { logger.Error("Dns Record Add ...... 【Error】 \r\n Client Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } } else { if (currentInternetIp == dnsIp) { logger.Info("Current Internet Ip Is : " + currentInternetIp + " ,Same As Dns Record ...... 【Skip】"); } else { //更新记录 UpdateDomainRecordRequest reqUpdate = new UpdateDomainRecordRequest(); reqUpdate.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON; reqUpdate.RecordId = recordId; reqUpdate.RR = subDomainName_; reqUpdate.Type = "A"; reqUpdate.Value = currentInternetIp; try { //更新解析记录 UpdateDomainRecordResponse resUpdate = client.GetAcsResponse(reqUpdate); logger.Info("\r\n Update Dns Record ...... 【OK】 \r\n New Dns Record Is : " + currentInternetIp); } catch (ServerException ex) { logger.Error("Dns Record Update ...... 【Error】 \r\n Server Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } catch (ClientException ex) { logger.Error("Dns Record Update ...... 【Error】 \r\n Client Error >> code : " + ex.ErrorCode + " | Error Message : " + ex.ErrorMessage); } } } }