2010-05-11 106 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

相關問題