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
[解决办法]
只能通过第三方网站获取吗?