要测试我们的计算机是否已连接到防火墙,我们会检查此防火墙的loginwebpage是否打开。如果它超时,错误处理会说它已连接,如果它打开(或抛出证书错误,就像我们的情况一样),我们知道我们没有连接。
这个过程的一个大问题是,无论何时我们已经连接,应用程序都会挂起,直到网页超时为止。
任何输入都非常受欢迎,这是我使用的代码:
public static bool FirewallConnectivityStatus(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = null;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (HttpStatusCode.OK == response.StatusCode)
{
response.Close();
return false;
}
else
{
return true;
}
}
catch (WebException Ex)
{
if (Ex.Status == WebExceptionStatus.TrustFailure)
{
return false;
}
else
{
return true;
}
}
}
更新 与此同时,我找到了一个套接字连接,这样我就可以通过IP代替网址来创建这种连接:C# - Socket to log on to Firewall
答案 0 :(得分:2)
也许使用BackgroundWorker可以工作:
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
他们在该页面上有相当不错的例子。我以前从未考虑过尝试测试。我想不出一个简单的测试方法。看起来它之前也被问过:
C# API to test if a network Adapter is firewalled
至少后台工作者可以在等待超时时让你的程序继续。这取决于您是否可以在没有答案的情况下让应用继续进行测试。
减少超时时间怎么样? http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx