。在OpenVPN后面运行的.NET C#服务未返回正确的公共IP

问题描述 投票:0回答:1

因此,此服务的目标是确定计算机是否位于已知网络(例如,不同的办公室位置)上,或者是否基于公共IP。我创建了一些已知IP地址列表以进行比较。如果不知道公共IP,我会触发一个过程以启动与服务器的OpenVPN连接。

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

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

但是,服务请求在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# networking service vpn openvpn
1个回答
0
投票

请注意,HttpWebRequest已过时。请改用HttpClient

HttpClient

然后打电话

// HttpClient is intended to be instantiated once and re-used throughout the life of an application.
private static HttpClient client = new HttpClient();

public static async Task<string> ReturnPublicIP(string url)
{
    string result = await client.GetStringAsync(url);
    return result.Trim();
}
© www.soinside.com 2019 - 2024. All rights reserved.