穿过代理获取真正的IP
/// <summary>
/// 获取真ip
/// </summary>
/// <returns></returns>
public string GetRealIP()
{
string result = String.Empty;
result = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; //可能有代理
if (!string.IsNullOrWhiteSpace(result))
{
//没有"." 肯定是非IP格式
if (result.IndexOf(".") == -)
{
result = null;
}
else
{
//有",",估计多个代理。取第一个不是内网的IP。
if (result.IndexOf(",") != -)
{
result = result.Replace(" ", string.Empty).Replace("\"", string.Empty);
string[] temparyip = result.Split(",;".ToCharArray());
if (temparyip != null && temparyip.Length > )
{
for (int i = ; i < temparyip.Length; i++)
{
//找到不是内网的地址
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(, ) != "10."
&& temparyip[i].Substring(, ) != "192.168"
&& temparyip[i].Substring(, ) != "172.16.")
{
return temparyip[i];
}
}
}
}
//代理即是IP格式
else if (IsIPAddress(result))
{
return result;
}
//代理中的内容非IP
else
{
result = null;
}
}
} if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.UserHostAddress;
}
return result;
}
public bool IsIPAddress(string str)
{
if (string.IsNullOrWhiteSpace(str) || str.Length < || str.Length > )
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(str);
}
穿过代理获取真正的IP的更多相关文章
- nginx反向代理获取用户真实ip
nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...
- 多层代理获取用户真实IP
1. 几个概念remote_addr:如果中间没有代理,这个就是客户端的真实IP,如果有代理,这就是上层代理的IP.X-Forwarded-For:一个HTTP扩展头,格式为 X-Forwarded- ...
- nginx多层反向代理获取客户端真实ip
访问路径: 用户 --> www.chinasoft.cn(nginx反向代理) --> www.chinasoft.com(nginx反向代理) --> python服务端程序 经 ...
- nginx 多级反向代理获取客户端真实IP
set_real_ip_from ; set_real_ip_from ; set_real_ip_from ; set_real_ip_from ; set_real_ip_from 127.0.0 ...
- Nginx 反向代理获取真实IP问题
一.前言 前文 Nginx 解决WebApi跨域二次请求以及Vue单页面问题 当中虽然解决了跨域问题带来的二次请求,但也产生了一个新的问题,就是如果需要获取用户IP的时候,获取的IP地址总是本机地址. ...
- 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...
- java nginx等代理或网关转发请求后获取客户端的ip地址,原理
在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...
- 使用nginx代理后以及配置https后,如何获取真实的ip地址
使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...
- 关于.net core使用nginx做反向代理获取客户端ip的问题
1.正常情况下.net core获取客户端ip是比较简单的 /// <summary> /// 获取客户Ip /// </summary> /// <param name ...
随机推荐
- BZOJ 5395--[Ynoi2016]谁的梦(STL&容斥)
5395: [Ynoi2016]谁的梦 Time Limit: 80 Sec Memory Limit: 128 MBSubmit: 22 Solved: 7[Submit][Status][Di ...
- 一次对webshell的后门的查看
本文作者i春秋作家——非主流 昨天晚上突发奇想的想去看看github上面tennc的webshell收集项目中的shell有没有漏洞,比如未授权啊啥的,结果找半天都没找到...但是机缘巧合下,居然给我 ...
- about BFC
https://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html Box.Formatting Context(BFC)
- Mongoose 分页查询优化、获取数据总长度
无论是传统网页还是 ajax api,我们都不得不进行数据分页,一来节省带宽二来提升页面响应速度.作为一个数据完备的 web 应用,做好分页功能能极大提升用户体验. 简单的分页查询 在 mongoos ...
- 智能卡操作系统COS概述
随着IC卡从简单的同步卡发展到异步卡,从简单的EPROM卡发展到内带微处理器的智能卡(又称CPU卡),对IC卡的各种要求越来越高.而卡本身所需要的各种管理工作也越来越复杂,因此就迫切地需要有一种工具来 ...
- cmd下查看应用端口情况
在win10开始窗口右侧的空白处点击CMD,在上方弹出窗口中选择命令提示符,双击进入 在弹出命令界面中,输入netstat -na命令后回车,如下图所示,可以看到所有目前打开的端口 如果要查看打开端口 ...
- 在 iOS 上编译 webkit 源码
准备工作 买一台 mac 下载并安装 Xcode 下载源码 git clone git://git.webkit.org/WebKit.git WebKit 这个可能要耗费很久很久 编译源码 打开 X ...
- git aliases
单独的 alias git config --global alias.co checkout git config --global alias.br branch git config --glo ...
- 转MVC3介绍
第一节:Asp.Net MVC3项目介绍 让我们先看一下,一个普通的Asp.Net MVC3项目的样例,如下图所示 跟WebFrom还是有区别的,如果你已经了解Asp.Net MVC2的话,那就感觉异 ...
- android IPC 机制 (开发艺术探索)
一.IPC 机制介绍 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程和线程 ...