ASP.NET: get external IP address

后端 未结 5 1308
深忆病人
深忆病人 2020-12-17 07:13

I developed site. I need to get IP of site visitors. I try to use Request, but it have only internal IP:

Response.Write(Request.ServerVariables[\"REMOTE_ADD         


        
相关标签:
5条回答
  • 2020-12-17 07:26

    You can use it to get External (public) IP Address..

    public static string getExternalIp()
        {
            try
            {
                string externalIP;
                externalIP = (new WebClient()).DownloadString("http://checkip.dyndns.org/");
                externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
                             .Matches(externalIP)[0].ToString();
                return externalIP;
            }
            catch { return null; }
        }
    
    0 讨论(0)
  • 2020-12-17 07:30

    This it part of my implementation for WebTracking. So here you go a snippet for IpAddress retrieval. You can read more about the Server Variables at Wikipedia.

        /// <summary>
        /// Get ip address from request
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private string GetIpAddress(HttpRequest request)
        {
            if (request.ServerVariables.IsNull()) return null;
    
            var _realAddress = request.ServerVariables[@"HTTP_X_FORWARDED_FOR"];
            if (_realAddress.IsNullOrEmpty())
            {
                _realAddress = request.ServerVariables[@"HTTP_FORWARDED"];
            }
            if (_realAddress.IsNullOrEmpty())
            {
                _realAddress = request.ServerVariables[@"REMOTE_ADDR"];
            }
    
            return _realAddress;
        }
    
    0 讨论(0)
  • 2020-12-17 07:30

    You can use like this

    String lstrIpAddress;
    if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null || Request.ServerVariables["HTTP_CLIENT_IP"] != null)
        lstrIpAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    else
        lstrIpAddress = Request.ServerVariables["REMOTE_ADDR"];
    
    0 讨论(0)
  • 2020-12-17 07:35

    you can simply use this nuget package. https://www.nuget.org/packages/IpPublicKnowledge/

    easy and simple. here is an example :

    // Get Public IP
                var ip = IPK.GetMyPublicIp();
    
                //Get all IP infos
                var IPinfo = IPK.GetIpInfo(ip);
    
                //print some info
                Console.WriteLine("*--------------------------- IPK -----------------------------*");
    
                Console.WriteLine("My public IP : " + IPinfo.IP);
                Console.WriteLine();
                Console.WriteLine("My ISP : " + IPinfo.isp);
                Console.WriteLine();
                Console.WriteLine("My Country : " + IPinfo.country);
                Console.WriteLine();
                Console.WriteLine("My Languages : ");
    
                foreach (var lang in IPinfo.languages)
                {
                    Console.WriteLine(" " + lang.Key + " : " + lang.Value);
                }
    
                Console.WriteLine("*-------------------------------------------------------------*");
                Console.Read();
    
    0 讨论(0)
  • 2020-12-17 07:38

    Are you behind a load-balancer/proxy? If so, inspect the headers collection of the request for headers similar to X-FORWARDED-FOR.

    0 讨论(0)
提交回复
热议问题