指定されたIPアドレスの範囲を出力する

YouTubeをIPブロックできないかで調べたときに出来た代物。 6万近くIPが出力されたので/etc/hostsに書き込むのは現実的ではない...。 とりあえずメモしておく。

#!/usr/bin/ruby
def ip_addrs(num1, num2)
  num1_arr = num1.split(".").map(&:to_i)
  num2_arr = num2.split(".").map(&:to_i)

  ret = []
  (num1_arr[0]..num2_arr[0]).map do |ip1|
    (num1_arr[1]..num2_arr[1]).map do |ip2|
      (num1_arr[2]..num2_arr[2]).map do |ip3|
        (num1_arr[3]..num2_arr[3]).map do |ip4|
          ret.push "#{ip1}.#{ip2}.#{ip3}.#{ip4}"
        end
      end
    end
  end
  ret
end

nums1 = "207.223.160.0 - 207.223.175.255".split(" - ")
nums2 = "208.65.152.0 - 208.65.155.255".split(" - ")
nums3 = "208.117.224.0 - 208.117.255.255".split(" - ")
nums4 = "209.85.128.0 - 209.85.255.255".split(" - ")
nums5 = "216.58.192.0 - 216.58.223.255".split(" - ")
nums6 = "216.239.32.0 - 216.239.63.255".split(" - ")
ip_addrs_arr = [nums1, nums2, nums3, nums4, nums5, nums6].map do |nums|
  ip_addrs(nums[0], nums[1])
end
f = File.open("ipaddr.txt", "w")
ip_addrs_arr.map do |ip_arr|
  puts ip_arr.size
  f.puts(ip_arr)
end
$ ./iploop.rb
4096
1024
8192
32768
8192
8192
207.223.160.0
207.223.160.1
207.223.160.2
207.223.160.3
207.223.160.4
   ・
   ・
   ・
216.239.63.251
216.239.63.252
216.239.63.253
216.239.63.254
216.239.63.255