我家安装的是有线电视宽带网。类似局域网的一种。。用Dns.GetHostByName(Dns.GetHostName()).AddressList[0] 得出的IP是有线电视网内的IP。在程序里怎么能获得公网的IP?我用的是03环境,FORM项目

解决方案 »

  1.   

    回答过一次了,
    模拟 traceroute , 返回的第一个地址就是
      

  2.   

    在局域网内获取本机的外部IP “ipconfig.exe /all”在局域网中只能获取内部IP, 无法获取本机的外部IP, Dns.Resolve()也一样。经研究, 在局域网中, 仅凭本机的力量是无法获得本机的外部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: \[(?<IP>[0-9\.]*)\]";
        string url  = "http://www.skyiv.com/info";
        return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
      }  static void Main()
      {
        Console.WriteLine("Inner IP:");
        foreach (IPAddress ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
        {
          Console.WriteLine(ip);
        }
        Console.WriteLine();
        Console.WriteLine("Outer IP:");
        Console.WriteLine(GetOuterIP());
      }
    }