FlylinkDC++

ru

Инструменты пользователя

Инструменты сайта


Боковая панель

Меню

  • Расширения протокола NMDC от команды Flylinkdc++

* История изменений
* Работа с дампами
* Разработчикам
* Форум разработчиков и пользователей FlylinkDC++
* Добавить свой хаб в настройки программы
* Принять участие в локализации на другие языки
* Оффициальная группа ВКонтакте

ru:test.php

Сценарий test предназначен для проверки возможности соединения извне к программе FlylinkDC++ через роутер/маршрутизатор/фаервол/брандмауэр в локальной сети или через общедоступные сети Интернет.

Работу по проверке можно производить как вручную, так и через окно Настройка соединения. В первом случае достаточно перейти по адресу скрипта (уточните у администратора установлен ли он на сервере вашего провайдера). Во втором — сам FlylinkDC++ подготовит необходимые параметры и передаст их сценарию для проверки.

Передаваемые GET-параметры:

  • port_IP — номер тестируемого TCP-порта, например, 16211. Обязательный
  • port_PI — номер тестируемого UDP-порта, например, 16212. Не используется без port_IP и ver.
  • ver — версия вызываемой программы. Включает проверку UDP-порта
  • result=xml — включение вывода xml-отчета для Мастера первичной настройки FlylinkDC++
test.php
<?php
/* Скрипт тестирования портов для программы FlylinkDC++
 Форма запроса:
 
 http://<сайт>/test.php?port_IP=16211&port_PI=16212&ver=192
 где
 - port_IP - номер тестируемого TCP-порта, например, 16211
 - port_PI - номер тестируемого UDP-порта, например, 16212
 - ver - версия программы
 
 В случае, если параметр ver не указан, будет проведена проверка
 только TCP порта.
 
 Тест udp не будет проходить при прямом соединении! Только в случае
     модема/роутера/фаервола либо NAT.
 
 Автор: SkazochNik (11.01.07) skazochnik97@mail.ru
 Правил: a.rainman
 
 Правка от 17.07.2011
 [+] добавлен флаг &result=xml для вывода отчета мастеру настроек via Sergey Stolper
*/
 
// Настройка
$log_sc = 0; // Вести лог (0 - нет, 1 - да) Отключен по умолчанию
$port_start = 1023; // Начальный возможный порт
$port_end = 65536; // Конечный возможный порт
$print_err_mess = 0; // Флаг показа ошибки сервера (0 - не показывать, 1 - показывать) Отключен по умолчанию
$socket_timeout = 0.2; // Таймаут соединения
$scriptver = "17.07.2011"; // Версия
 
// Дальше лучше ничего не трогать
ignore_user_abort(0); // не продолжать работу скрипта, даже если это никому не надо
$xml_output_buffer = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<testResult>\n"; // отдельный буфер для создания xml'я
 
if (!isset($_POST["port"])) {
	$port = null;
} else {
	$port = $_POST["port"];
}
// Придумаем переменную, если ее нет. Совместимость между версиями PHP (?)
if (!isset($PHP_SELF)){
	$PHP_SELF = basename($_SERVER["PHP_SELF"]);
}
 
if (!isset($_POST["ver"])) {
	$ver = null;
} else {
	$ver = $_POST["ver"];
}
 
if(!isset($_POST["port"]) && isset($_GET["ver"])){
	$ver = $_GET["ver"];
	$port = $_GET["port_IP"];
	$port_udp = $_GET["port_PI"];
}
ob_start();
$host = "[{$_SERVER['REMOTE_ADDR']}]";
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Дата из прошлого
 
echo <<<END
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Тест портов для программы FlylinkDC++</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache, must-revalidate" />
<style type="text/css">
<!--
body {
	background-color: #fff;
	margin-top: 40px;
}
table {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	margin-left: auto;
	margin-right: auto;
}
td {
	padding: 1px;
}
button {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
}
a {
	color: #000;
}
.message_alert {
	color: #990000;
}
.message_grant {
	color: #009900;
}
.red_box {
	height: 8px;
	width: 18px;
	margin-right: 5px;
	font-size: 10px;
	background-color: #990000;
}
.mess_row {
	background-color: #eee;
	font-weight: bold;
}
.copyright {
	background-color: #eee;
}
-->
</style>
</head>
<body>
<table width="600"><tr><td>
END;
 
if (isset($port) && intval($port) > $port_start && intval($port) < $port_end)// && $port != $port_udp)
{
 
if (!isset($ver)){
	echo <<<END
	<p>Идет тест для <strong>$host</strong> порт TCP <strong>$port</strong> ...</p>
END;
} else {
	echo <<<END
	<p>Идет тест для <strong>$host</strong> порт TCP <strong>$port</strong> порт UDP <strong>$port_udp</strong> ...</p>
END;
}
 
if (!@ fsockopen ($host, $port, &$errno, &$errstr, $socket_timeout)) {
		if ($errno=="60" || $errno=="10060"){
			$error_mess = "TCP не прошел проверку. Конечный компьютер не ответил на соединение. Может следует <a href=\"http://flylinkdc.ru/portforward.htm\" target=\"_blank\">почитать</a> как настроить портфорвардиг?";
		}
		if ($errno=="10061" || $errno=="61" || $errno=="111"){
			$error_mess = "TCP не прошел проверку. Соединение отклонено. Может следует <a href=\"http://flylinkdc.com/doku.php?id=ru:portforward\" target=\"_blank\">почитать</a> как настроить портфорвардиг?";
		}
 
		if ($print_err_mess) {
			$error_mess .= "<p>$errno - $errstr</p>";
		}
		echo <<<END
		</td></tr><tr><td class="mess_row"><strong>Тест TCP:</strong><br /><span class="red_box">&nbsp;&nbsp;&nbsp;</span><span class="message_alert">$error_mess</span>
END;
		$isok = $errno; // флаг состояния
		$xml_output_buffer .= "<tcp>false</tcp>\n";
	} else {
		echo <<<END
		</td></tr><tr><td class="mess_row"><strong>Тест TCP:</strong><br /><span class="red_box">&nbsp;&nbsp;&nbsp;</span><span class="message_grant">Проверка TCP-порта пройдена.</span>
END;
		$isok = "ok";
		$xml_output_buffer .= "<tcp>ok</tcp>\n";
	}
 
/*	Идет запрос из программы
	Проверяем порт udp
*/
if (isset($ver)) {
$fa = @fsockopen ($host, $port_udp, &$errnov, &$errstrv, $socket_timeout); # Правка от 04.06.07

	if ($errnov=="60" || $errnov=="0") {
		$error_mess = "<span class=\"message_grant\">Очевидно предположить, что UDP-порт настроен верно. Поздравляю :)</span>";
		$xml_output_buffer .= "<udp>ok</udp>\n";
	}
	if ($errnov=="61" || $errnov=="111" || $errnov== "110") {
		$error_mess = "<span class=\"message_alert\"><font color=\"#990000\">UDP не прошел проверку. Может следует <a href=\"http://flylinkdc.com/doku.php?id=ru:portforward\" target=\"_blank\">почитать</a> как настроить портфорвардиг? Хотя если соединение прямое, то это сообщение нормально и для правильно настроенного порта.</span>";
		$xml_output_buffer .= "<udp>false</udp>\n";
	}
 
	$xml_output_buffer .= "</testResult>";
	if(isset($_GET["result"])){ob_end_clean();die($xml_output_buffer);}
if($isok == "ok") {
 
	if ($print_err_mess) {
		$error_mess .= "<p>$errnov - $errstrv</p>";
	}
 
	echo <<<END
	<br />Teст UDP:<br />
	<span class="red_box">&nbsp;&nbsp;&nbsp;</span>$error_mess</td></tr>
	<tr><td><br />
END;
	} else {
	echo <<<END
	<br />Teст UDP:<br />
	<span class="red_box">&nbsp;&nbsp;&nbsp;</span>Нет смысла проводить тест UDP.</td></tr>
	<tr><td><br />
END;
}
	}
 
echo <<<END
	</td></tr>
	<tr><td>
	<p>Что можно еще сделать:</p>
	<ul>
		<li><a href="javascript: window.close();">Закрыть страницу</a></li>
		<li><a href="http://flylinkdc.ru/portforward.htm" target="_blank">Почитать о портфорвардинге</a></li>
		<li><a href="$PHP_SELF">Вернуться назад</a></li>
	</ul>
	<br />
END;
	if ($log_sc) {
		file_put_contents("test.log", "$host:$port:$port_udp:$ver:$isok\n", FILE_APPEND);
	}
}
 
if(!intval($port)>$port_start && !intval($port)<$port_end || intval($port)=="" && isset($port))
{
echo <<<END
	<span style="color:#FF0000;"><strong>Не выполнено:</strong> не введен номер порта.</span>
END;
}
 
if (!isset($ver)){
echo <<<END
<br />Введите номер TCP порта для проверки ($port_start &#8249; PORT &#8249; $port_end):
<form action="$PHP_SELF" method="post">
	<table width="100%">
	<tr><td><b>Порт:</b></td>
	<td><input type="text" name="port" value="$port" maxlength="5" /></td></tr>
	<tr><td></td><td><input type="submit" name="Submit" value="Нажать" /></td></tr>
	</table>
</form>
END;
}
 
if ($port == $port_udp & 0) {
echo <<<END
</td></tr><tr><td class="mess_row"><div style="margin: 0 auto; width: 270px;"><span class="message_alert"><font color="#990000">Порты TCP и UDP не должны совпадать.</font></span></div>
END;
} else {
echo <<<END
</td></tr><tr><td class="copyright"><strong>Кодинг:</strong> SkazochNik (skazochnik9&#55;&#64;mail&#46;ru)<br /><strong>Мысли:</strong> PPA (p&#97;vel.pimenov&#64;gmail&#46;com) <br /><strong>Версия от:</strong> $scriptver</td></tr></table>
</body></html>
END;
}
ob_end_flush();
?>
ru/test.php.txt · Последние изменения: 2012/11/08 22:15 (внешнее изменение)