X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fconsole%2Fclass_ConsoleTools.php;h=876f61ca68d638a7bd2e99fa2871619d413ff6e5;hp=2dfe18ff9da8feef36ceb7f16330fe52c51e0e0c;hb=08ebb6a4213421fff6bde3ff172c8416954db878;hpb=3ff00f264808bccde553b75fcd976cd47790d719 diff --git a/inc/classes/main/console/class_ConsoleTools.php b/inc/classes/main/console/class_ConsoleTools.php index 2dfe18ff..876f61ca 100644 --- a/inc/classes/main/console/class_ConsoleTools.php +++ b/inc/classes/main/console/class_ConsoleTools.php @@ -116,6 +116,41 @@ class ConsoleTools extends BaseFrameworkSystem { // Return the IP address return $ip; } + + /** + * Determines own remote IP address (e.g. can be used to probe if we are + * reachable from outside by determining external IP and then connect to it. + * This is accomblished by connecting to the IP of www.ship-simu.org which + * should default to 217.172.186.31. + * + * This method is taken and lightly rewritten from a user comment on php.net: + * http://de.php.net/manual/en/function.socket-create.php#49368 + * + * @param $dest IP destination we should connect to + * @param $port Port destination we should connect to + * @return $externalAddress The determined external IP address + * @throws InvalidSocketException If socket initialization wents wrong + */ + public function determineExternalIp ($dest = '217.172.186.31', $port = 80) { + // First get a socket + $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + if (!is_resource($socket)) { + // Throw InvalidSocketException + throw new InvalidSocketException (array($this, gettype($socket), 0, 'unknown')); + } // END - if + + // Connect to the destination + socket_connect($socket, $dest, $port); + + // Get the socket address (our external IP) and port (ignored) + socket_getsockname($socket, $externalAddress, $ourPort); + + // Close the socket + socket_close($socket); + + // Return determined external IP + return $externalAddress; + } } // [EOF]