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

.net获取外网IP解决方法

2012-06-15 
.net获取外网IP在网上找了很多都是这样的C# code public string ResponseMyIP(){string str null//这个

.net获取外网IP
在网上找了很多都是这样的

C# code
 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;                             }

有没有谁有不通过别人的网站来获取的代码啊!~~

[解决办法]
C# code
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();        }
[解决办法]
C# code
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很简单,
[解决办法]

C# code
        /// <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();
}
}

热点排行