文章目录
在局域网内获取本机的外部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}
posted on 2005-10-01 09:39 空间/IV 阅读(1530) 评论(13) 编辑 收藏 所属分类: C# Base
评论
这个方法并不好呀。 回复 引用 查看
#2楼 [楼主] 2005-10-01 15:47 空间
@Cdo
呵呵, 那你有什么好方法吗? 回复 引用 查看
#3楼 2005-10-01 18:23 zz [未注册用户]
能不能不通过外网http://www.skyiv.com/info获取公网的IP地址呢??
我很想知道呢?? 回复 引用 查看
#4楼 [楼主] 2005-10-01 19:28 空间
回复 引用 查看
#5楼 2005-10-01 21:45 gamexg [未注册用户]
Dns.Resolve(Dns.GetHostName());
不可以吗?? 回复 引用 查看
#6楼 [楼主] 2005-10-01 22:08 空间
@gamexg
如果你的电脑直接连在因特网上, Dns.Resolve(Dns.GetHostName())确实可以.
现在我们讨论的是局域网内的电脑, 那就不可以了.
你可以找一台局域网内的电脑试试, 直接看看“ipconfig.exe /all”的输出好了, 与Dns.Resolve(Dns.GetHostName())的结果一样的.
string url = "http://www.123cha.com";
return Regex.Match(GetPage(url), patt).Groups["IP"].Value;