Как получить IP-адрес моей локальной машины в Ruby? Я занимаюсь разработкой Rails в ОС Ubuntu 12.04LTS. Я хочу захватить локальный IP-адрес в файле, а не loopback 127.0.0.1, тот, который я использую ifconfig. Пожалуйста, предложите решение. Ответ 1 Используйте Socket:: ip_address_list. Socket.ip_address_list #=> Array of AddrInfo Ответ 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
Ответ 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