我有一個由三個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範圍成一個獨特的可變,所以後來我可以改變的範圍爲CIDR格式和合並。然後我將最終結果保存到一個數組中。最後,我嘗試寫的輸出入格式的文件(合併後的IP地址/ AS號碼):
240.28.56.0/24 64513
250.154.64.0/24 64513
251.154.65.0/24 64513
16.1.1.1/32 64513
而且我有以下代碼:
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地址被寫入文件三次,我所期待的是有來自實體-A合併後的IP地址與實體-A的AS號等。
我不知道我在做什麼錯。
當我們展示了輸入數據的陣列,請不要使用'inspect'輸出,而不是提供代碼生成數組。要求我們重新生成代碼來創建'#
謝謝@theTinMan我不知道這一點,我試圖變得簡單,但相反,我變得更加複雜!下次我會更加小心! – mf370
如果你現在要修復它,這真的很有幫助。請記住,Stack Overflow不是一個討論列表,它更像是一本在線參考書,而你的問題是一篇新文章。因此,使文章有意義是很重要的。好問問題收集選票。 –