IPHelper
#region << 版 本 注 释 >> /**************************************************** * 文 件 名:IPHelper * Copyright(c) www.ITdos.com * CLR 版本: 4.0.30319.17929 * 创 建 人:ITdos * 电子邮箱:admin@itdos.com * 创建日期:2014/10/24 9:46:55 * 文件描述: ****************************************************** * 修 改 人: * 修改日期: * 备注描述: *******************************************************/ #endregion using System; using System.Linq; using System.Text.RegularExpressions; using System.Web; namespace GT.Common.Helper { /// <summary> /// IP帮助类 /// </summary> public class IPHelper { /// <summary> /// 获取访问者IP地址 /// </summary> /// <returns></returns> public static string GetVisitorIP() { var result = ""; try { result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; //可能有代理 if (!string.IsNullOrWhiteSpace(result)) { //没有"." 肯定是非IP格式 if (result.IndexOf(".", System.StringComparison.Ordinal) == -1) result = ""; else { //有",",估计多个代理。取第一个不是内网的IP。 if (result.IndexOf(",", System.StringComparison.Ordinal) != -1) { result = result.Replace(" ", string.Empty).Replace("\"", string.Empty); var temparyip = result.Split(",;".ToCharArray()); if (temparyip.Length > 0) { foreach (var t in temparyip.Where(t => IsIPAddress(t) && t.Substring(0, 3) != "10." && t.Substring(0, 7) != "192.168" && t.Substring(0, 7) != "172.16.")) { return t == "::1" ? "127.0.0.1" : t; } } } //代理即是IP格式 else if (IsIPAddress(result)) return result == "::1" ? "127.0.0.1" : result; //代理中的内容非IP else result = ""; } } if (string.IsNullOrWhiteSpace(result)) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrWhiteSpace(result)) result = HttpContext.Current.Request.UserHostAddress; return result == "::1" ? "127.0.0.1" : result; } catch (Exception) { try { if (string.IsNullOrWhiteSpace(result)) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrWhiteSpace(result)) result = HttpContext.Current.Request.UserHostAddress; return result == "::1" ? "127.0.0.1" : result; } catch (Exception ex) { return "获取IP失败:" + ex.Message; } } } private static bool IsIPAddress(string str) { try { if (string.IsNullOrWhiteSpace(str) || str.Length < 7 || str.Length > 15) return false; const string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}{1}"; var regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(str); } catch (Exception) { return false; } } } }