/** * Module dependencies. */ var net = require('net'); var ip = require('ip'); /** * Module exports. */ module.exports = myIpAddress; myIpAddress.async = true; /** * Returns the IP address of the host that the Navigator is running on, as * a string in the dot-separated integer format. * * Example: * * ``` js * myIpAddress() * // would return the string "198.95.249.79" if you were running the * // Navigator on that host. * ``` * * @return {String} external IP address */ function myIpAddress (fn) { // 8.8.8.8:53 is "Google Public DNS": // https://developers.google.com/speed/public-dns/ var socket = net.connect({ host: '8.8.8.8', port: 53 }); socket.once('error', function(err) { // if we fail to access Google DNS (as in firewall blocks access), // fallback to querying IP locally fn(null, ip.address()); }); socket.once('connect', function () { socket.removeListener('error', fn); var ip = socket.address().address; socket.destroy(); fn(null, ip); }); }