获取本机IP地址

逃离我推掉我的手 2022-06-04 09:39 442阅读 0赞

牛娜新闻发布系统进行的时候,发表评论需要获取发表者的本机IP地址,但是使用 string userIp = Request.ServerVariables[“Remote_ADDR”]; 只能获得“::1”这种格式,于是在网上查了又查,造成这种现象的原因可能是因为Ipv6,解决方法如下:

  1. /// <summary>
  2. /// 取得客户端主机IPv4 位址
  3. /// </summary>
  4. /// <returns></returns>
  5. public static string GetClientIPv4()
  6. {
  7. string ipv4 = String.Empty;
  8. foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))
  9. {
  10. if (ip.AddressFamily.ToString() == "InterNetwork")
  11. {
  12. ipv4 = ip.ToString();
  13. break;
  14. }
  15. }
  16. if (ipv4 != String.Empty)
  17. {
  18. return ipv4;
  19. }
  20. // 原作使用 Dns.GetHostName 方法取回的是 Server 端资讯,非 Client 端。
  21. // 改写为利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 记录,
  22. // 再逐一判断何者属IPv4 协定,即可转为 IPv4 地址。
  23. foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
  24. {
  25. if (ip.AddressFamily.ToString() == "InterNetwork")
  26. {
  27. ipv4 = ip.ToString();
  28. break;
  29. }
  30. }
  31. return ipv4;
  32. }
  33. /// <summary>
  34. /// 取得客戶端主机地址
  35. /// </summary>
  36. public static string GetClientIP()
  37. {
  38. if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])
  39. {
  40. return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  41. }
  42. else
  43. {
  44. return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  45. }
  46. }

然后我们只需要调用GetClientIPv4()这个方法即可。

感谢您的阅读~

发表评论

表情:
评论列表 (有 0 条评论,442人围观)

还没有评论,来说两句吧...

相关阅读

    相关 用java获取IP地址

    在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一

    相关 java获取IP地址方法

            在生产环境要是使用Spring定时任务的话,会在多台机器上定时启动相同的任务,为了保证只在一台机器上执行定时任务,我们在执行定时任务的时候先判断一下当前机器的I