Dns.Resolve()方法和ipconfig/all一样, 在局域网中只能获取内部IP, 无法获取本机的外部IP.
在局域网中, 仅凭本机的力量是无法获得本机的外部IP的, 必须登录到外网某个服务器, 那个服务器就知道你的IP, 然后你再取回来.
using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
class Test
{
// 获取网页的HTML内容
static string GetPage(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using (StreamReader sr = new StreamReader(res.GetResponseStream()))
{
return sr.ReadToEnd();
}
}
}
catch (System.Exception e)
{
return e.Message;
}
finally
{
req.Abort();
}
}
// 通过外部网站得到本机的外部IP
static string GetOuterIP()
{
string patt = @"IP: \[(?
1<ip>[0-9\\.]*)\\]";
2string url = "http://www.skyiv.com/info";
3return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
4}
5
6static void Main()
7{
8Console.WriteLine("Inner IP:");
9foreach (IPAddress ip in Dns.Resolve(Dns.GetHostName()).AddressList)
10{
11Console.WriteLine(ip);
12}
13Console.WriteLine();
14Console.WriteLine("Outer IP:");
15Console.WriteLine(GetOuterIP());
16}
17}</ip>