2012-11-07 18 views
15

Zastanawiam się, czy istnieje prosty sposób na uzyskanie publicznego adresu IP komputera przy użyciu Rubiego.Uzyskaj publiczny (zdalny) adres IP

+3

Pobierz [whatismyip] (http://www.whatismyip.com/) i sparsuj. :) –

+0

jakie informacje masz pod ręką? nazwa domeny?Jeśli użytkownik jest bezpośrednio połączony z serwerem .. to ip klienta jest publiczne IP – ShadyKiller

+0

Gdzie jest uruchamiany kod na komputerze użytkownika końcowego? czy rozmawiają już z serwerem zewnętrznym (żądanie internetowe IE)? – Doon

Odpowiedz

26

Akamai zapewnia "Jakie jest moje IP" stronę, że można pobierał:

require 'open-uri' 
remote_ip = open('http://whatismyip.akamai.com').read 

Istnieje kilka alternatyw, które robią to samo, choć:

Można również użyć ipv4 i ipv6 subdomen z icanhazip.com.

Jeśli nie chcesz polegać na innej osobie, możesz przetasować ją w aplikacji z jedną stacją i wdrożyć ją za darmo na Heroku lub cokolwiek innego. Bierze pod uwagę, że X-Forwarded-For może zawierać rozdzielaną przecinkami listę adresów IP proxy i zwraca tylko adres IP klienta.

# config.ru 

run lambda { |env| 
    remote_ip = env['HTTP_X_FORWARDED_FOR'] || env['REMOTE_ADDR'] 
    remote_ip = remote_ip.scan(/[\d.]+/).first 
    [200, {'Content-Type'=>'text/plain'}, [remote_ip]] 
} 
+0

To świetnie, dzięki za link! – Stefan

+1

Lub "wymagaj" open-uri "; otwiera ("http://automation.whatismyip.com/n09230945.asp") .read ' –

+0

Istnieje również: ' require 'open-uri'; otwiera ("http://ifconfig.me/ip") .read' – roychri

1

Używam curl:

my_ip = `curl http://ipecho.net/plain` 

nie używać Ruby stdlib i wymaga curl chociaż.

3

Bez skrobania!

Używam ipify, otwartego api, który zwraca twój publiczny adres IP. Przydatne, jeśli chcesz uzyskać odpowiedź jsona (nie pokazano tutaj).

require 'net/http' 
public_ip = Net::HTTP.get URI "https://api.ipify.org" 
=> "12.3.45.678" 

Albo z curl:

public_ip = `curl https://api.ipify.org` 
=> "12.3.45.678" 

Nie denerwować się, to nie mój publiczny adres IP :)

0

Chciałbym skorzystać z usługi, takie jak http://www.whatsmyip.website/ programowo uzyskać adres IP . Używanie czegoś takiego jak zwinięcie Linuksa automatycznie po prostu zwróci IP, ale jeśli używasz innej aplikacji/języka, może zajść potrzeba sprawdzenia ich API.

ip = `curl http://www.whatsmyip.website` 
0

Szukam tego samego problemu i znalazłem doskonałe rozwiązanie oparte API.

Aby uzyskać publiczny adres IP może możemy użyć poniższy kod:

require "net/http" 

ip = Net::HTTP.get(URI("https://api.ipify.org")) 
puts "My public IP Address is: " + ip 

Url API strony: https://www.ipify.org/

Jest zbyt późno, aby asnwer na ten temat, ale myślałem, może to być halpful dla innych .

Powiązane problemy