【问题标题】:What is the easiest way to test if a user is connected to our WAN?测试用户是否连接到我们的 WAN 的最简单方法是什么?
【发布时间】:2012-07-18 16:51:55
【问题描述】:

一点背景。我为一家拥有全球 WAN 的公司工作。外部用户通过 VPN 连接到它,并且必须连接到它才能访问他们的电子邮件,当然还有共享的网络目录。

我有一个使用 ClickOnce 从我们的网站发布和安装的 .Net 应用程序。为公司工作和不为公司工作的用户都可以访问此应用程序,并将请求发送到也发布到 Web 服务器的 Web 服务。

由于此问题范围之外的原因,当用户尝试登录应用程序时,他们应该通过显式引用服务器的计算机名称(即http://**server**/webservice/ws.asmx)连接到 Web 服务服务器。如果用户是未连接到我们的 WAN,他们需要通过我们的网址(即https://**www.companywebsite.com**/webservice/ws.asmx)访问它。

我知道如何动态设置与 Web 服务关联的 URL。我的问题是我想不出一种快速、可靠和简单的方法来测试 WAN 连接。

最初,我尝试以相当短的超时时间向服务器发送 ping 请求(使用 .Net Ping 类)。但是,当未连接到 WAN 时,对服务器调用 ping 操作会返回异常

Ping 请求期间发生异常。

下面是与测试 WAN 连接的属性相关联的代码。这很简单,但是当我在我们的网络上测试它时,它一直给我上面的信息。

public static bool ConnectedToWAN
{
  get
  {
    try
    {
      Ping ping = new Ping();
      PingReply reply = ping.Send("server", 2000);
      return reply.Status == IPStatus.Success;
    } 
    catch (Exception e) 
    {/* ' An exeception occurred during the Ping request.' */};
  }

我不希望根据我遇到的异常返回我的连接状态。相反,我会显式调用可以验证连接的网络。

请注意,我无法检查用户的 IP。我们的一些用户为拥有自己的 WAN 的其他组织工作。由于我在 .Net WinForms 应用程序中检查他们的 IP,因此他们的 IP 地址可能与他们的 WAN 相关联。相反,我需要检查它们是否专门连接到我们的广域网,而不仅仅是任何广域网。

我该怎么做?

【问题讨论】:

  • 如果他们通过 VPN 连接到 WAN,他们不会有一个固定范围内的 IP 地址吗?
  • 是的,但问题是可以通过我们的网站访问此应用程序的另一个网络上的用户可能是具有与我们类似的 IP 分配设置的 WAN。我可能遗漏了一些东西,但如果他们有可能在应用程序中,他们的 IP 在我们的范围内,但与不同的 WAN 相关联,我无法测试 IP 范围。
  • 我们根据已知列表检查网关 ip 设置并过滤,所有 VPN 连接都必须通过网关,这可能是 IP 的简短列表。

标签: c# .net winforms networking wan


【解决方案1】:

我认为问题是如果在公司网络内连接而不是公共可访问的互联网,您需要解析主机名。

如果是这种情况,您可以使用DNS.BeginGetHostEntry 并使用异步方法获取指定主机的域名系统。

例如

var host = '**Internal Server Name**';
Boolean isWANConnected = false;
String ConnectMessage ;
AsyncCallback callBack = new AsyncCallBack(GetHostName);
Dns.BeginGetHostEntry(host, callBack, host);

static void GetHostName(IAsyncResult result)
{
  string hostname = (string)result.AsyncState;
  try
  {
     IPHostEntry host = Dns.EndGetHostEntry(result)
     ConnectMessage = host as String;
  }
  catch(SocketException e)
  {
    isWANConnected = false;
    ConnectMessage = e.Message;
  }
}

【讨论】:

    【解决方案2】:

    不在 WAN 上的用户能否解析该服务器 IP?如果没有,您可以使用 DNS 查询来确定您的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2011-05-02
      • 2023-03-17
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多