控制器代码如下:

public static class UrlIP
{#region Ip(客户端IP地址)/// <summary>/// 客户端IP地址/// </summary>public static string Ip(System.Web.HttpRequestBase request){var result = string.Empty;if (request != null){result = GetWebClientIp(request);}if (string.IsNullOrWhiteSpace(result)){result = GetLanIp();}return result;}/// <summary>/// 获取Web客户端的IP/// </summary>/// <returns></returns>private static string GetWebClientIp(System.Web.HttpRequestBase request){var ip = GetWebProxyRealIp(request) ?? GetWebRemoteIp(request);foreach (var hostAddress in Dns.GetHostAddresses(ip)){if (hostAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork){return hostAddress.ToString();}}return string.Empty;}/// <summary>/// 获取Web远程IP/// </summary>/// <returns></returns>private static string GetWebRemoteIp(System.Web.HttpRequestBase request){try{return request.ServerVariables["HTTP_X_FORWARDED_FOR"] ??request.ServerVariables["REMOTE_ADDR"] ?? "";}catch{return string.Empty;}}/// <summary>/// 获取Web代理真实IP/// </summary>/// <returns></returns>private static string GetWebProxyRealIp(System.Web.HttpRequestBase request){string ip = request.Headers.Get("x-forwarded-for");if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase)){ip = request.Headers.Get("Proxy-Client-IP");}if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase)){ip = request.Headers.Get("WL-Proxy-Client-IP");}if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase)){ip = request.UserHostAddress;}if (string.IsNullOrEmpty(ip)){return string.Empty;}// 可能存在如下格式:X-Forwarded-For: client, proxy1, proxy2if (ip.Contains(", ")){// 如果存在多个反向代理,获得的IP是一个用逗号分隔的IP集合,取第一个// X-Forwarded-For: client  第一个string[] ips = ip.Split(new string[1] { ", " }, StringSplitOptions.RemoveEmptyEntries);var i = 0;for (i = 0; i < ips.Length; i++){if (ips[i] != ""){// 判断是否为内网IPif (false == IsInnerIp(ips[i])){IPAddress realIp;if (IPAddress.TryParse(ips[i], out realIp) && ips[i].Split('.').Length == 4){//合法IPreturn ips[i];}return "";}}}ip = ips[0];// 默认获取第一个IP地址}return ip;}/// <summary>/// 判断IP地址是否为内网IP地址/// </summary>/// <param name="ip">IP地址</param>/// <returns></returns>private static bool IsInnerIp(string ip){bool isInnerIp = false;ulong ipNum = Ip2Ulong(ip);/*** 私有IP* A类:10.0.0.0-10.255.255.255* B类:172.16.0.0-172.31.255.255* C类:192.168.0.0-192.168.255.255* 当然,还有127这个网段是环回地址*/ulong aBegin = Ip2Ulong("10.0.0.0");ulong aEnd = Ip2Ulong("10.255.255.255");ulong bBegin = Ip2Ulong("172.16.0.0");ulong bEnd = Ip2Ulong("10.31.255.255");ulong cBegin = Ip2Ulong("192.168.0.0");ulong cEnd = Ip2Ulong("192.168.255.255");isInnerIp = IsInner(ipNum, aBegin, aEnd) || IsInner(ipNum, bBegin, bEnd) || IsInner(ipNum, cBegin, cEnd) ||ip.Equals("127.0.0.1");return isInnerIp;}/// <summary>/// 将IP地址转换为Long型数字/// </summary>/// <param name="ip">IP地址</param>/// <returns></returns>private static ulong Ip2Ulong(string ip){byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();ulong ret = 0;foreach (var b in bytes){ret <<= 8;ret |= b;}return ret;}/// <summary>/// 判断用户IP地址转换为Long型后是否在内网IP地址所在范围/// </summary>/// <param name="userIp">用户IP</param>/// <param name="begin">开始范围</param>/// <param name="end">结束范围</param>/// <returns></returns>private static bool IsInner(ulong userIp, ulong begin, ulong end){return (userIp >= begin) && (userIp <= end);}/// <summary>/// 获取局域网IP/// </summary>/// <returns></returns>private static string GetLanIp(){foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName())){if (hostAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork){return hostAddress.ToString();}}return string.Empty;}#endregion
}

调用

string Ip = UrlIP.Ip(Request);

MVC获取客户端IP地址方法相关推荐

  1. thinkphp 获取客户端ip地址方法

    /*** 获取客户端IP地址* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字* @param boolean $adv 是否进行高级模式获取(有可能被 ...

  2. c# 获取客户端IP地址方法

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString();  客户端主机名: Request.ServerVaria ...

  3. php获取ip几种方法区别,php获取客户端IP地址的几种方法

    php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...

  4. php获取客户端IP地址的几种方法(转)

    php获取客户端IP地址的几种方法方法一 <?php $iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?>方法二<?php ...

  5. php $_server[remote_addr];,PHP获取客户端IP地址的方法$_SERVER['REMOTE_ADDR']

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @param boolean $adv 是否进行高级模式获取(有 ...

  6. 如何在PHP中获取客户端IP地址[重复]

    本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...

  7. springboot 获取客户端ip_JAVA如何获取客户端IP地址和MAC地址

    本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) ...

  8. Service获取客户端IP地址(java)

    Java代码 <strong>1.基于jax-ws开发的webservice获取客户端ip的方法[在代理类XXXDelegate添加如下代码]:</strong> import ...

  9. 获取客户端ip的方法

    首先先说一下常规的js通过api获取ip的方法: 搜狐接口: <script src="http://pv.sohu.com/cityjson?ie=utf-8">&l ...

  10. java获取客户端IP地址工具类

    代码如下自取: import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletRequest; import java.n ...

最新文章

  1. 讨论Markov Random Field和Gibbs Random Field心得
  2. 直接路径读取对于延迟块清除的影响
  3. NVIDIA之AI Course:Getting Started with AI on Jetson Nano—Class notes(一)
  4. Github标星3w+,热榜第一,如何用Python实现所有算法
  5. 题目: javaweb前端素材管理系统(附免费下载源码链接)
  6. ES6学习笔记六(Iterator和for..of)
  7. 七代处理器装win7_为啥新电脑没法装windows7系统?解决方法总会有的
  8. 机器学习week8 ex7 review
  9. tmap | R语言中专门绘制地图的工具包
  10. Delphi 调用Domino Lotus OA
  11. Linux协议栈网桥部分之CAM表操作
  12. 4-2cglib 动态代理
  13. 网站项目常用JS,CSS等控件插件
  14. linux 内核编程
  15. linux如何磁盘管理工具下载,Linux_Linux系统的磁盘空间管理工具, 1.fdisk -lDis - phpStudy...
  16. log4j2关闭debug日志
  17. 自动清理垃圾文件与文件夹脚本.bat
  18. python练习项目八——下载所有XKCD 漫画
  19. 分体式无线蓝牙耳机什么牌子好?分体式蓝牙耳机排行榜
  20. 阿里实人认证android,Android集成

热门文章

  1. ios uiswitch 开关_IOS开发(四):开关控件UISwitch
  2. 计算机网络第七版谢希仁课后答案第四章(部分答案)
  3. B站批量下载工具——下载姬
  4. 吉利博越L为何被称为新三好SUV
  5. Endnote x7怎么在word中显示的处理方法
  6. html js把json转化为excel,json转换Excel
  7. matlab输数据出结果,matlab对数据的输入输出
  8. 推荐10个 Chrome 插件
  9. android 优秀控件以及开源项目
  10. eeglab和matlab,EEGLAB for Matlab(一)--初识EEGLAB