就像标题所说,出于测试目的而需要。
答案 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)