質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

4639閲覧

【ruby】IPアドレスをレンジ指定して表示する方法

teru

総合スコア22

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/10/07 15:04

IPアドレスをレンジ指定してから一覧表示する方法を知りたく。
gemにある'ipaddr_range_set'を利用しようと考えています。

例)
サブネットの考慮なしに192.168.1.100から192.168.2.10までのIPアドレスを表示する

rails newしてGemfileに「gem 'ipaddr_range_set'」を追加してbundle install。
irbで動作確認してます。

require = 'ipaddr_range_set'
=> "ipaddr_range_set"
irb(main):008:0> range = IPAddrRangeSet.new("192.168.1.100".."192.168.2.10")

今現在、irbでrangeと打つと下記状態です。

irb(main):015:0* range
=> #<IPAddrRangeSet:0x007f862564ad90 @segments=[#<IPAddr: IPv4:192.168.1.100/255.255.255.255>..#<IPAddr: IPv4:192.168.2.10/255.255.255.255>]>

このrangeから
192.168.1.100〜192.168.2.10のIPアドレスを取り出し、

192.168.1.100
192.168.1.101
192.168.1.102
:
:
:
192.168.2.10
となるようにするにはどのようにrangeから値を抜けば良いのでしょうか。

range.segments
range[segments]
range@segments
とかではダメでした。

他にいいgemがありましたらそちらも教えていただきたく。

お手数ですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こちら の回答例はいかがでしょう。

Ruby

1# I would suggest naming your function using underscore rather than camelcase 2# because of Ruby naming conventions 3# 4require 'ipaddr' 5 6def convert_ip_range(start_ip, end_ip) 7 start_ip = IPAddr.new(start_ip) 8 end_ip = IPAddr.new(end_ip) 9 10 # map to_s if you like, you can also call to_a, 11 # IPAddrs have some neat functions regarding IPs, 12 # be sure to check them out 13 # 14 (start_ip..end_ip).map(&:to_s) 15end 16 17irb(main):026:0> convert_ip_range("192.168.1.250", "192.168.2.2") 18=> ["192.168.1.250", "192.168.1.251", "192.168.1.252", "192.168.1.253", "192.168.1.254", "192.168.1.255", "192.168.2.0", "192.168.2.1", "192.168.2.2"] 19irb(main):027:0>

投稿2015/10/07 15:55

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teru

2015/10/07 21:57

いつも回答ありがとうございます。またよろしくお願いします。
guest

0

ベストアンサー

実装をみてみるとsegments メソッドはパブリック メソッドではないのですね...

Ruby の標準ライブラリを利用してRange を作成してみるのがいいのかもしれません

ruby

1# I would suggest naming your function using underscore rather than camelcase 2# because of Ruby naming conventions 3# 4require 'ipaddr' 5 6def convert_ip_range(start_ip, end_ip) 7 start_ip = IPAddr.new(start_ip) 8 end_ip = IPAddr.new(end_ip) 9 10 # map to_s if you like, you can also call to_a, 11 # IPAddrs have some neat functions regarding IPs, 12 # be sure to check them out 13 # 14 (start_ip..end_ip).map(&:to_s) 15end

ruby

1ip1 = '192.168.1.100' 2ip2 = '192.168.2.10' 3 4puts convert_ip_range(ip1, ip2)

実行結果:

ruby

1192.168.1.100 2192.168.1.101 3192.168.1.102 4192.168.1.103 5192.168.1.104 6192.168.1.105 7192.168.1.106 8192.168.1.107 9# ~snip~ 10192.168.1.252 11192.168.1.253 12192.168.1.254 13192.168.1.255 14192.168.2.0 15192.168.2.1 16192.168.2.2 17# ~snip~ 18192.168.2.8 19192.168.2.9 20192.168.2.10

簡単に調べてみましたが、何か参考になれば幸いです

Links

投稿2015/10/07 15:41

gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teru

2015/10/07 21:56

いつもながら早い回答、ありがとうございます。StackOverFlowに出ていたんですね。お手数おかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問