在 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 地址?的主要内容,如果未能解决你的问题,请参考以下文章

java怎么获取客户端的请求信息

如何在开发过程中获取客户端的ip呢?

如何在 PHP 中获取已连接客户端的 MAC 和 IP 地址?

如何用javascript获取客户端的IP地址?

在 ASP.NET Core 2.2 中获取客户端的 IP 地址

获取客户端的ip地址与mac地址总结