因此,此服务的目标是确定计算机是否位于已知网络(例如,不同的办公室位置)上,或者是否基于公共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);
}
}
关于解决该问题的任何想法?我想象网络\进程线程将知道更新的路由表并相应地进行通信。.
提前感谢您的帮助!
请注意,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();
}