winform如何获得本机的ip地址,如是公网的话直接返回公网ip。
string strHostName = Dns.GetHostName();
clientAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
这样得到的总是内网段的ip....
如在公网,可以直接获取吗?           

解决方案 »

  1.   

    不可以。需要公网段反射回来。比如访问www.ip138.com,然后读取返回的网页。
      

  2.   

    我是把得到ip得到的ip在内网网段内比较,可我发现公网得到的ip它也会在内网网段内....
      

  3.   

    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  = "";
        return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
      }  static void Main()
      {
        foreach (IPAddress ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
        {
          Console.WriteLine(ip);
        }
        Console.WriteLine();
        Console.WriteLine(GetOuterIP());
      }
      

  4.   

     foreach (IPAddress ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList) 
        { 
          Console.WriteLine(ip); 
        }