首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#获取外网IP地址,该如何处理

2013-03-13 
C#获取外网IP地址写了个服务组件,如何获取本机电脑的外网ip地址(不是局域网的地址),求代码。[解决办法]借助

C#获取外网IP地址
写了个服务组件,如何获取本机电脑的外网ip地址(不是局域网的地址),求代码。
[解决办法]
借助于某个能够返回ip的第三方网站吧,如果自己有服务器自己写一个更好,向它发一个请求,解析返回的内容。单纯从本机去获取估计不行。
[解决办法]
//获取本机的公网IP
privatestaticstring GetIP()
{
    string tempip ="";
    try
    {
           WebRequest wr = WebRequest.Create("http://www.ip138.com/ip2city.asp");
           Stream s = wr.GetResponse().GetResponseStream();
           StreamReader sr =new StreamReader(s, Encoding.Default);
           string all = sr.ReadToEnd(); //读取网站的数据

           int start = all.IndexOf("[") +1;
           int end = all.IndexOf("]", start);
           tempip = all.Substring(start, end - start);
           sr.Close();
           s.Close();
    }
    catch
    {
    }
    return tempip;
}
[解决办法]
public string readip()
{
            HtmlDocument hd = webBrowser1.Document;
            string stra = "";
            for (int i = 0; i < hd.All.Count; i++)
            {
                if (hd.All[i].OuterText != null)
                {
                    Match m = Regex.Match(hd.All[i].OuterText, @"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}");
                    if (m.Success)
                    {
                        stra = m.ToString();
                        MessageBox.Show(m.ToString());
                        break;
                    }
                }
            }




}
[解决办法]
2楼 ip138的链接现在已经改成了http://city.ip138.com/city1.asp
[解决办法]
一般需要访问一个外网网站才能返回。

比如ip138
但是这也有缺点。

很容易在内网模拟或者伪造这么一个网站,那么可以使得程序返回错误的网址。
[解决办法]

   /// <summary>
        /// 得到外网IP地址
        /// </summary>
        /// <returns></returns>
        public static string GetIP()
        {
            Uri uri = new Uri("http://city.ip138.com/ip2city.asp");
            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
            req.Method = "get";
            using (Stream s = req.GetResponse().GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(s))
                {
                    char[] ch = {'[',']' };
                    string str = reader.ReadToEnd();
                    System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(str, @"\[(?<IP>[0-9\.]*)\]");
                    return m.Value.Trim(ch) ;

                }
            }
        }

[解决办法]
//获取本机的公网IP
privatestaticstring GetIP()
{
  string tempip ="";
  try
  {
  WebRequest wr = WebRequest.Create("http://iframe.ip138.com/city.asp");
  Stream s = wr.GetResponse().GetResponseStream();
  StreamReader sr =new StreamReader(s, Encoding.Default);
  string all = sr.ReadToEnd(); //读取网站的数据

  int start = all.IndexOf("[") +1;
  int end = all.IndexOf("]", start);
  tempip = all.Substring(start, end - start);
  sr.Close();
  s.Close();
  }
  catch
  {
  }
  return tempip;
}

这个ok
[解决办法]
对了 不行看我这个 之前发问的


http://topic.csdn.net/u/20110810/18/bf2541bf-45f5-4070-91ff-5aa9fd4648ab.html
[解决办法]
直接调用方法


        public static IPAddress getRemoteIP()
        {
            WebClient client = new WebClient();
            byte[] bytRecv = client.DownloadData("http://www.123cha.com/"); //下载网页数据
            string str = System.Text.Encoding.GetEncoding("gb2312").GetString(bytRecv);
            string r = @"(((\d{1,3})
[解决办法]
(1\d{2})
[解决办法]
(2[0-4]\d)
[解决办法]
(25[0-5]))\.){3}((\d{1,3})
[解决办法]
(1\d{2})
[解决办法]
(2[0-4]\d)
[解决办法]
(25[0-5]))";
            string ip = System.Text.RegularExpressions.Regex.Match(str, r).ToString(); //提取信息   
            return IPAddress.Parse(ip);
        }

[解决办法]
不知道这个行不行:
string ip=Request.UserHostAddress.ToString(); //获取访问者的当前上网ip

[解决办法]
引用:
C# code
   /// <summary>
        /// 得到外网IP地址
        /// </summary>
        /// <returns></returns>
        public static string GetIP()
        {
            Uri uri = new Uri("http://city.ip……


只能通过第三方网站获取吗?

热点排行