1. string HostName = string.Empty;
  2. string ip = string.Empty;
  3. string ipv4 = String.Empty;
  4.  
  5. if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
  6. ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
  7. if (string.IsNullOrEmpty(ip))
  8. ip = Request.UserHostAddress;
  9.  
  10.  // 利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 纪录,
     // 再逐一判断何者为 IPv4 协议,即可转为 IPv4 位址。
  11. foreach (IPAddress ipAddr in Dns.GetHostEntry(ip).AddressList)
  12. {
  13. if (ipAddr.AddressFamily.ToString() == "InterNetwork")
  14. {
  15. ipv4 = ipAddr.ToString();
  16. }
  17. }
  18.  
  19. HostName = "主机名: " + Dns.GetHostEntry(ip).HostName + " IP: " + ipv4;

  在本机进行程序代码调试测试,其中字符串ip会显示为::1,是IPv6的IP地址格式,相当于127.0.0.1。最终处理成IPv4的显示地址。

-------------------------------------------------------------------------------------------------------------------------------------------------

上述方法,代码调试没有问题,但是放在服务器上后,客户端访问就出问题了,有部分电脑能获取主机名,但是ipv4显示为空,另外一部分

Dns.GetHostEntry(ip)中的ip正常,但是执行Dns.GetHostEntry(ip)貌似为null,导致出现异常。最后选择的方法是只记录客户端的IPV4,

  1. /// <summary>
  2. /// 获取web客户端ip
  3. /// </summary>
  4. /// <returns></returns>
  5. public static string GetWebClientIp()
  6. {
  7.  
  8. string userIP = "未获取用户IP";
  9.  
  10. try
  11. {
  12. if (System.Web.HttpContext.Current == null
  13. || System.Web.HttpContext.Current.Request == null
  14. || System.Web.HttpContext.Current.Request.ServerVariables == null)
  15. {
  16. return "";
  17. }
  18.  
  19. string CustomerIP = "";
  20.  
  21. //CDN加速后取到的IP simone 090805
  22. CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
  23. if (!string.IsNullOrEmpty(CustomerIP))
  24. {
  25. return CustomerIP;
  26. }
  27.  
  28. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  29.  
  30. if (!String.IsNullOrEmpty(CustomerIP))
  31. {
  32. return CustomerIP;
  33. }
  34.  
  35. if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
  36. {
  37. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  38.  
  39. if (CustomerIP == null)
  40. {
  41. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  42. }
  43. }
  44. else
  45. {
  46. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  47. }
  48.  
  49. if (string.Compare(CustomerIP, "unknown", true) == || String.IsNullOrEmpty(CustomerIP))
  50. {
  51. return System.Web.HttpContext.Current.Request.UserHostAddress;
  52. }
  53. return CustomerIP;
  54. }
  55. catch { }
  56.  
  57. return userIP;
  58.  
  59. }

Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址的更多相关文章

  1. java 获取局域网中的全部主机名和IP地址

    DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...

  2. python获取设备主机名和IP地址

    import socket def print_machine_info(): host_name = socket.gethostname() ip_address = socket.gethost ...

  3. 理解ASP.NET MVC的路由系统

    引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请 ...

  4. 【ASP.NET】判断访问网站的客户端是PC还是手机

    原文:[ASP.NET]判断访问网站的客户端是PC还是手机 主要就是通过客户端传递的User-agent来判断访问网站的客户端是PC还是手机,.NET中就是Request.ServerVariable ...

  5. 获取访问用户的客户端IP(适用于公网与局域网).

     /**   * 获取访问用户的客户端IP(适用于公网与局域网).   */   public final String getIpAddr(final HttpServletRequest requ ...

  6. ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素

    阅读目录 Bootstrap 栅格(Grid)系统 Bootstrap HTML元素 Bootstrap 验证样式 ASP.NET MVC创建包含Bootstrap样式编辑模板 小结 Bootstra ...

  7. asp.net mvc源码分析-ModelValidatorProviders 客户端的验证

    几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...

  8. asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值

    asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...

  9. ASP.NET MVC Controller激活系统详解1

    一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...

随机推荐

  1. 更新pip

    python -m pip install pip --upgrade pip要保持最新的,才可以去下载最新的其他的第三方包

  2. JAVA设计模式:静态代理

    一.概念代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...

  3. dockerfile初试之tomcat8封装

    前面学习了一些docker相关资料,有看到dockerfile这个东东,一时没看得太明白,理论给合实践是最好的学习方法,自己做一下就行了嘛.主要步聚记录如下: 0)环境 10.202.105.96   ...

  4. Oracle Stream配置详细步骤

    1 引言 Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication.Oracle Stream利用高级队列技 ...

  5. emqtt 3 (我要subscribe 这个topic)

    这一次,主要分析client subscribe 某个topic 的处理流程. 由protocol开始 是的,还是要从protocol开始,至于为什么,之前就说过了. subscribe 类型的pac ...

  6. php sprintf()

    在写php代码的时候,有时候会用到sprintf()这个函数,那么它是怎么用的呢? 学习源头: http://www.w3school.com.cn/php/func_string_sprintf.a ...

  7. (转)pipe row的用法, Oracle split 函数写法.

    本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...

  8. C语言中的未初始化变量的值

    C语言中未初始化的变量的值是0么 全局变量 .静态变量初始值为0局部变量,自动变量初始值随机分配 C语言中,定义局部变量时如果未初始化,则值是随机的,为什么? 定义局部变量,其实就是在栈中通过移动栈指 ...

  9. [置顶] STM32的ADC1采集多条通道,可以不使用DMA功能吗?

    类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器.它有多达18条 ...

  10. linux下dmesg命令详解

    前言:     有时候想查看一下开机启动信息,可以通过这个命令查询. 1,命令格式 功能说明:显示开机信息.  语 法:dmesg [-cn][-s <缓冲区大小>]  补充说明:kern ...