21

Ruby を使用してコンピューターのパブリック IP アドレスを取得する簡単な方法があるかどうか疑問に思っていました。

4

5 に答える 5

33

Akamai は、取得できる「What is my IP」ページを提供しています。

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

ただし、同じことを行ういくつかの代替手段があります。

ipv4ipv6サブドメインを で使用することもできますicanhazip.com

サードパーティに依存したくない場合は、独自の 1 行のラック アプリを作成して、Heroku などに無料でデプロイできます。プロキシ IP アドレスのカンマ区切りのリストが含まれる可能性があることを考慮しX-Forwarded-For、クライアント 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 に答える