我有一个在Azure的网站,该网站是通过Cloudflare路由额外的保护。
Cloudflare添加了一个标头CF-Connecting-IP
,它应该是客户端的IP地址,然而有时这会给出一真实的IP地址,但大多数时候我得到的是保留的IP地址,而不是客户端的IP。
我测试了它通过我的办公室互联网进入网站,CloudFlare返回了一个保留的IP地址,但是当我进入www.example.com时whatsmyip.org,我得到了我真实的的办公室IP地址。
我怎么能确保总是获得客户端的IP地址,当然除非他们背后的代理或VPN.
5条答案
按热度按时间g9icjywg1#
根据 *masoud ch * 上面的回答,使用
IHttpContextAccessor
而不是HttpRequestBase
的.NET核心版本可能如下所示:要使用控制器中的扩展,请执行以下操作:
主控制器.cs
kxeu7u2r2#
X-Forwarded-For是一个IP地址列表,其中最后一个最有可能是用户的IP地址。
https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-
示例:
X-转发-用于: www.example.com、www.example.com、www.example.com 198.51.100.101 , 198.51.100.102 , 203.0.113.1
在上面的示例中,www.example.com是原始访问者IP地址,www.example.com和www.example.com是通过X-Forwarded-For报头提供给Cloudflare的代理服务器IP地址 203.0.113.1 is the original visitor IP address and 198.51.100.101 and 198.51.100.102 are proxy server IP addresses provided to Cloudflare via the X-Forwarded-For header
我们必须抓住它,如果它存在于列表中,如果不默认为UserHostAddress。作为一个奖金,Cloudflare定义了自己的头为客户端IP地址称为CF连接IP。如果你使用Cloudflare寻找它。如果使用一些其他云提供商检查特定的头,他们可能会定义。下面的例子应该给你很好的一般想法如何获得用户的IP地址。
6yjfywim3#
他们提供CF-Connecting-IP,这应该是正确的。
我不确定CF-Connection-IP中包含哪些内容
https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-
5q4ezhmt4#
如果您阅读了Terry Carmen在唯一的其他答案中发布的链接(在撰写本文时),那么您将看到有2个标题,您可以使用它们来获取IP:
X-转发-用于和CF-连接-IP
我相信X-Forwarded-For是一个更好的选择。如果CF-Connecting-IP不存在,Cloudflare会将其设置为与CF-Connecting-IP相同的值,否则他们会将其值一直保持到服务器。
请考虑以下场景:
用户=〉某个云提供商=〉云耀斑=〉您的服务器
在这种情况下,CF-Connecting-IP将是SomeCloudProvider,因为这是连接到Cloudflare的。但如果SomeCloudProvider在X-Forwarded-For中添加了用户的IP地址,那么Cloudflare将保留此地址并将其发送给您(在报头中),以便您可以获得用户的真实IP地址。
X-Forwarded-For是一个准标准,所有云提供商、路由器、交换机等(我见过)都会添加或维护。
ctzwtxfj5#
使用ForwardedHeadersExtensions,cloudflare和azure也发送
X-Forwarded-For
头。顺便说一下,几乎所有代理都发送这个头如果没有
X-Forwarded-For
标头,则可以指定所需的任何标头在那之后你就可以用常规的方法解析ip了,