获取公共(远程)IP地址

Jea*_*Luc 15 ruby

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

Pat*_*ity 26

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

require 'open-uri'
remote_ip = open('http://whatismyip.akamai.com').read
Run Code Online (Sandbox Code Playgroud)

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

您也可以使用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]] 
}
Run Code Online (Sandbox Code Playgroud)


jpa*_*eri 6

无需刮痧!

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

require 'net/http'
public_ip = Net::HTTP.get URI "https://api.ipify.org"
=> "12.34.56.78" 
Run Code Online (Sandbox Code Playgroud)

或卷曲:

public_ip = `curl https://api.ipify.org`
=> "12.34.56.78"
Run Code Online (Sandbox Code Playgroud)

别激动,那不是我的公网地址 :)