21

我想知道是否有一种简单的方法可以使用 Ruby 获取计算机的公共 IP 地址。

4

5 回答 5

33

Akamai 提供了一个“我的 IP 是什么”页面,您可以获取该页面:

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

但是,有一些替代方案可以做同样的事情:

您还可以将ipv4ipv6子域与icanhazip.com.

如果您不想依赖第三方,您可以在单行机架应用程序中推出自己的应用程序,并将其免费部署在 Heroku 或其他任何地方。它考虑到X-Forwarded-For可能包含逗号分隔的代理 IP 地址列表,并且只返回客户端 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]] 
}
于 2012-11-07T13:25:00.007 回答
7

不需要刮!

我使用ipify,一个返回您的公共 IP 地址的开放 API。如果您想要一个 json 响应(此处未显示),这很有用。

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

或卷曲:

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

不要激动,那不是我的公共 IP 地址 :)

于 2015-06-24T03:13:50.160 回答
2

我使用卷曲:

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

这不使用 Ruby stdlib,但需要 curl。

于 2013-12-03T00:03:48.610 回答
0

我会使用诸如http://www.whatsmyip.website/之类的服务以编程方式获取 IP。使用 Linux curl 之类的东西会自动返回 IP,但如果您使用不同的应用程序/语言,您可能需要查看他们的 API。

ip = `curl http://www.whatsmyip.website`
于 2015-10-21T16:16:17.607 回答
0

我正在寻找同样的问题,并找到了基于 API 的出色解决方案。

要获取公共 IP 地址,我们可以使用以下代码:

require "net/http"

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

API 网站网址:https://www.ipify.org/

现在回答这个问题为时已晚,但我认为这对其他人来说可能是有害的。

于 2017-06-23T12:42:56.847 回答