首页 > 解决方案 > 在 OpenVPN 后面运行的 .NET C# 服务未返回正确的公共 IP

问题描述

所以这项服务的目标是根据公共 IP 确定机器是否在已知网络上,例如不同的办公地点。我创建了一些已知 IP 地址列表来进行比较。如果公共 IP 未知,我会触发一个进程来启动与我的服务器的 OpenVPN 连接。

我一直在利用它http://ipv4.icanhazip.com来检索公共 IP。

当前行为是,在第一个 Timer 间隔期间,Web 请求返回正确的公共 IP。然后调用 VPN 连接并很快建立。在CMD我能够运行curl http://ipv4.icanhazip.com并确认 VPN 服务器 IP 以及 IPv4 路由表实际上已更新。我所有的网络浏览器流量都被正确路由。

但是,服务请求在 15 秒间隔内永远不会返回新 IP。

这是我的 WebRequest 函数

 public static string ReturnPublicIP()
        {
            string url = "http://ipv4.icanhazip.com";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.AutomaticDecompression = DecompressionMethods.GZip;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                return reader.ReadToEnd().Trim((char)0x0a, (char)0x0d);
            }
        }

有什么想法可以解决这个问题吗?我想网络\进程线程会知道更新的路由表并相应地流动流量..

提前感谢您的帮助!

标签: c#networkingservicevpnopenvpn

解决方案


推荐阅读