我想知道是否有一种简单的方法可以使用Ruby获取计算机的公共IP地址。
答案 0 :(得分:26)
Akamai提供了一个“我的IP是什么”页面,您可以获取:
require 'open-uri'
remote_ip = open('http://whatismyip.akamai.com').read
但是有一些替代方案可以做同样的事情:
您还可以将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]]
}
答案 1 :(得分:4)
不需要刮刮!
我使用ipify,一个打开api,返回你的公共IP地址。如果你想要一个json响应(这里没有显示),这很有用。
require 'net/http'
public_ip = Net::HTTP.get URI "https://api.ipify.org"
=> "12.3.45.678"
或者卷曲:
public_ip = `curl https://api.ipify.org`
=> "12.3.45.678"
不要激动,这不是我的公共IP地址:)
答案 2 :(得分:1)
我使用curl:
my_ip = `curl http://ipecho.net/plain`
这不使用Ruby stdlib,但需要卷曲。
答案 3 :(得分:0)
我使用http://www.whatsmyip.website/之类的服务以编程方式获取IP。使用像Linux curl这样的东西会自动返回IP,但是如果你使用不同的应用程序/语言,你可能需要查看他们的API。
ip = `curl http://www.whatsmyip.website`
答案 4 :(得分: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/
现在为时已晚,但我认为这对其他人来说可能是愚蠢的。