【问题标题】:determine which IP addressed has been used to open a url in c#确定哪些 IP 地址已用于在 c# 中打开 url
【发布时间】:2026-01-28 00:00:02
【问题描述】:

假设我的机器上有 2 个或更多活动网卡。我正在使用我从中调用异步服务的 c# 应用程序。 我希望能够确定调用此服务时使用了哪个 IP 地址。

例如,我的两个活动 ip 是 192.168.10.5 和 192.168.5.7,服务 ipaddress 是 192.168.7.12。

【问题讨论】:

  • 这个问题有点不清楚——你是想从客户端还是服务端确定这些信息?
  • 从客户端确定,然后我将其发送到服务器,以便服务器可以使用此地址联系回客户端
  • 您的 IP 是内部 IP (192.x.x.x)。您的服务也是内部的吗?如果没有,您不妨立即放弃,因为 192.168.10.5 无法访问。 另外服务器已经识别客户端的IP是微不足道的,那么为什么还要麻烦传递它呢?

标签: c# .net wcf networking


【解决方案1】:

你可以试试这个:

public static string GetExternalIP()
{
    try
    {
        using (WebClient client = new WebClient())
        {
             string ip = client.DownloadString("http://whatismyip.com/automation/n09230945.asp");
             return ip;
        }
    }
    catch (Exception) { return null; }
}

代码从http://www.hackcommunity.com/Thread-ASKING-FOR-REP-ROCKY-PART-2略微修改

【讨论】:

    【解决方案2】:

    嗯。我认为没有托管的解决方案。 GetBestInterface 和/或 GetBestRoute 似乎是在 WIn32 API 中开始的正确位置(根据我的阅读可能是 GetBestRoute)。

    此外,由于互联网和动态路由这一奇妙事物的变幻莫测,当您找到答案时,它可能已经改变了。

    最好为服务提供一个 IP 地址列表,让它使用任何一个有效的地址。

    编辑

    或者你可以使用WCF callbacks,让 WCF 完成大部分艰苦的工作(我没有在 WCF 本身上花费太多时间,不确定它会在这里为你做多少工作)

    【讨论】: