在 Sinatra 中获取客户端的 IP 地址?
Posted
技术标签:
【中文标题】在 Sinatra 中获取客户端的 IP 地址?【英文标题】:Get client's IP address in Sinatra? 【发布时间】:2010-11-22 02:29:56 【问题描述】:这是一个非常简单的问题,但我在任何地方都找不到任何提及这一点..
如何从 Sinatra 中获取客户端的 IP 地址?
get '/' do
"Your IP address is #...."
end
【问题讨论】:
呃,哦,它在@env['REMOTE_ADDR']
中 - 我通过搜索“127.0.0.1”检查了 @env.inspect
输出,但它显示的是 IPv6 ::1
地址,所以我错过了。 ..任何人都可以随意发布,这样我就可以在没有 48 小时等待的情况下接受它..(免费代表!:P)
【参考方案1】:
反正我是来发布答案的。所以:
get '/' do
"Your IP address is # @env['REMOTE_ADDR'] "
end
Sinatra 使用 Rack::Request API,因此您可以使用其中的许多可用内容。 还有Sinatra doc's的链接。
【讨论】:
嗯,Rack::Request API 提到了一个ip
方法,它也处理 HTTP_X_FORWARDED_FOR
,有没有办法从 Sinatra 调用它?
你应该能够做到 # @env['HTTP_X_FORWARDED_FOR'] 不过我从来没有测试过这个,所以我不是肯定的。
你也可以直接做 request.ip 。得到“/”做; "你的 IP:#request.ip";结束
参见:github.com/chneukirchen/rack/blob/master/lib/rack/… ... 此处非常冒险【参考方案2】:
Sinatra 提供了一个request
object,它是您应该使用的客户端请求数据的接口。
使用request.ip
是查找客户端IP地址的首选方法:
get '/' do
"Your IP address is #request.ip"
end
【讨论】:
需要注意的是Request#ip
方法来自Rack,而不是来自Sinatra。以上是关于在 Sinatra 中获取客户端的 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中获取已连接客户端的 MAC 和 IP 地址?