如何在不使用外部服务的情况下在ASP.NET中获取客户端的外部IPv4地址?

时间:2015-08-13 11:44:57

标签: c# asp.net asp.net-mvc webforms ip

我目前正在使用以下功能获取客户端的外部IPv4地址:

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; }
        }

有没有其他方法可以在不使用任何外部网站或服务的情况下获得相同的结果?

2 个答案:

答案 0 :(得分:2)

获取内部IP地址

protected string GetInternalIP()
        {
            System.Web.HttpContext context = System.Web.HttpContext.Current;
            string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (!string.IsNullOrEmpty(ipAddress))
            {
                string[] addresses = ipAddress.Split(',');
                if (addresses.Length != 0)
                {
                    return addresses[0];
                }
            }

            return context.Request.ServerVariables["REMOTE_ADDR"];
        }

获取外部IP地址

    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; }
    }

答案 1 :(得分:1)

没有。因为实际上只有当你连接到服务器时他才能告诉你你来自哪里......所以除了建立与另一个服务的连接之外别无选择。它很快......(如果这让你感到困扰......)希望你理解。