我的程序中有两种方法可以检索计算机的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
为什么这两种方法的输出不同?
答案 0 :(得分:3)
显然,你是一些NAT的幕后推手。
因此,通过运行第一个代码,您将收到内部网络地址,第二个代码将为您提供网络可以访问Internet的真实(外部)IP地址。
这是因为第二种方法只是调用外部网站来确定您的IP,而该网站只能确定真实的IP地址,而不是内部IP地址。
答案 1 :(得分:2)
在第一种方法中,您将获得内部网络的IP地址,因此如果您位于路由器后面,您将获得内部IP地址。这是您从命令提示符运行ipconfig /all
时将看到的地址。
在第二种方法中,您将获得互联网(外部)IP地址。