2009-08-23 8 views
35

Questa è una domanda molto semplice, ma non riesco a trovare alcuna menzione di questo, ovunque ..Ottieni l'indirizzo IP del cliente in Sinatra?

Come posso ottenere l'indirizzo IP del client da Sinatra?

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

Err, oh, è in '@env [ 'REMOTE_ADDR']' - avevo controllato l'uscita env.inspect' '@ cercando "127.0.0.1", ma mostrava l'indirizzo IPv6 ':: 1' quindi mi sono perso ... Chiunque si senta libero di postare così posso accettarlo senza l'attesa di 48 ore .. (rappresentante gratuito !: P) – dbr

risposta

64

Sinatra offre un request object, che è l'interfaccia per i dati richiesta del cliente che si dovrebbe usare.

Utilizzando request.ip è il metodo preferito per trovare l'indirizzo IP del client:

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

Va notato che il metodo 'Richiesta # ip' viene da Rack, non da Sinatra. – skalee

17

venivo a inviare la risposta comunque .. così:

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

Sinatra utilizza il Rack::Request API, in modo da poter usare un sacco di cose disponibili in esso.
Anche un collegamento allo Sinatra doc's.

+2

Hm, l'API Rack :: Request menziona un metodo 'ip', che gestisce anche' HTTP_X_FORWARDED_FOR', c'è un modo per chiamare questo da Sinatra? – dbr

+1

dovresti essere in grado di fare solo # {@env ['HTTP_X_FORWARDED_FOR']} Non l'ho mai testato, quindi non sono positivo. –

+6

puoi anche fare request.ip direttamente. prendi "/" fai; "il tuo IP: # {request.ip}"; fine – bantic

Problemi correlati