<?php
error_reporting(E_ERROR | E_PARSE);

$port = intval($_GET['port'])
    or die('2 no port specified');

function request($fp) {
  if (!$fp || !fwrite($fp, "GET test HTTP/1.0\r\n\r\n")) return false;
  $res = '';
  while (!feof($fp) && strlen($res) < 10*1024) $res .= fgets($fp,4*1024);
  fclose($fp);
  return (boolean)strpos($res,'HFS OK');
}

$ip = getenv('HTTP_X_FORWARDED_FOR')
    or $ip = getenv('REMOTE_ADDR');
$host = $_GET['host']
    or $host = $ip;
preg_match('/[-.\w]{1,50}/',$host)
    or die('5 malformed host');
preg_match('/[-.\w]{1,50}/',$ip)
    or die('5 malformed ip');
if (request(@fsockopen($host, $port, $errno, $errstr, 5))) die('1 all is ok');
switch ($_GET['natted']) {
  case 'yes': die("6 server does not answer.\n\nYou are behind a router.");
  case 'no': die("7 server does not answer.\n\nYou may be behind a firewall.");     
  default: die("3 server does not answer.\n\nYou may be behind a router or firewall.");
}
