Подтвердить что ты не робот

Как получить IP-адрес моей локальной машины в Ruby?

Я занимаюсь разработкой Rails в ОС Ubuntu 12.04LTS.

Я хочу захватить локальный IP-адрес в файле, а не loopback 127.0.0.1, тот, который я использую ifconfig. Пожалуйста, предложите решение.

4b9b3361

Ответ 2

Это мой первый способ:

require 'socket' 
    def local_ip
  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # turn off reverse DNS resolution temporarily

  UDPSocket.open do |s|
    s.connect '64.233.187.99', 1
    s.addr.last
  end
ensure
  Socket.do_not_reverse_lookup = orig
end

# irb:0> local_ip
# => "192.168.0.127"

Это мой второй способ, который не рекомендуется:

require 'socket'
 Socket::getaddrinfo(Socket.gethostname,"echo",Socket::AF_INET)[0][3]

Третий способ:

 UDPSocket.open {|s| s.connect('64.233.187.99', 1); s.addr.last }

И четвертый способ:

Use Socket#ip_address_list

Socket.ip_address_list #=> Array of AddrInfo

Ответ 3

Напишите ниже метод

def self.local_ip
    orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
    UDPSocket.open do |s|
      s.connect '64.233.187.99', 1
      s.addr.last
    end
    ensure
      Socket.do_not_reverse_lookup = orig
 end

а затем вызовите метод local_ip, вы получите IP-адрес своего устройства.

Eg: ip_address= local_ip