私は3つのRubyオブジェクトで構成された配列を持ち、各オブジェクトはエンティティを表し、各エンティティは内部のAS番号、パブリックとプライベートのIPアドレス範囲を持っています。Rubyオブジェクトからファイルに書き込む方法
entities = [#<Entity:0x0000000288a570 @name="entity-A",@internal_asn_number=64513, @public_range=["240.28.56.0-240.28.56.255", "250.154.64.0-250.154.64.255", "251.154.65.0-251.154.65.255"], @private_range=["16.1.1.1-16.1.1.254"]>, #<Entity:0x000000028839a0 @name="entity-B", @internal_asn_number=64514, @public_range=["195.65.46.0-195.65.46.255","196.2.84.0-196.2.84.255","197.13.105.0-197.13.105.255"], @private_range=["11.2.1.1-11.2.1.254"]>, #<Entity:0x0000000287b0c0 @name="entity-C", @internal_asn_number=64512, @public_range=["102.206.119.0-102.206.119.255", "103.206.12.0-103.206.12.255", "104.28.90.0-104.28.90.255"], @private_range=["2.1.1.1-2.1.1.254"]>]
私はIPが1つのユニークな変数に及ぶので、私はその後、CIDR形式に範囲を変換し、それらをマージすることができます保存: 配列はこのようになります。次に、最終結果を配列に保存します。
240.28.56.0/24 64513
250.154.64.0/24 64513
251.154.65.0/24 64513
16.1.1.1/32 64513
そして、私は次のコードを持っている:最後に、私は(AS番号/マージされたIPアドレス)形式のファイルに出力を書き込みしよう
require 'netaddr'
cidrs = Array.new
File.open('out.dat', "w") do |f|
entities.each do |entity|
asn = entity.internal_asn_number
ranges = entity.public_range + entity.private_range
ranges.each do |ip_range|
new_range = ip_range.split(/\s*-\s*/)
startip = new_range[0]
endip = new_range[1]
ip_net_range = NetAddr.range(startip, endip, :Inclusive => true, :Objectify => true)
cidrs << NetAddr.merge(ip_net_range)
end
new_cidrs = cidrs.flatten
new_cidrs.each do |ip|
f.write("#{ip}\t #{asn}\n")
end
end
end
このコードは私に与え、次の出力:
240.28.56.0/24 64513
250.154.64.0/24 64513
251.154.65.0/24 64513
16.1.1.1/32 64513
16.1.1.2/31 64513
16.1.1.4/30 64513
16.1.1.8/29 64513
16.1.1.16/28 64513
16.1.1.32/27 64513
16.1.1.64/26 64513
16.1.1.128/26 64513
16.1.1.192/27 64513
16.1.1.224/28 64513
16.1.1.240/29 64513
16.1.1.248/30 64513
16.1.1.252/31 64513
16.1.1.254/32 64513
240.28.56.0/24 64514
250.154.64.0/24 64514
251.154.65.0/24 64514
16.1.1.1/32 64514
16.1.1.2/31 64514
16.1.1.4/30 64514
16.1.1.8/29 64514
16.1.1.16/28 64514
16.1.1.32/27 64514
16.1.1.64/26 64514
16.1.1.128/26 64514
16.1.1.192/27 64514
16.1.1.224/28 64514
16.1.1.240/29 64514
16.1.1.248/30 64514
16.1.1.252/31 64514
16.1.1.254/32 64514
195.65.46.0/24 64514
196.2.84.0/24 64514
197.13.105.0/24 64514
11.2.1.1/32 64514
11.2.1.2/31 64514
11.2.1.4/30 64514
11.2.1.8/29 64514
11.2.1.16/28 64514
11.2.1.32/27 64514
11.2.1.64/26 64514
11.2.1.128/26 64514
11.2.1.192/27 64514
11.2.1.224/28 64514
11.2.1.240/29 64514
11.2.1.248/30 64514
11.2.1.252/31 64514
11.2.1.254/32 64514
240.28.56.0/24 64512
250.154.64.0/24 64512
251.154.65.0/24 64512
16.1.1.1/32 64512
16.1.1.2/31 64512
16.1.1.4/30 64512
16.1.1.8/29 64512
16.1.1.16/28 64512
16.1.1.32/27 64512
16.1.1.64/26 64512
16.1.1.128/26 64512
16.1.1.192/27 64512
16.1.1.224/28 64512
16.1.1.240/29 64512
16.1.1.248/30 64512
16.1.1.252/31 64512
[...]
基本的には、IPアドレスがファイルに3回を書かれて、私が期待していたことはようにエンティティAとのAS番号を持つエンティティ-AからマージされたIPアドレスを持っていたされています。
私は何が間違っているのか分かりません。
配列を生成します。 '#Entity:0x0000000288a570 ... 'を作成するコードを再生成するように頼むと、あなたを助けようとするときに時間が浪費され、私たちが助けることができる他のもののために無駄になります。 「[mcve]」を参照してください。 –
ありがとう@theTinMan私はそれを知らなかった、私は単純にしようとしていたが、代わりに私は複雑です!次回はもっと慎重になるよ! – mf370
今回はそれを修正しておけば本当に助かります。スタックオーバーフローはディスカッションリストではなく、オンライン参考書のようなものであり、あなたの質問は新しい記事であることを覚えておいてください。このように、記事を理にかなったものにすることが重要です。よく質問された質問が投票を集める。 –