现在的位置: 首页 > 综合 > 正文

在局域网内获取本机的外部IP

2013年12月04日 ⁄ 综合 ⁄ 共 2055字 ⁄ 字号 评论关闭
文章目录

在局域网内获取本机的外部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}

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())的结果一样的. 

@zz
string patt = @"ip:/[(?<IP>[0-9/.]*)/]";
string url  = "http://www.123cha.com";
return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
这样也可以, 只要取得任何会显示你的IP的网页, 写上相应的patt, 就可以了.
至于不通过外网, 我的研究是: "仅凭本机的力量是无法获得本机的外部IP的". 可能Cdo会有办法吧.

#1楼  2005-10-01 13:25 Cdo

抱歉!评论已关闭.