A server typically has more than one interface, at least one private and one public. Since all the answers here deal with this simple scenario, a cleaner way is to ask Socket for the current ip_address_list() as in: require 'socket' def my_first_private_ipv4 Socket.ip_address_list.detect{|intf| intf.ipv4_private?} end def my_first_public_ipv4 Socket.ip_address_list.detect{|intf| intf.ipv4? and !intf.ipv4_loopback? and !intf.ipv4_multicast? and !intf.ipv4_private?} end Both returns an Addrinfo object, so if you need a string you can use the ip_address() method, as in: ip= my_first_public_ipv4.ip_address unless my_first_public_ipv4.nil?