在局域网内获取本机的外部IP
“ipconfig.exe /all”在局域网中只能获取内部IP, 无法获取本机的外部IP, Dns.Resolve()也一样。
经研究, 在局域网中, 仅凭本机的力量是无法获得本机的外部IP的, 必须登录到外网某个服务器, 那个服务器就知道你的IP, 然后你再取回来。
1using System;
2using System.IO;
3using System.Net;
4using System.Text.RegularExpressions;
5
6class Test
7{
8 // 获取网页的HTML内容
9 static string GetPage(string url)
10 {
11 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
12 try
13 {
14 using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
15 {
16 using (StreamReader sr = new StreamReader(res.GetResponseStream()))
17 {
18 return sr.ReadToEnd();
19 }
20 }
21 }
22 catch (System.Exception e)
23 {
24 return e.Message;
25 }
26 finally
27 {
28 req.Abort();
29 }
30 }
31
32 // 通过外部网站得到本机的外部IP
33 static string GetOuterIP()
34 {
35 string patt = @"IP: \[(?<IP>[0-9\.]*)\]";
36 string url = "http://www.skyiv.com/info";
37 return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
38 }
39
40 static void Main()
41 {
42 Console.WriteLine("Inner IP:");
43 foreach (IPAddress ip in Dns.Resolve(Dns.GetHostName()).AddressList)
44 {
45 Console.WriteLine(ip);
46 }
47 Console.WriteLine();
48 Console.WriteLine("Outer IP:");
49 Console.WriteLine(GetOuterIP());
50 }
51}
2using System.IO;
3using System.Net;
4using System.Text.RegularExpressions;
5
6class Test
7{
8 // 获取网页的HTML内容
9 static string GetPage(string url)
10 {
11 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
12 try
13 {
14 using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
15 {
16 using (StreamReader sr = new StreamReader(res.GetResponseStream()))
17 {
18 return sr.ReadToEnd();
19 }
20 }
21 }
22 catch (System.Exception e)
23 {
24 return e.Message;
25 }
26 finally
27 {
28 req.Abort();
29 }
30 }
31
32 // 通过外部网站得到本机的外部IP
33 static string GetOuterIP()
34 {
35 string patt = @"IP: \[(?<IP>[0-9\.]*)\]";
36 string url = "http://www.skyiv.com/info";
37 return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
38 }
39
40 static void Main()
41 {
42 Console.WriteLine("Inner IP:");
43 foreach (IPAddress ip in Dns.Resolve(Dns.GetHostName()).AddressList)
44 {
45 Console.WriteLine(ip);
46 }
47 Console.WriteLine();
48 Console.WriteLine("Outer IP:");
49 Console.WriteLine(GetOuterIP());
50 }
51}