.net获取外网IP
在网上找了很多都是这样的
public string ResponseMyIP() { string str = null; //这个负责抓IP的页。第一步先抓取这个html页的全部内容 string url = "http://www.ikaka.com/ip/index.asp"; WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials; Byte[] pageData = wc.DownloadData(url); string MyUrl = System.Text.Encoding.UTF8.GetString(pageData); //正则找到页面中的IP部分,并输出。 Regex regex = new Regex(@"(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))"); foreach (Match m in regex.Matches(MyUrl)) { str = m.ToString(); } return str; }string user_IP; if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) { user_IP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); } else { user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); }
[解决办法]
string qip = ""; if (Request.ServerVariables["HTTP_VIA"] != null) { qip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); } else { qip = Request.ServerVariables["ReMOTE_ADDR"].ToString(); }
[解决办法]
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());
}
[解决办法]
你是想获取他所在的位置吧?
/// <summary>
/// 获取指定URL页面的内容,使用HttpWebRequest方式
/// </summary>
/// <param name="xURL">URL的字符串表现形式</param>
/// <param name="encode">页面使用的编码</param>
/// <returns>返回页面HTML代码</returns>
public string Get_Page(string xURL)
{
string content = "";
HttpWebRequest httpget = (HttpWebRequest)HttpWebRequest.Create(xURL);
try
{
HttpWebResponse httpres = (HttpWebResponse)httpget.GetResponse();
Stream httpstr = httpres.GetResponseStream();
StreamReader sr = new StreamReader(httpstr, Encoding.Default);
content = sr.ReadToEnd();
sr.Close();
}
catch (Exception)
{
}
return content;
}
/// <summary>
/// 获取指定内容中的部分信息
/// </summary>
/// <param name="PageContent">指定内容</param>
/// <param name="RegStr">要获取信息的正则表达式</param>
/// <returns>最后匹配的结果集</returns>
public string[] Get_Info(string PageContent, string RegStr)
{
ArrayList info = new ArrayList();
Regex RegURL = new Regex(RegStr);
foreach (Match myMatch in RegURL.Matches(PageContent))
{
info.Add(myMatch.ToString());
}
string[] Infos = new string[info.Count];
info.CopyTo(Infos);
if (info.Count == 0)
{
Infos = new string[1] { "" };
}
return Infos;
}
//获取IP地址,客户端的
private string GetClientIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}
通过url地址:
string ip = GetClientIP();
string url = "http://www.ikaka.com/ip/index.asp?ip="+ip+"&Submit=%B2%E9%D1%AF";
再按你的正则弄过来就行,获取IP很简单,
[解决办法]
/// <summary> /// 系统登录客户端IP /// </summary> protected string _strRunnerIp { get { return GetIP(); } } string GetIP() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (result != null && result != String.Empty) { //可能有代理 if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式 result = null; else { if (result.IndexOf(",") != -1) { //有“,”,估计多个代理。取第一个不是内网的IP。 result = result.Replace(" ", "").Replace("'", ""); string[] temparyip = result.Split(",;".ToCharArray()); for (int i = 0; i < temparyip.Length; i++) { if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.") { return temparyip[i]; //找到不是内网的地址 } } } else if (IsIPAddress(result)) //代理即是IP格式 return result; else result = null; //代理中的内容 非IP,取IP } } string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; // string strHostName = Dns.GetHostName(); //得到本机的主机名 //IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); //取得本机IP //string IpAddress = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡 if (null == result || result == String.Empty) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty) result = HttpContext.Current.Request.UserHostAddress; return result; } #region bool IsIPAddress(str1) 判断是否是IP格式 /**/ /// <summary> /// 判断是否是IP地址格式 0.0.0.0 /// </summary> /// <param name="str1">待判断的IP地址</param> /// <returns>true or false</returns> public bool IsIPAddress(string str1) { if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false; string regformat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(str1); } #endregion
[解决办法]
Request.UserHostAddress;
本机上测试获取的是127.0.0.1
到服务器上获取的就是正确的了
测试过了
[解决办法]
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();
}
}