2010-05-11 11 views

Respuesta

25

Usted podría utilizar IPAddr

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

Tenga en cuenta que esto puede generar direcciones comenzando con 0, que por supuesto (RFC3330) no es válido. – mdrozdziel

+0

ya que los 0s iniciales no son los ideales, recomendaría la matriz de respuestas debajo de –

+1

Para estar en el lado seguro, esto genera direcciones IPv4 válidas de la subred privada ** 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

que no siempre va a generar una dirección válida. (En raras ocasiones, podría generar '0.0.0.0' o' 255.255.255.255' que no son direcciones válidas) –

+0

¿Estas dos direcciones rompen alguna regla? Se ven bien para mí. Como OP solo hizo una pregunta vaga, esos dos son tan buenos como cualquier otro. – dbasnett

+2

Si mal no recuerdo, son buenos números de IP pero están preasignados para transmisiones de red. Ninguna máquina puede tener una IP de 0.0.0.0 o 255.255.255.255, pero pueden responder a las solicitudes de esos números. Si eso tiene sentido en una aplicación, entonces está bien usarlos. Consulte http://en.wikipedia.org/wiki/Broadcast_address para obtener más información. –

17

Si desea una dirección IP verdaderamente aleatoria, Array.new(4){rand(256)}.join('.') lo hace

3

he utilizado esto antes de generar una IP al azar y luego valide 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

Yo sugeriría usar Faker

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

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

esto es bastante increíble, en realidad ... ¿está activo y mantenido? Al igual que tiene IPv4 y 6 y URI. – Angela

+0

Aunque no estoy muy familiarizado con la biblioteca, recomendaría 'Faker' también. Mi razón principal es que esta biblioteca parece haber sido creada para su caso de uso. [Los documentos] (https://github.com/styles/faker#fakerinternet) también sugieren que también maneja direcciones IP especiales. – Aaron

Cuestiones relacionadas