代码之家  ›  专栏  ›  技术社区  ›  Ben Crouse

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

  •  13
  • Ben Crouse  · 技术社区  · 14 年前

    正如标题所说,为了测试的目的。

    6 回复  |  直到 6 年前
        1
  •  25
  •   Aaron Lee    14 年前

    你可以用ipaddr

    require 'ipaddr'
    ipv4 = IPAddr.new(rand(2**32),Socket::AF_INET)
    ipv6 = IPAddr.new(rand(2**128),Socket::AF_INET6)
    
        2
  •  18
  •   Chubas    14 年前

    如果你想要一个真正随机的IP地址, Array.new(4){rand(256)}.join('.') 它吗

        3
  •  12
  •   Edmond Chui    9 年前

    我建议用冒牌货

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

    Faker::Internet.ip_v4_address #=> "24.29.18.175"
    
        4
  •  3
  •   Paige Ruten    14 年前
    ip = "%d.%d.%d.%d" % [rand(256), rand(256), rand(256), rand(256)]
    
        5
  •  3
  •   jspooner Ryan Bigg    14 年前

    我以前用过这个来生成一个随机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
    
        6
  •  0
  •   Bob Smith    6 年前

    我本来打算接着 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的一个主要好处是,如果代码出于某种原因试图访问随机地址,则会降低对某人的互联网资源意外征税的风险。