ASP.NET获取用户端的真实IP在各种场景都能用到,但是用户网端变幻莫测情况众多,获取真实IP还真是不容易啊。
下面分享个比较好一点的方法:

获取IP初始版本

/// <summary>
/// 获得当前页面客户端的IP
/// Author:codeo.cn
/// </summary>
/// <returns>当前页面客户端的IP</returns>
public static string GetIP()
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_CDN_SRC_IP"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(result) || !Utils.IsIP(result))
return "127.0.0.1"; return result;
}
/// <summary>
/// 是否为ip
/// Author:codeo.cn
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIP(string ip)
{
return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}

改进版获取用户真实IP

/// <summary>
/// 取得客户端真实IP。如果有代理则取第一个非内网地址
/// Author:codeo.cn
/// </summary>
/// <returns></returns>
public static string GetIPAddress()
{
string strresult = string.Empty;
strresult = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (strresult != null && strresult != string.Empty)
{
//可能有代理
if (strresult.IndexOf(".") == -) //没有“.”肯定是非IPv4格式
{
strresult = null;
}
else
{
if (strresult.IndexOf(".") != -)
{
//有“,”,估计多个代理。取第一个不是内网的IP。
strresult = strresult.Replace(" ", "").Replace("'", "");
string[] strarrtemparyip = strresult.Split(",;".ToCharArray()); for (int i = ; i < strarrtemparyip.Length; i++)
{
if (IsIPAddress(strarrtemparyip[i]) && strarrtemparyip[i].Substring(, ) != "10." && strarrtemparyip[i].Substring(, ) != "192.168" && strarrtemparyip[i].Substring(, ) != "172.16.")
{
return strarrtemparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(strresult)) //代理即是IP格式
{
return strresult;
}
else
{
strresult = null; //代理中的内容 非IP,取IP
}
}
}
string strIpAddress = (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"]); if (null == strresult || strresult == string.Empty)
{
strresult = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (strresult == null || strresult == string.Empty)
{
strresult = HttpContext.Current.Request.UserHostAddress;
} return strresult;
}
/// <summary>
/// 判断是否是IP地址格式 0.0.0.0
/// Author:codeo.cn
/// </summary>
/// <param name="strIp">待判断的IP地址</param>
/// <returns>true or false</returns>
private static bool IsIPAddress(string strIp)
{
if (strIp == null || strIp == string.Empty || strIp.Length < || strIp.Length > )
{
return false;
} string strRegformat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}___FCKpd___0quot"; Regex regex = new Regex(strRegformat, RegexOptions.IgnoreCase); return regex.IsMatch(strIp);
}

ASP.NET获取用户端的真实IP的更多相关文章

  1. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  2. Java获取请求客户端的真实IP地址

    整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...

  3. 获取本地请求的真实IP地址

    1 /** 2 * 自定义访问对象工具类 3 * 4 * 获取对象的IP地址等信息 5 * 6 */ 7 public class CusAccessObjectUtil { 8 9 /** 10 * ...

  4. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  5. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  6. 使用纯真IP库获取用户端地理位置信息

    引言 在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真IP库获取用户地理位置信息的方案. 正文 第一步:本文的方案是基于纯真IP库的,所以首先要去下载最新的纯真I ...

  7. Nginx前端设置反向代理,后端Apache如何获取访客的真实IP,结合PHP

    nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...

  8. ASP.NET Core 搭配 Nginx 的真实IP问题

    一.前言 Nginx(Engine X)是一个高性能HTTP和反向代理服务,是由俄罗斯人伊戈尔·赛索耶夫为访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发 ...

  9. nginx进行获取阿里云slb真实ip配置操作

    环境: 1.使用阿里云的slb进行配置nginx,nginx无法获取用户的真实ip解决方案 参考阿里云: https://help.aliyun.com/knowledge_detail/40535. ...

随机推荐

  1. (转)validateRequest="false"

    由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报错. 解决方案一: 在.aspx文件头中加入这句: <%@ Page validat ...

  2. ViewPager Indicator的使用方法

    原文:http://my.oschina.net/u/1403288/blog/208402 项目源码:https://github.com/wangjing0311/ViewPagerIndicat ...

  3. Lesson 6: Exploring the World of Typefaces

    Lesson 6: Exploring the World of Typefaces 这课提到的字体都是 英文 的. Article 1: More Google Web Fonts That Don ...

  4. centos 安装 vsftp

    vsftp是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用.下面介绍CentOS下安装和简单配置 vsftp 这个服务软件. 在Linux下可以搭建本地YUM库来进行系统 ...

  5. smarty 变量调节器

    变量调节器:<{$a|变量调节器}> 了解更多可以查询smarty手册 主要修改此页面的信息来了解变量调节器:main.php/main.html(0603) 1.利用给定的变量调节器 c ...

  6. pythond对象、异常、反射的学习笔记

    python多继承,刚开始我是表示惊讶的,毕竟学的php,哪来的多继承?顶多也就是利用接口模拟多继承后者使用反射机制实现.那么还是来看看python的强大吧 1 首先,Python的类继承了多个类,那 ...

  7. C++Primer charpter1.

    一.输入输出流 endl:会刷新buffer.刷新之后你才能看到.不手动用endl的话,就只能依靠系统自动刷.程序崩溃的话,你看到的调试信息可能是错误的. >>:   两个连续的符号 ci ...

  8. PE文件结构整理

    一直想做一个PE结构的总结,只是学的时候有很多东西就没搞懂,加上时间一长,很多知识也早忘了,也就一直没完成.这几天从头看了下,好不容易理清楚了,整理一下,以免又忘了 pe文件框架结构,图片贴过来太模糊 ...

  9. SCM管理器

    OpenSCManager 打开SCM管理器 CloseServiceHandle 关闭句柄 CreateService 创建服务 OpenService 打开服务 ControlService 控制 ...

  10. log4net 学习笔记

    记入最基本的用法 : refer : http://www.cnblogs.com/aehyok/archive/2013/05/07/3066010.html <configuration&g ...