首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# -检测公共ip接入更改,VPN问题

C# -检测公共ip接入更改,VPN问题
EN

Stack Overflow用户
提问于 2022-09-21 08:12:51
回答 1查看 52关注 0票数 1

通过下面的代码,我能够跟踪桌面应用程序的公共IP更改。这应该能够跟踪公共IP是否更改,或者用户是否允许VPN更改其公共IP。此代码在应用程序启动时运行,并在需要检查时再次使用:

代码语言:javascript
运行
复制
public class PublicIP
{
    IPAddress last_ip=null;
    DateTime timestamp_lastipchange;

    public void UpdateIP()
    {
            List<string> hosts = new List<string>()
            {
                "https://api.ipify.org",
                "https://ipinfo.io/ip",
                "https://checkip.amazonaws.com",
                "https://wtfismyip.com/text",
                "http://icanhazip.com"
            };
            using(WebClient webclient = new WebClient())
            {
                foreach(string host in hosts)
                {
                    //Download each string from hosts until an IP could be fetched
                    try{
                        var newip = IPAddress.Parse(webclient.DownloadString(service)); //Downloading the string
                        if(!newip.IsEqual(last_ip) && last_ip!=null) timestamp_lastipchange = DateTime.Now; //Check if the ip changed, if the last known ip does not exists skipp this step
                        last_ip = newip; //Save last known ip
                        return;
                        } 
                    catch { }
                }
            }
    }

}

这种方法似乎运行得很好,但是在UnitTesting期间,有些工作流不会获取新的IP:

通过交换网络改变

  1. IP :成功检测到

由提供者更改的

  1. IP :成功检测到更改

  1. VPN在应用程序启动时启用,然后关闭:成功检测到更改

  1. VPN在应用程序启动时被禁用,并在运行时被打开:没有检测到的变化。 Webclient.DownloadString()仍然返回相同的IP,好像没有启用。

我不确定工作流nr 4中发生了什么。是否必须手动选择新的网络接口(VPN)?或者这是客户机/服务器端的缓存问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 17:28:46

WebClient是高级的,可以在场景后面使用静态池(也不推荐)。您可以尝试使用HttpClient,因为HttpClient通过其消息处理程序处理连接,默认的连接不是静态的,这意味着这应该可以:

代码语言:javascript
运行
复制
using(var httpClient = new HttpClient()) 
{
   var newip = IPAddress.Parse(webclient.GetStringAsync(service)
       .ConfigureAwait(false).GetAwaiter().GetResult()); 
   // ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73797406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档