欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA]如何使用阿里云云解析API實(shí)現(xiàn)動(dòng)態(tài)域名解析,搭建私有服務(wù)器【含可執(zhí)行文件和源碼】

admin
2018年6月26日 11:51 本文熱度 4912

前言:懶人可以直接往下看,有代碼和全部資源可以下載。此文章是先前文章的修改版,主要是將代碼中的配置項(xiàng)放置到了app.config文件中,方便修改。未經(jīng)許可請(qǐng)勿轉(zhuǎn)載,如有疑問,請(qǐng)聯(lián)系作者:yxxrui@163.com

我遇到的問題:公司的網(wǎng)絡(luò)沒有固定的公網(wǎng)IP地址,但是需要能夠保證的是,每次動(dòng)態(tài)分配的IP地址均為獨(dú)立的公網(wǎng)IP,只是每次分配后會(huì)在1-2天后更換,或者重啟路由器后更換,為了能夠把這個(gè)公網(wǎng)IP利用起來,大家常用的是使用花生殼之類的軟件來操作,我使用過花生殼的多款產(chǎn)品,挺好的,就是有一下幾個(gè)缺點(diǎn):

1、需要使用花生殼上購買的域名才行,或者使用免費(fèi)的殼域名,其丑無比

2、不穩(wěn)定,也很慢

3、限制流量,超流量需要收費(fèi)

4、限制端口,特定端口需要收費(fèi)

5、需要在電腦上運(yùn)行一個(gè)花生殼的軟件

解決方案:但是為了解決問題,我開始摸索自己搞定它,公司域名從阿里云上購買,阿里云提供云解析技術(shù)免費(fèi)版,提供通過api來管理域名的功能,當(dāng)我看到該文檔的時(shí)候直接就看到了希望,解決起來絕對(duì)沒問題了。首先需要確認(rèn)一下,有兩種情況:

1、公司服務(wù)器直接接入網(wǎng)線,這個(gè)時(shí)候服務(wù)器的IP就是公網(wǎng)IP

2、公司服務(wù)器鏈接公司路由器,路由器鏈接網(wǎng)線,這個(gè)時(shí)候路由器上是公網(wǎng)IP,而服務(wù)器上是局域網(wǎng)IP

第一種情況最簡單了,不需要設(shè)置什么了,第二種情況需要到路由器設(shè)置界面設(shè)置端口轉(zhuǎn)發(fā)或者直接將全部端口映射到內(nèi)網(wǎng)的服務(wù)器IP上,這樣的話,訪問公網(wǎng)IP的某個(gè)端口時(shí)相當(dāng)于訪問內(nèi)網(wǎng)IP的映射端口,比如路由器IP為125.120.83.30,內(nèi)網(wǎng)IP為192.168.168.168。可以將路由器中80端口映射到192.168.168.168的80端口上。

到阿里云控制臺(tái)申請(qǐng)accessKeyIdaccessKeySecret,用來調(diào)用API的,為了簡單起見,先給域名添加一條解析記錄,這樣就不需要在程序里判斷該域名是否已創(chuàng)建,然后可以直接修改解析記錄了。比如我的域名為yxxrui.cn,記錄值為blog,也就是要把子域名blog.yxxrui.cn指向我自己電腦125.120.83.30上。

下邊直接貼出代碼:

using System;
using System.Configuration;
using System.Net;
using System.Text;
using Aliyun.Acs.Alidns.Model.V20150109;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;

namespace AliyunDomain
{
    class Program
    {
        private static readonly string RegionId=GetConfig("regionId");
        private static readonly string AccessKeyId=GetConfig("accessKeyId");
        private static readonly string AccessKeySecret=GetConfig("accessKeySecret");
        private static string _recordId = GetConfig("recordId");
        private static readonly string Domain = GetConfig("domain");
        private static readonly string Rr = GetConfig("rr");
        private static readonly IClientProfile ClientProfile =
                DefaultProfile.GetProfile(RegionId, AccessKeyId,AccessKeySecret);
        private static readonly IAcsClient Client = new DefaultAcsClient(ClientProfile);

        static void Main(string[] args)
        {
            if (string.IsNullOrWhiteSpace(_recordId))
            {
                //如果沒有獲取過,那么獲取一下,然后保存起來
                _recordId = GetRecordId(Domain, Rr);
                SaveConfig("recordId",_recordId);
            }
            if (_recordId == "") return;
            //獲取成功,并且有變化時(shí)
            string lastIp = GetConfig("lastIP");
            string curIp = GetIp();
            if (!curIp.Equals("") && !lastIp.Equals(curIp))
            {
                var request = new UpdateDomainRecordRequest
                {
                    RecordId = _recordId,
                    RR = Rr,
                    Type = "A",
                    Value = curIp,
                    TTL = 600,
                    Priority = 10
                };
                Client.DoAction(request);
                SaveConfig("lastIP", curIp);
            }
        }

        #region 保存配置信息
        /// <summary>
        /// 保存配置信息
        /// </summary>
        /// <param name="name"></param>
        /// <param name="value"></param>
        private static void SaveConfig(string name,string value)
        {
            var cfa = ReadAppConfig();
            cfa.AppSettings.Settings[name].Value = value;
            cfa.Save();
        }
        #endregion

        #region 獲取配置項(xiàng)
        /// <summary>
        /// 獲取配置項(xiàng)
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private static string GetConfig(string name)
        {
            var cfa = ReadAppConfig();
            return cfa.AppSettings.Settings[name].Value;
        }
        #endregion

        #region 調(diào)用阿里云接口獲取域名的唯一記錄ID
        /// <summary>
        /// 調(diào)用阿里云接口獲取域名的唯一記錄ID
        /// </summary>
        /// <param name="domain">域名</param>
        /// <param name="rr">子域名</param>
        /// <returns></returns>
        private static string GetRecordId(string domain,string rr)
        {
            DescribeDomainRecordsRequest reqq = new DescribeDomainRecordsRequest
            {
                DomainName = domain,
                RRKeyWord = rr
            };
            var rss = Client.GetAcsResponse(reqq);
            foreach (var record in rss.DomainRecords)
            {
                if (record.DomainName.Equals(domain) && record.RR.Equals(rr))
                {
                    return record.RecordId;
                }
            }
            return "";
        }
        #endregion
       
        #region 獲取公網(wǎng)IP
        /// <summary>
        /// 獲取當(dāng)前電腦的真實(shí)外網(wǎng)IP地址,可以自行修改成穩(wěn)定的
        /// </summary>
        /// <returns></returns>
        private static string GetIp()
        {
            string ip = "";
            try
            {
                    //獲取或設(shè)置用于向Internet資源的請(qǐng)求進(jìn)行身份驗(yàn)證的網(wǎng)絡(luò)憑據(jù)
                WebClient myWebClient = new WebClient {
                    Credentials = CredentialCache.DefaultCredentials };
                //從指定網(wǎng)站下載數(shù)據(jù)
                Byte[] pageData = myWebClient.DownloadData(
                    "                 //如果獲取網(wǎng)站頁面采用的是GB2312,則使用這句
                string pageHtml = Encoding.Default.GetString(pageData);
                //如果獲取網(wǎng)站頁面采用的是UTF-8,則使用這句
                //string pageHtml = Encoding.UTF8.GetString(pageData);
                return pageHtml;
            }
            catch (WebException webEx)
            {
            }
            return ip;
        }
        #endregion

        #region 獲取配置文件
        private static Configuration _config;
        private static Configuration ReadAppConfig()
        {
            if (_config == null)
            {
                string configPath = @"app.config";
                _config = ConfigurationManager.OpenMappedExeConfiguration(
                    new ExeConfigurationFileMap()
                {
                    ExeConfigFilename = configPath
                }, ConfigurationUserLevel.None);
            }
            //MessageBox.Show(config.AppSettings.Settings["serverIp"].Value);
            return _config;
        }
        #endregion
    }
}

app.config文件內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <appSettings>
    <!--作者:楊浩瑞,博客:
http://www.yxxrui.cn -->
    <!--  ##############################################  -->
    <!--區(qū)域-->
    <!--阿里云accessKeyId-->
    <!--阿里云accessKeySecret-->
    <!--記錄ID,需注意,如果您修改了其他配置,不確定recordId是什么
    那么一定要置為空值,系統(tǒng)會(huì)自動(dòng)獲取的-->
    <!--您的域名,比如:yxxrui.cn-->
    <!--您的子域名,比如:blog-->
    <!--您的服務(wù)器上次的IP地址,用來緩存,您無需修改-->
    <add key="regionId" value="cn-hangzhou"/>
    <add key="accessKeyId" value="LTAIYkLo123456"/>
    <add key="accessKeySecret" value="WXXfo55OshQC4ZB789456123130"/>
    <add key="recordId" value=""/>
    <add key="domain" value="yxxrui.cn"/>
    <add key="rr" value="blog"/>
    <add key="lastIP" value="36.24.222.133"/>
  </appSettings>
</configuration>

為了更好的獲取IP地址,我專門寫了一個(gè)簡單頁面,訪問該頁面后返回您的外網(wǎng)IP

http://www.yxxrui.cn/yxxrui_cabangs_api/myip.ashx

本代碼為C#代碼,建議將項(xiàng)目設(shè)置為winform程序,不要設(shè)置為控制臺(tái)程序,否則每次執(zhí)行時(shí)會(huì)彈出黑色的控制臺(tái),很惡心人的。該代碼未實(shí)現(xiàn)自動(dòng)檢測和執(zhí)行(如需程序創(chuàng)建計(jì)劃任務(wù),可聯(lián)系我),只是做了以下工作:

1、獲取當(dāng)前電腦真實(shí)公網(wǎng)IP

2、查看當(dāng)前IP是否有變化

3、若無變化直接退出,若有變化則修改域名解析設(shè)置

這些并不能達(dá)到實(shí)時(shí)解析。但可以通過使用window 操作系統(tǒng)中的任務(wù)計(jì)劃程序,制定計(jì)劃,每(1)分鐘執(zhí)行該軟件一次即可。

1、編譯好的可執(zhí)行包請(qǐng)直接下載:
附件:動(dòng)態(tài)域名解析.zip

2、需要引入阿里云提供的SDK(我已編譯好了):
附件:阿里云域名解析SDK.zip

3、獲取IP地址的代碼,myip.ashx,需要.net環(huán)境的服務(wù)器(如IIS):
附件:myip.zip

4、此項(xiàng)目完整的源代碼,可以自行修改和編譯成需要的功能(VS2013旗艦版):
附件:動(dòng)態(tài)域名解析源代碼.zip


該文章在 2018/6/26 12:10:31 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved