测试端口是否打开并使用PHP转发

Cha*_*lts 18 php portforwarding

全面披露:有一个类似的问题在这里.

有什么方法可以测试特定端口是否使用PHP打开并正确转发?具体来说,如何使用套接字连接给定端口的给定用户?

这方面的一个例子是WhatsMyIP.org/ports的"自定义端口测试"部分.

Ali*_*xel 78

我不确定你被"正确转发"是什么意思,但希望这个例子可以解决这个问题:

$host = 'stackoverflow.com';
$ports = array(21, 25, 80, 81, 110, 443, 3306);

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

stackoverflow.com:21 is not responding.
stackoverflow.com:25 is not responding.
stackoverflow.com:80 (http) is open.
stackoverflow.com:81 is not responding.
stackoverflow.com:110 is not responding.
stackoverflow.com:443 is not responding.
stackoverflow.com:3306 is not responding.
Run Code Online (Sandbox Code Playgroud)

有关端口号的完整列表,请参见http://www.iana.org/assignments/port-numbers.

  • 设置 timout 也很有用 `$connection = @fsockopen($host, $port, $errno, $errstr, 30);` [php.net/fsockopen](http://php.net/fsockopen) (4认同)
  • 我是否认为这会测试您的出站和接收器入站,所以如果您想编写一个函数来测试您的出站,您需要找到一个公共服务器,所有入站端口都是打开的吗? (2认同)