2010-05-11 80 views

回答

25

你可以使用IPADDR验证它

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

请注意,这可以生成以0开头的地址,这一切(RFC3330)无效。 – mdrozdziel 2013-06-08 10:23:21

+0

由于起始位置0并不理想,所以我会在 – 2014-06-10 05:29:07

+1

以下回答数组答案。为了安全起见,这将从** 10.xxx **私有子网生成有效的IPv4地址:IPAddr.new(10 * 2 ** 24 + rand(2 ** 24),Socket :: AF_INET)' – Laas 2014-10-01 20:14:06

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

这不会总是产生一个有效的地址。 (在极少数情况下,它可能会生成'0.0.0.0'或'255.255.255.255'这些不是有效的地址) – 2010-05-11 04:35:02

+0

这两个地址是否违反了某个规则?他们看起来对我很好。由于选举委员会只提出了一个模糊的问题,这两个问题与其他问题一样好。 – dbasnett 2010-05-11 12:55:11

+2

如果我没有记错,他们是好的IP号码,但预先分配给网络广播。没有机器的IP地址为0.0.0.0或255.255.255.255,但他们可以响应对这些号码的请求。如果这在应用程序中是有意义的,那么可以使用它们。有关更多信息,请参阅http://en.wikipedia.org/wiki/Broadcast_address。 – 2010-05-11 18:33:28

17

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

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 
8

我会建议使用Faker

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

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

这真的很棒,实际上....它是活跃和维护的。就像它有IPv4和6以及URI一样。 – Angela 2016-05-16 18:18:57

+0

尽管我对图书馆并不熟悉,但我也推荐'Faker'。我的主要原因是这个库似乎已经被创建用于你的用例。 [文档](https://github.com/stympy/faker#fakerinternet)也表明它更好地处理特殊的IP地址。 – Aaron 2016-07-07 14:43:09

相关问题