【问题标题】:Get The Public IP Address Of The User Who Is Visiting My Website获取访问我网站的用户的公共 IP 地址
【发布时间】:2018-06-11 12:18:23
【问题描述】:

我在下面的代码中尝试了这个。但它给了我::1

string IPAddress = string.Empty;
string SearchName = string.Empty;

            String strHostName = System.Web.HttpContext.Current.Request.UserHostAddress.ToString();

            IPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

我希望输出应该类似于:(358.89.48.188)

所以我期待任何可以帮助我的人。

(通过获取此信息,我将获取位置并将其传递给 Session,因此我的 Controller 和操作会根据客户端位置做出反应)

【问题讨论】:

  • ::1 代表本地主机。因此,如果您尝试在本地进行测试。你总会得到这个。
  • @SehaxX 所以如果我部署并在站点中尝试,我可以期待它正常工作
  • @gokul:当你从不同的(非本地主机)系统访问它时会发生什么?
  • strHostName 的值是多少?它应该包含字符串格式的 IP。
  • What is IP address '::1'?的可能重复

标签: c# asp.net-mvc


【解决方案1】:

试试这个...

 public string GetIpAddress()
    {
         var ipAddress=Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
         if(string.IsNullOrEmpty(ipAddress))
         {
             return Request.ServerVariables["REMOTE_ADDR"];
         }
         return ipAddress;
    }

【讨论】:

  • 在服务器(非本地)系统上执行。
  • External IP166.91.48.188 Loaded PlaceOK;;89.129.8.172;IN;India;Maharashtra;Mumbai;400099;19.0144;72.8479;+05:30 ,这是我在记录器中得到的,但是我需要用户(访问我网站的公共 IP 的客户)这个 IP 是我的公共 IP 地址
  • @gokul - 一个需要进一步澄清的问题 - 例如,如果用户使用 IP 地址 xxx.xxx.xxx.xxx 访问您的网站 (abc.com)(将本地 abc.com 指向主机中的 xxx文件),其中用户的公网IP是yyy.yyy.yyy.yyy,那么你要xxx还是yyy?
  • 我的网站托管在基于孟买的 IP 中,如果我的客户从泰米尔纳德邦访问它,我需要他系统的 IP 地址,因此在转换其 IP 地址时,我将从泰米尔纳德邦获得一个位置
  • @gokul - Request.ServerVariables["REMOTE_ADDR"],应该给你 yyy 部分。那么你认为你日志中的 89.129.8.172 不是用户地址吗?
【解决方案2】:

标题##嘿,感谢您的贡献,我通过使用以下代码得到了答案,希望它可能对将来的某些人有所帮助##标题##

    public string GetVisitorIPAddress(bool GetLan = false)
    {
        string visitorIPAddress = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                   if (String.IsNullOrEmpty(visitorIPAddress))
            visitorIPAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                  if (string.IsNullOrEmpty(visitorIPAddress))
            visitorIPAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

        if (string.IsNullOrEmpty(visitorIPAddress) || visitorIPAddress.Trim() == "::1")
        {
            GetLan = true;
            visitorIPAddress = string.Empty;
        }
        if (GetLan)
        {
            if (string.IsNullOrEmpty(visitorIPAddress))
            {
                //This is for Local(LAN) Connected ID Address
                string stringHostName = Dns.GetHostName();
                //Get Ip Host Entry
                IPHostEntry ipHostEntries = Dns.GetHostEntry(stringHostName);
                //Get Ip Address From The Ip Host Entry Address List
                IPAddress[] arrIpAddress = ipHostEntries.AddressList;
                try
                {
                    visitorIPAddress = arrIpAddress[arrIpAddress.Length - 2].ToString();
                }
                catch
                {
                    try
                    {
                        visitorIPAddress = arrIpAddress[0].ToString();
                    }
                    catch
                    {
                        try
                        {
                            arrIpAddress = Dns.GetHostAddresses(stringHostName);
                            visitorIPAddress = arrIpAddress[0].ToString();
                        }
                        catch
                        {
                            visitorIPAddress = "127.0.0.1";
                        }
                    }
                }

            }

        }

        var zaz = "";
        zaz = visitorIPAddress.ToString();
        getcityname(zaz);
        return null;
    }

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2015-03-06
    • 2014-12-08
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多