Refactoring and replace.
addrs = NetworkInterface.addresses(value).values.flatten
# Strip interface name from address (see getifaddrs(3))
addrs = addrs.map { |x| x['addr'].split('%').first }.select do |addr|
begin
IPAddr.new(addr).ipv4? && !addr[/^127.*/]
rescue IPAddr::InvalidAddressError
false
end
end
addrs.any? ? addrs.first : ''
and
iface = NetworkInterface.interfaces.collect do |iface|
ip_address = NetworkInterface.addresses(iface).values.flatten.collect{|x| x['addr']}.select do |addr|
begin
IPAddr.new(addr).ipv4? && !addr[/^127.*/]
rescue IPAddr::InvalidAddressError => e
false
end
end.first
{name: iface, addr: ip_address}
end.select {|ni| ni[:addr]}.first
References:
-
https://github.com/rapid7/metasploit-framework/blob/102db261026058d017e20b9a04399bdf1cb6d7b4/lib/msf/core/opt_address_local.rb#L21-L32
-
https://github.com/rapid7/metasploit-framework/blob/master/spec/lib/msf/core/opt_address_local_spec.rb#L7-L16
Refactoring and replace.
and
References:
https://github.com/rapid7/metasploit-framework/blob/102db261026058d017e20b9a04399bdf1cb6d7b4/lib/msf/core/opt_address_local.rb#L21-L32
https://github.com/rapid7/metasploit-framework/blob/master/spec/lib/msf/core/opt_address_local_spec.rb#L7-L16