Ejemplo n.º 1
0
        public async Task <LocalIpHistory> SaveIpInfo(string ip, string lastIp)
        {
            if (string.IsNullOrEmpty(ip))
            {
                throw new Exception("保存IP信息失败,当前IP不能为空。");
            }
            LocalIpHistory ipHistory = new LocalIpHistory()
            {
                IP       = ip,
                LastIP   = lastIp,
                UpdateTs = TimeUtil.Timestamp()
            };

            using (CustumDbContext db = new CustumDbContext())
            {
                ipHistory = db.LocalIpHistory.Add(ipHistory).Entity;
                //自动删除24h之前的数据
                if (ConfigManager.Now.AppSettings.IsEnableAutoClearHistoryIP)
                {
                    string sql = $"DELETE FROM {nameof(LocalIpHistory)} WHERE {nameof(LocalIpHistory.UpdateTs)} < {TimeUtil.Timestamp() - 24 * 60 * 60}";
                    await db.Database.ExecuteSqlRawAsync(sql);
                }
                if (await db.SaveChangesAsync() > 0)
                {
                    return(ipHistory);
                }
                else
                {
                    throw new Exception($"保存IP数据失败,IP:{ip}");
                }
            }
        }
Ejemplo n.º 2
0
        public async Task <LocalIpHistory> GetLastIpInfo()
        {
            using (CustumDbContext db = new CustumDbContext())
            {
                LocalIpHistory ipHistory = await db.LocalIpHistory.OrderByDescending(c => c.UpdateTs).FirstOrDefaultAsync();

                return(ipHistory);
            }
        }
Ejemplo n.º 3
0
        static async void Start()
        {
            Log.Info("Ddns service starting.");
            bool isFirst = ConfigManager.Now.DdnsConfig.IsEnableDdns;
            while (!token.IsCancellationRequested)
            {
                try
                {
                    LocalIPInfo ipHelper = new LocalIPInfo();
                    string ip = await ipHelper.GetLocalIp();
                    Log.Info($"当前网络环境外网IP:{ip}");
                    if (isFirst)
                    {
                        isFirst = false;
                        if (ConfigManager.Now.DdnsConfig.IsEnableDdns)
                        {
                            new DomainDdnsService().UpdateDomainInfo(ip);
                        }
                        else
                        {
                            Log.Info($"DDNS服务已关闭,跳过初次启动更新IP地址。");
                        }
                    }
                    LocalIpHistory lastIp = await dataManager.GetLastIpInfo();
                    if (lastIp == null || lastIp.IP != ip)
                        await DoDifferentAction(ip, lastIp == null ? "0.0.0.0" : lastIp.IP);
                    else
                        Log.Info($"当前网络环境外网IP[{ip}]未发生变化。");

                    if (await dataManager.SaveIpInfo(ip, lastIp == null ? "0.0.0.0" : lastIp.IP) != null)
                        Log.Info($"当前IP[{ip}]已记录。");

                    await Delay();
                }
                catch (TaskCanceledException)
                {
                    break;
                }
                catch (Exception ex)
                {
                    Log.Warn(ex.Message, ex);
                    await Delay();
                }
            }
        }