2010-05-11 2 views

risposta

25

Si potrebbe utilizzare IPAddr

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

Attenzione, questo può generare indirizzi che iniziano con 0, che con tutti i mezzi (RFC3330) non è valido. – mdrozdziel

+0

dal momento che gli 0 iniziali non sono ideali, vorrei inserire la risposta dell'array sotto –

+1

Per sicurezza, questo genera indirizzi IPv4 validi dalla sottorete privata ** 10.xxx **: 'IPAddr.new (10 * 2 ** 24 + rand (2 ** 24), Socket :: AF_INET) ' – Laas

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

Che non genererà sempre un indirizzo valido. (In rare occasioni, potrebbe generare '0.0.0.0' o' 255.255.255.255' che non sono indirizzi validi) –

+0

Questi due indirizzi infrangono qualche regola? Mi stanno bene. Dal momento che l'OP ha solo posto una domanda vaga, questi due sono ugualmente buoni come altri. – dbasnett

+2

Se ricordo bene, sono buoni numeri IP ma sono pre-assegnati alle trasmissioni di rete. Nessuna macchina può avere un IP di 0.0.0.0 o 255.255.255.255, ma possono rispondere alle richieste a quei numeri. Se ciò ha senso in un'applicazione, allora è OK usarli. Vedi http://en.wikipedia.org/wiki/Broadcast_address per maggiori informazioni. –

17

Se si desidera un indirizzo IP realmente casuale, Array.new(4){rand(256)}.join('.') lo fa

3

Ho usato questo prima di generare un IP casuale quindi convalidare con 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

io suggerirei di usare Faker

012.

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

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

questo è davvero fantastico, in realtà .... è attivo e mantenuto. Come quello che ha sia IPv4 e 6 e URI. – Angela

+0

Anche se non conosco bene la libreria, consiglierei anche 'Faker'. La mia ragione principale è che questa libreria sembra essere stata creata per il tuo caso d'uso. [I documenti] (https://github.com/stympy/faker#fakerinternet) suggeriscono anche che gestisce meglio anche gli indirizzi IP speciali. – Aaron