我想知道是否有一种简单的方法可以使用 Ruby 获取计算机的公共 IP 地址。
问问题
8442 次
5 回答
33
Akamai 提供了一个“我的 IP 是什么”页面,您可以获取该页面:
require 'open-uri'
remote_ip = open('http://whatismyip.akamai.com').read
但是,有一些替代方案可以做同样的事情:
- http://whatismyip.akamai.com
- http://ipecho.net/plain
- http://icanhazip.com
- http://ident.me
- http://bot.whatismyipaddress.com
您还可以将ipv4
和ipv6
子域与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 回答