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