Какой самый короткий способ генерировать случайный IP-адрес в Ruby? - PullRequest
13 голосов
/ 11 мая 2010

Точно так же, как говорится в заголовке, разыскиваемый для целей тестирования.

Ответы [ 6 ]

25 голосов
/ 11 мая 2010

Вы можете использовать IPAddr

require 'ipaddr'
ipv4 = IPAddr.new(rand(2**32),Socket::AF_INET)
ipv6 = IPAddr.new(rand(2**128),Socket::AF_INET6)
19 голосов
/ 11 мая 2010

Если вы хотите действительно случайный IP-адрес, Array.new(4){rand(256)}.join('.') делает это

12 голосов
/ 16 апреля 2015

Я бы предложил использовать Faker

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

Faker::Internet.ip_v4_address #=> "24.29.18.175"
3 голосов
/ 11 мая 2010

Я использовал это раньше, чтобы сгенерировать случайный 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
3 голосов
/ 11 мая 2010
ip = "%d.%d.%d.%d" % [rand(256), rand(256), rand(256), rand(256)]
0 голосов
/ 06 апреля 2018

Я собирался добавить комментарий 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.XX, но это хорошо для тестирования, если кто-то искал некое разнообразие адресов в не слишком ужасно выглядящем однострочном формате.

Главное преимущество чего-то подобногоили метод Ласса по сравнению с Faker - это снижение риска случайного налогообложения чьих-либо интернет-ресурсов, если по какой-либо причине код пытается связаться со случайным адресом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...