62,046
社区成员
发帖
与我相关
我的任务
分享
Uri uri = new Uri("http://www.ip138.com/ip2city.asp");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 0;
req.CookieContainer = new CookieContainer();
req.GetRequestStream().Write(new byte[0], 0, 0);
HttpWebResponse res = (HttpWebResponse)(req.GetResponse());
StreamReader rs = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("gb2312"));
string s = rs.ReadToEnd();
rs.Close();
req.Abort();
res.Close();
Match m = Regex.Match(s, @"(\d+)\.(\d+)\.(\d+)\.(\d+)");
if (m.Success) return m.Groups[0].Value.ToString().Trim();
string strnetIP = string.Empty;
return strnetIP;
private static bool IsIP(string ip)
{
string[] sections = ip.Split('.');
if (sections.Length != 4)
return false;
foreach (string s in sections)
{
int tmp = int.Parse(s.Trim());
if (tmp > 255)
return false;
}
return true;
}
/// <summary>
/// 取得客户端真实IP。如果有代理则取第一个非内网地址
/// </summary>
public static string GetUserIP()
{
var svrVar = HttpContext.Current.Request.ServerVariables;
string result = svrVar["HTTP_X_FORWARDED_FOR"];
if (!String.IsNullOrEmpty(result))
{
//可能有代理
if (result.IndexOf(".") == -1) //沒有".",非 IPv4 格式
result = null;
else
{
if (result.IndexOf(",") != -1)
{
//有",",估計多個代理。取第一個不是內網的IP。
result = result.Replace(" ", "");
string[] temparyip = result.Split(',', ';');
foreach (string ip in temparyip)
{
string tmp = ip.Substring(0, 7);
if (IsIP(ip) && ip.Substring(0, 3) != "10." && tmp != "192.168" && tmp != "172.16.")
{
result = ip;
break;
}
}
}
else if (!IsIP(result))
result = null;
}
}
if (String.IsNullOrEmpty(result))
{
result = svrVar["REMOTE_ADDR"];
if(String.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}