在Ruby中生成随机IP地址的最短方法是什么?

时间:2010-05-11 04:27:49

标签: ruby-on-rails ruby networking random

就像标题所说,出于测试目的而需要。

7 个答案:

答案 0 :(得分:25)

您可以使用IPAddr

require 'ipaddr'
ipv4 = IPAddr.new(rand(2**32),Socket::AF_INET)
ipv6 = IPAddr.new(rand(2**128),Socket::AF_INET6)

答案 1 :(得分:19)

如果您想要一个真正随机的IP地址,Array.new(4){rand(256)}.join('.')会这样做

答案 2 :(得分:12)

我建议使用Faker

https://github.com/stympy/faker#fakerinternet

Faker::Internet.ip_v4_address #=> "24.29.18.175"

答案 3 :(得分:3)

ip = "%d.%d.%d.%d" % [rand(256), rand(256), rand(256), rand(256)]

答案 4 :(得分:3)

之前我用过这个来生成随机ip,然后使用Resolv验证它

  ip = "#{rand(99)}.#{rand(100)}.#{rand(10)}.#{rand(255)}"
  begin
    if ip
      host = Resolv.new.getname(ip) 
      puts "#{c} #{real_ip.length} #{ip} #{host}" 
    end
  rescue Exception => e
    puts "FAKE #{ip}"
  end

答案 5 :(得分:0)

我打算使用一些代码来获取Lass的评论以获取任何安全的RFC1918地址,但尚未获得足够的声誉。

所以,如果我们采用以下数学结果:

10*2**24 = 167772160
172*2**24 + 16*2**16 = 2886729728
192*2**24 + 168*2**16 = 3232235520

并将它们填充到一个填充在IPAddr.new方法

中的数组中
IPAddr.new([167772160, 2886729728, 3232235520].sample + rand(2**16), Socket::AF_INET)

生成大多数RF1918空间。不幸的是,这将始终产生10.0.X.X地址,但如果一个人正在寻找一种不太可怕的单行格式的地址变种,那么这应该没问题。

像这样或Lass的方法相比Faker的一个主要好处是,如果代码由于某种原因试图触及随机地址,可以降低对某人的互联网资源意外征税的风险。

答案 6 :(得分:0)

要在合理的网络范围内(例如10.0.0.0/24或2001:db8 :: / 64)生成有效 IP地址,请执行以下操作:

require 'ipaddr'
ipv4 = IPAddr.new("10.0.0.0/24", Socket::AF_INET) | IPAddr.new(rand(2**(32-24)),Socket::AF_INET)
ipv6 = IPAddr.new("2001:db8:cafe:babe::/64", Socket::AF_INET6) | IPAddr.new(rand(2**(128-64)),Socket::AF_INET6)

这可以推广到任何子网:

subnet = "192.168.100.0"
prefix = 24
ipv4 = IPAddr.new("#{subnet}/#{prefix}", Socket::AF_INET) | IPAddr.new(rand(2**(32-prefix)),Socket::AF_INET)