2个不同的IP地址

时间:2015-02-20 14:39:56

标签: c# ip-address

我的程序中有两种方法可以检索计算机的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

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

2 个答案:

答案 0 :(得分:3)

显然,你是一些NAT的幕后推手。

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

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

答案 1 :(得分:2)

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

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