Получить общедоступный (удаленный) IP-адрес - программирование
Подтвердить что ты не робот

Получить общедоступный (удаленный) IP-адрес

Мне было интересно, был ли простой способ получить общедоступный IP-адрес компьютера с помощью Ruby.

4b9b3361

Ответ 1

Akamai предоставляет страницу "Что такое IP-адрес", которую вы можете выбрать:

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

Есть несколько альтернатив, которые делают одно и то же:

Вы также можете использовать субдомены ipv4 и ipv6 с ipogre.com и icanhazip.com.

Если вы не хотите зависеть от третьей стороны, вы можете сворачивать свой собственный в однострочном приложении стойки и развернуть это бесплатно на Heroku или что-то еще. Он принимает во внимание, что X-Forwarded-For может содержать список прокси-адресов, разделенных запятыми, и возвращает IP-адрес клиента.

# 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]] 
}

Вы можете попробовать его на экземпляре Heroku в http://remote-ip.herokuapp.com.

Ответ 2

Нет необходимости соскабливать!

Я использую ipify, открытый api, который возвращает ваш общедоступный IP-адрес. Полезно, если вам нужен ответ json (не показан здесь).

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

Или с curl:

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

Не волнуйтесь, это не мой общедоступный IP-адрес:)

Ответ 3

Я использую curl:

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

Это не использует Ruby stdlib и требует завитки.

Ответ 4

Я бы использовал сервис, например http://www.whatsmyip.website/, чтобы программно получить IP. Использование чего-то вроде Linux curl автоматически вернет IP-адрес, но если вы используете другое приложение/язык, вам может потребоваться проверить их API.

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

Ответ 5

Я ищу ту же проблему и нашел отличное решение на основе API.

Чтобы получить общедоступный IP-адрес, мы можем использовать приведенный ниже код:

require "net/http"

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

URL-адрес веб-сайта: https://www.ipify.org/

Это слишком поздно, чтобы успокоиться, но я подумал, что это может быть для других.