“ipconfig.exe /all”在局域网中只能获取内部IP, 无法获取本机的外部IP, Dns.Resolve()也一样。
经研究, 在局域网中, 仅凭本机的力量是无法获得本机的外部IP的, 必须登录到外网某个服务器, 那个服务器就知道你的IP, 然后你再取回来。
1
using System;
2
using System.IO;
3
using System.Net;
4
using System.Text.RegularExpressions;
5
6
class 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
}

2

3

4

5

6

7



8

9

10



11

12

13



14

15



16

17



18

19

20

21

22

23



24

25

26

27



28

29

30

31

32

33

34



35

36

37

38

39

40

41



42

43

44



45

46

47

48

49

50

51
