从服务器获取客户端端口号

时间:2015-02-19 15:27:15

标签: ruby ruby-on-rails-4

有一种方法可以通过rails服务器在控制器上获取客户端端口吗?

我知道哪些可以通过 request.remote_ip 获取远程IP,但我需要像request.remote_port这样的东西。

1 个答案:

答案 0 :(得分:1)

Rack的Hijacking功能公开了底层的Socket或IO对象。

以下是使用Puma的示例,它返回TCPSocket

if request.env['rack.hijack?']
  request.env['rack.hijack'].call
  io = request.env['rack.hijack_io']
  io.class    #=> TCPSocket
  io.addr     #=> ["AF_INET", 3000, "127.0.0.1", "127.0.0.1"]
  io.peeraddr #=> ["AF_INET", 51464, "127.0.0.1", "127.0.0.1"]
end