2009-08-23 9 views
35

Đây là một câu hỏi thực sự đơn giản, nhưng tôi không thể tìm thấy bất kỳ đề cập đến điều này, bất cứ nơi nào ..Nhận địa chỉ IP của khách hàng ở Sinatra?

Làm cách nào để nhận địa chỉ IP của khách hàng từ Sinatra?

get '/' do 
    "Your IP address is #{....}" 
end 
+1

Err, oh, đó là trong '@env [ 'REMOTE_ADDR']' - Tôi đã kiểm tra 'đầu ra env.inspect' @ bằng cách tìm kiếm "127.0.0.1", nhưng nó đã hiển thị địa chỉ IPv6 ':: 1' vì vậy tôi đã bỏ lỡ nó ... Bất cứ ai cũng cảm thấy tự do để đăng bài đó để tôi có thể chấp nhận nó mà không chờ 48 giờ .. (đại diện miễn phí !: P) – dbr

Trả lời

64

Sinatra cung cấp request object, là giao diện cho dữ liệu yêu cầu của khách hàng mà bạn nên sử dụng.

Sử dụng request.ip là phương pháp ưa thích để tìm địa chỉ IP của khách hàng:

get '/' do 
    "Your IP address is #{request.ip}" 
end 
+1

Cần lưu ý rằng phương thức 'Yêu cầu # ip' đến từ Rack, không phải từ Sinatra. – skalee

17

Tôi đã đến gửi câu trả lời anyway .. vậy:

get '/' do 
"Your IP address is #{ @env['REMOTE_ADDR'] }" 
end 

Sinatra sử dụng Rack::Request API, vì vậy bạn có thể sử dụng rất nhiều thứ có sẵn trong đó.
Cũng là một liên kết đến số Sinatra doc's.

+2

Hm, Rack :: Request API đề cập đến phương thức 'ip', xử lý' HTTP_X_FORWARDED_FOR', có cách nào để gọi điều này từ Sinatra không? – dbr

+1

bạn sẽ chỉ có thể làm # {@env ['HTTP_X_FORWARDED_FOR']} Tôi chưa bao giờ thử nghiệm điều này, vì vậy tôi không tích cực. –

+6

bạn cũng có thể thực hiện request.ip trực tiếp. nhận được "/" làm; "IP của bạn: # {request.ip}"; kết thúc – bantic