如何在Web服务C#中获取客户端机器的Internet地址

时间:2017-09-29 09:14:17

标签: c# .net web-services

我想在asp.net web服务中使用客户端机器互联网IP地址,因为我正在使用以下代码

string IPaddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(IPaddress))
    IPaddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(IPaddress))
    IPaddress = HttpContext.Current.Request.UserHostAddress;

但是我在这里得到客户机本地IP但是*我正在寻找客户端机器的公共IP / Internet IP *

请帮助我,任何人。

2 个答案:

答案 0 :(得分:0)

Request的几个属性提供客户端IP地址。 这是代码:

private string GetClientIpAddress (HttpRequestMessage request)
        {
        if ( request.Properties.ContainsKey("MS_HttpContext") )
            {
            return ((HttpContextWrapper) request.Properties["MS_HttpContext"]).Request.UserHostAddress;
            }
        if ( request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name) )
            {
            var prop = (RemoteEndpointMessageProperty) request.Properties[RemoteEndpointMessageProperty.Name];
            return prop.Address;
            }

        if ( request.Headers.Contains("X-Forwarded-For") )
            {
            return request.Headers.GetValues("X-Forwarded-For").FirstOrDefault();
            }

        // Self-hosting using Owin. Add below code if you are using Owin communication listener
        if ( request.Properties.ContainsKey("MS_OwinContext") )
            {
            var owinContext = (OwinContext) request.Properties["MS_OwinContext"];
            if ( owinContext?.Request != null )
                {
                return owinContext.Request.RemoteIpAddress;
                }
            }

        if ( HttpContext.Current != null )
            {
            return HttpContext.Current.Request.UserHostAddress;
            }

        return null;

        }

希望它会奏效。 〜普拉萨德

答案 1 :(得分:0)

您将获得客户端连接到服务器的连接的IP地址。如果这是在同一网络中,您将看不到公共IP地址,因为连接不通过互联网路由。