我试图检查我服务器上的端口是否已打开,我有一些PHP来执行此操作
<?php
$host = 'xxxxxxxxxxxxxxxxxxx';
$ports = array(xxxxxx);
foreach ($ports as $port)
{
$connection = @fsockopen($host, $port);
if (is_resource($connection))
{
echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";
fclose($connection);
}
else
{
echo '<h2>' . $host . ':' . $port . ' is not responding.</h2>' . "\n";
}
}
?>
其中输出以下内容:
domain.zapto.org:80(http)已打开。 domain.zapto.org:8090不是。 响应。 domain.zapto.org:34134没有回复。
但是,如果我去domain.zapto.org:34134它工作正常....所以它是可以访问的,但为什么它说它不是?有任何想法吗?谢谢你们。
答案 0 :(得分:1)
通过提供fsockopen
函数附加参数为您的代码添加基本调试(请参阅manual)
$host = 'theofilaktoshouse.zapto.org';
$ports = array(80, 8090, 34134);
foreach ($ports as $port)
{
$errno = null;
$errstr = null;
$connection = @fsockopen($host, $port, $errno, $errstr);
if (is_resource($connection)) {
echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";
fclose($connection);
} else {
echo "<h2>{$host}:{$port} is not responding. Error {$errno}: {$errstr} </h2>" . "\n";
}
}
原因为什么它可能不起作用是您的主机设置的流量规则。他们可以轻松地禁止到80以外的端口的传出连接