【问题标题】:2 Different IP Address2个不同的IP地址
【发布时间】:2015-02-20 14:39:56
【问题描述】:

我的程序中有两种方法可以检索计算机的 IP 地址。

第一

public string GetIP1()
{
    //using System.Net.Sockets;
    return Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
}

第二次

public string GetIP2()
{
    //using System.IO;
    String direction = "";
    try
    {
        WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
        using (WebResponse response = request.GetResponse())
        using (StreamReader stream = new StreamReader(response.GetResponseStream()))
        {
            direction = stream.ReadToEnd();
        }

        //Search for the ip in the html
        int first = direction.IndexOf("Address: ") + 9;
        int last = direction.LastIndexOf("</body>");
        direction = direction.Substring(first, last - first);
    }
    catch(Exception){ }
    return direction;
}

第一个代码返回一个类似于 10.xx.xx.x 的 IP,第二个代码返回一个 IP 地址,例如 121.xx.xx.xx

为什么这两种方法的输出不同?

【问题讨论】:

  • 你有两个不同的网络适配器吗?
  • 那么没有 WiFi 适配器。我想你不是在笔记本上开发。
  • 请从第一个代码中删除FirstOrDefault,看看第二个IP是否也来自第一个代码的集合。
  • 是的,我没有 wifi 适配器...而且我正在使用台式机

标签: c# ip-address


【解决方案1】:

显然,您在某些 NAT 之后。

因此,通过运行第一个代码,您将收到您的内部网络地址,第二个代码为您提供真实(外部)IP 地址,您的网络可以从该地址访问 Internet。

那是因为第二种方法只是调用外部网站来确定你的IP,而那个网站只能确定真实的IP地址,而不是内部的。

【讨论】:

    【解决方案2】:

    在第一种方法中,您将获得内部网络的 IP 地址,因此如果您在路由器后面,您将获得内部 IP 地址。这是您在命令提示符下运行 ipconfig /all 时会看到的地址。

    在第二种方法中,您将获取您的互联网(外部)IP 地址。

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 2013-07-02
      • 1970-01-01
      • 2021-01-03
      • 2018-05-22
      • 2019-11-01
      • 2014-12-17
      • 1970-01-01
      相关资源
      最近更新 更多