我这里用路由上网,本机配置的地址是192.168.1.2
我用下面的代码            System.Net.IPHostEntry ips = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
            foreach (System.Net.IPAddress ip in ips.AddressList)
            {
                Console.WriteLine(ip.ToString());
            }只获取192.168.1.2地址,根本获取不到公网的地址,那个前辈知道怎么获取呢?谢谢

解决方案 »

  1.   

    用udp向远程服务发消息就能得到外网ip和端口,再发回来就行了
      

  2.   

    http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
    这是个免费的
      

  3.   

    static string GetIP()
    {
    Uri uri = new Uri("http://www.ciker.net/ip/index.asp");
    System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    req.ContentLength = 0;
    req.CookieContainer = new System.Net.CookieContainer();
    req.GetRequestStream().Write(new byte[0], 0, 0);
    System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)(req.GetResponse());
    StreamReader rs = new StreamReader(res.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));
    string s = rs.ReadToEnd();
    rs.Close();
    req.Abort();
    res.Close();
    System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(s, @"您的IP:(?<IP>[0-9\.]*)");
    if (m.Success)
    {
    return m.Groups["IP"].Value;
    }
    else
    {
    return "Failed..";
    }
      

  4.   

    访问这个地址:http://www.5iportal.net/getip.aspx
      

  5.   

    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()); 
      }
      

  6.   

    string GetIp() 
        { 
            string userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
            if (userIP == null || userIP == "") 
            { 
                userIP = Request.ServerVariables["REMOTE_ADDR"];         } 
            return userIP; 

      

  7.   


            /// <summary>
            /// 获得使用转发服务器下的用户真实ip
            /// </summary>
            /// <returns></returns>
            public static string GetFormIpByTransmit(HttpRequest request)
            {
                string ret = string.Empty;            ret = request.Headers["X-Client-Address"];            if (string.IsNullOrEmpty(ret))
                {
                    ret = request.UserHostAddress;
                }
                else
                {
                    // 如果客户端
                    if (ret.IndexOf(",") >= 0)
                    {
                        string[] ss = StringUtils.GetStrings(ret, ",");
                        ret = ss[ss.Length - 1];
                    }
                }            return ret;
                
            }
      

  8.   

    或者申请个动态域名,在你的机器上装个动态域名解析的客户端,然后你去获取你申请的这个域名的地址就OK了。不过这个办法麻烦点儿。以前我用过去Ip138等网站上去截取,但是有时候网站不稳定。using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class IP_ShowIP : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("custom:"+Request.UserHostAddress+"<br>server:"+System.Net.Dns.GetHostAddresses("xxx.3322.org")[0].ToString());
        }
    }
    //228.92.40.38
      

  9.   

    这个方法就行
    /// <summary>
            /// 获得用户IP
            /// </summary>
            public string GetUserIp()
            {
                string ip;
                string[] temp;
                bool isErr = false;
                if (HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
                    ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
                else
                    ip = HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
                if (ip.Length > 15)
                    isErr = true;
                else
                {
                    temp = ip.Split('.');
                    if (temp.Length == 4)
                    {
                        for (int i = 0; i < temp.Length; i++)
                        {
                            if (temp[i].Length > 3) isErr = true;
                        }
                    }
                    else
                        isErr = true;
                }            if (isErr)
                    return "1.1.1.1";
                else
                    return ip;
            }放到服务器上后就是外网的了,本地调试是就是自己的局域网内的你可以试试祝你好运