获取公共(远程)IP地址

时间:2012-11-07 12:42:47

标签: ruby

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

5 个答案:

答案 0 :(得分:26)

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

答案 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/

现在为时已晚,但我认为这对其他人来说可能是愚蠢的。